Docker镜像的分层、打包、双向绑定、同步、导入导出、Dockerfile的构建、部署与发布
这里推荐B站狂神的教学视频,视频的地址附录在文章末尾,个人觉得还是讲得不错的。以下的一些学习记录参看了该视频,希望对大家有帮助。
一、镜像分层的理解
例如下载一层一层的:
1.0、联合文件
以前下载过的可不再下载,共用就行,极大节省了空间。
1.1、加载镜像
如何进行加载镜像?
加载引导类似我们ubuntu里面的boot,无论什么镜像,bootfs都是共用的
例如启动后,root文件下进行一个容器作为小的虚拟机。
1.2、分层拉取镜像
可以发现,已有的层就不在重复拉取,因此显示存在(already exists)
我们可以通过前面说的inspect查询镜像信息,然后来查看层layers
创建新的层会在层的基础上继续添加就可以。
1.3、案例分析:tomcat
二、提交自己的镜像
如何提交自己的镜像?
2.1、提交自己的镜像
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
2.2、实战测试
运行tomcat 镜像 :又看到熟悉的猫,docker安装运行完成:
docker run -it --rm -p 8989:8080 tomcat
具体看下面的命令解释
root@ovo:/home/zkpark# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b9fa71eb085d tomcat "catalina.sh run" 58 seconds ago Up 57 seconds 8080/tcp, 0.0.0.0:8989->8989/tcp vigilant_beaver
87e59469fb99 rancher/server "/usr/bin/entry /usr…" 21 hours ago Up 14 hours 3306/tcp, 0.0.0.0:9090->8080/tcp rancher-zk
964fd0b86e14 e02481bb39c8 "entrypoint.sh" 23 hours ago Restarting (1) About a minute ago blissful_mclean
#运行tomcat容器
root@ovo:/home/zkpark# docker exec -it b9fa71eb085d /bin/bash
root@b9fa71eb085d:/usr/local/tomcat# cd webapps
#目前没有任何东西,所以要从webapps.dist拷贝
root@b9fa71eb085d:/usr/local/tomcat/webapps# ls
root@b9fa71eb085d:/usr/local/tomcat/webapps# cd ..
#拷贝
root@b9fa71eb085d:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@b9fa71eb085d:/usr/local/tomcat# ls
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf lib logs native-jni-lib temp webapps webapps.dist work
#进入webapps查看是否拷贝成功
root@b9fa71eb085d:/usr/local/tomcat# cd webapps
root@b9fa71eb085d:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager
root@b9fa71eb085d:/usr/local/tomcat/webapps# cd
root@b9fa71eb085d:~# exit
exit
#查看当前tomcat进程
root@ovo:/home/zkpark# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b9fa71eb085d tomcat "catalina.sh run" 6 minutes ago Up 6 minutes 8080/tcp, 0.0.0.0:8989->8989/tcp vigilant_beaver
87e59469fb99 rancher/server "/usr/bin/entry /usr…" 21 hours ago Up 14 hours 3306/tcp, 0.0.0.0:9090->8080/tcp rancher-zk
964fd0b86e14 e02481bb39c8 "entrypoint.sh" 23 hours ago Restarting (1) 43 seconds ago
提交新的tomcat:
docker commit -a"zk" -m="add webapps app" 606e2ead236d tomcat_2021:zk1.0
可以发现刚刚新建提交的tomcat_2021镜像
三、容器数据卷
3.0、问题描述与需求分析
3.1、双向绑定指定目录流程
挂载到主机与docker容器内的相同目录,事实上就是一种双向绑定的操作。
3.2、双向绑定实战测试
3.2.1、挂载流程
首先主机cd到 home该目录下:
root@ovo:/home/zkpark# cd /home
root@ovo:/home# ls
lost+found ovo.py zkpark zkpy
然后开始进行绑定操作:这个命令执行后直接进入了centos镜像的容器下:
docker run -it -v /home/ceshi:/home centos
ls查看当前目录文件
root@ovo:/home# docker run -it -v /home/ceshi:/home centos /bin/bash
[root@508e05fae9c2 /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
进入该容器的home目录,让它与ubuntu主机下的home保持一样。可以发现。当前目录下没有任何文件:
[root@508e05fae9c2 /]# cd /home
[root@508e05fae9c2 home]# ls
[root@508e05fae9c2 home]#
下面我们来docker inspect 508e05fae9c2查看一下该容器的挂载信息,挂载的内容在mounts下,记得另起一个终端,在root下查看:
root@ovo:/home/zkpark# docker inspect 508e05fae9c2
找到mounts,如下图所示,说明挂载成功!
3.2.1、绑定:从centos生成的文件同步到主机ubuntu的文件
下面在容器的home下创建一个文件,并查看:
[root@508e05fae9c2 home]# touch sinxzy.py
[root@508e05fae9c2 home]# ls
sinxzy.py
接下来去我们的主机的home的ceshi目录下查看是不是有该文件的生成:
root@ovo:/home# ls
ceshi lost+found ovo.py zkpark zkpy
root@ovo:/home