docker 容器

Docker学习地址:

视频:https://www.bilibili.com/video/av32048704/?p=38

文档:http://www.runoob.com/docker/docker-install-mysql.html

安装Docker教程

建议安装Ubuntu系统,CentOS使用CentOS7,CentOS6支持性不好

Ubuntu 16.04 Server 版安装过程图文详解  https://www.linuxidc.com/Linux/2017-11/148341.htm

Ubuntu 16.04安装docker详细步骤  https://blog.csdn.net/jinking01/article/details/82490688
{
sudo apt-get install -y docker-ce 这个步骤之前的命令也要执行,否则会提示找不到docker-ce
}

知识体系:

1、镜像

相关命令:

docker images(查看所有镜像)

docker pull redis(拉取最新版本的镜像,redis)

docker pull redis:3(拉取指定版本,redis)

利用私服拉取镜像

docker rmi 【镜像名称】(删除镜像)

docker search redis(远程搜索关于redis的镜像)

2、容器

docker ps(查看正在运行的容器)

docker ps -a(查看所有容器)

docker create --name 【容器名称】 -p 【外部暴露端口】:【内部端口】 【镜像名称:版本号】

=》docker create --name redis-container -p 16379:6379 redis:3(创建容器,存储redis镜像)

docker start 【容器名称/容器ID】(启动容器)

=》名称/ID可以不写全,只要能辨认出即可

docker stop 【容器名称/容器ID】(关闭容器)

docker run -d(创建容器,与create命令一致)

=》create创建成功后返回的是ID,而run成功后返回的是日志信息

docker rm 【容器名称/ID】(删除容器)

docker rm 【容器名称/ID】 -f(强制删除容器)

容器相当于一个沙箱,有时我们需要进入容器内做一些操作,比如修改配置文件等;

-it代表-i和-t

-i指打开容器的标准输入(容器跟它有交互,可以输入东西)

-t指分配一个伪终端,并且绑定到容器的标准输入上(我们可以看到一个界面)

docker exec -it 【容器名称/ID】 /bin/bash(进入容器内部)

exit(进入容器内部后的退出命令)

docker logs -f 【容器名称/ID】(查看某容器的日志输出)

=》一般配合start使用,

=》docker start redis && docker logs -f redis

3、数据管理,挂载目录

在create或者run容器时,可以通过-v参数指定主机的目录,挂载到容器中的某一个目录上,这样容器就在这个目录读写数据了。从而实现了容器和数据的分离。

docker pull percona:5.6

docker pull 域名/percona:5.6(私服下载)

docker create --name percona -v /data/mysql-data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root123 percona:5.6
(主机目录-容器外部目录:挂载目录-容器内部目录,-e就是指定参数,指定ROOT用户的密码)

=》percona容器虽然可以创建成功,但是启动后在列表中一直看不见

sudo docker run -d percona(创建容器,如果没有镜像,则会自动拉取)

4、构建镜像

docker的镜像必须基于某一个镜像

java -jar -Dport=16868(JVM运行参数)jar包名称 [运行参数:--port=16868]

java -jar -Dport=16868 springcloud-eureka-server-1.0-SNAPSHOT.jar

java -jar springcloud-eureka-server-1.0-SNAPSHOT.jar --port=16890

sudo docker pull java:8

===Dockerfile文件内容===
FROM java:8
COPY ./springcloud-eureka-server-1.0-SNAPSHOT.jar /itcast-eureka/springcloud-eureka-server-1.0-SNAPSHOT.jar
COPY ./app-entrypoint.sh /
RUN chmod +x /app-entrypoint.sh
EXPOSE 3306

ENTRYPOINT ["/app-entrypoint.sh"]


===app-entrypoint.sh文件===
#!/bin/bash

java -jar /itcast-eureka/springcloud-eureka-server-1.0-SNAPSHOT.jar

sudo docker build -t itcast-eureka-container:1.0.0 .(制作镜像,点"."代表当前目录)

docker tag 93e5281934c5 itcast-eureka-image:1.0.0(重命名镜像名称和版本,原来的不会被删除)

sudo docker create --name eureka-server-container -t -p 6868:6868 itcast-eureka-image:1.0.0

sudo docker start eureka-server-container && sudo docker logs -f eureka-server-container

Got permission denied while trying to connect to the Docker daemon socket at unix

备注:

1、sudo是指将ROOT管理员权限赋予其他用户

2、--help(查看某命令的帮助信息)

3、一个容器只能包含一个镜像吗?

4、可以针对一个内部端口,创建多个容器-改变容器名称和外部端口即可,如此一来就可以毫不费劲的装N个Reids了

5、容器删掉后,镜像不会被删除

6、percona是mysql的衍生版-组织优化版本

原文地址:https://www.cnblogs.com/syjp/p/10529176.html