四、 docker镜像
4.1 镜像
镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、库、环境变量和配置文件 所有的应用,直接打包docker镜像就可以直接跑起来
你可以创建自己的镜像,也可以只使用其他人创建并在Docker Hub中发布的镜像。要构建自己的镜像,需要创建一个Dockerfile,使用简单的语法定义创建和运行镜像所需的步骤。Dockerfile中的每一条指令都会在图像中创建一个层。当你更改Dockerfile并重新构建镜像时,只有那些已经更改的层才会重新构建。与其他虚拟化技术相比,这是镜像如此轻量级、小巧和快速的原因之一。
4.2 分层
所有docker镜像都起始于一个检查镜像层,当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层
4.3 commit镜像
如果想要保存当前容器的状态,就可以通过commit来提交,获得一个镜像
docker commit #提交容器成为一个新的副本 docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG(版本)]
4.4 镜像发布
发布到DockerHub或其他仓库。步骤略。
4.5 镜像私有库
-
下载镜像Docker Registry:docker pull registry
-
运行私有库Registry,相当于本地有个私有Docker hub
docker run -d -p 5000:5000 -v /sunxiao/myregistry/:/tmp/registry --privileged=true registry
-
案例演示创建一个新镜像,ubuntu安装ifconfig命令
#用ubuntu镜像启动一个ubuntu容器 docker run -it ubuntu #容器启动后依次执行 apt-get update apt-get install net-tools #commit镜像 docker commit -m="ifconfig add" -a="sunxiao" 容器id sxubuntu:1.2
-
curl验证私服库上有什么镜像
curl -XGET http://127.0.0.1:5000/v2/_catalog
将新镜像sxubuntu:1.2修改符合私服规范的Tag,指定该镜像属于私有仓库。
#语法:docker tag <原始镜像ID或名称>:<版本号> <私有仓库地址>/<镜像名称>:<版本号> docker tag sxubuntu:1.2 192.168.122.1:5000/sxubuntu:1.2
-
修改配置文件使之支持http
#打开配置文件 vim /etc/docker/daemon.json #添加配置 "insecure-registries":["192.168.122.1:5000"] #如果不生效,重启docker systemctl restart docker #重启Registry
-
push推送到私服库
docker push 192.168.122.1:5000/sxubuntu:1.2
-
curl验证私服库上有什么镜像2
五、 容器数据卷
Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。
为了能保存数据在docker中我们使用卷。
特点:
-
数据卷可在容器之间共享或重用数据
-
卷中的更改可以直接实时生效
-
数据卷中的更改不会包含在镜像的更新中
-
数据卷的生命周期一直持续到没有容器使用它为止:停止容器后再启动依旧有效
#方式一:直接使用命令挂载 -v docker run -it --privileged=true -v 主机目录:容器内目录 镜像名 #容器内只读 docker run -it --privileged=true -v 主机目录:容器内目录:ro 镜像名 docker run -it -v /home/test_docker:/home centos /bin/bash
-
拓展:匿名挂载和具名挂载
#-v 容器内路径 #匿名挂载 #-v 卷名:容器内路径 #具名挂载 #-v /宿主机路径::容器内路径 #指定路径挂载 #例 匿名挂载 docker run -d -P --name nginx01 -v /etc/nginx nginx #查看所有volume的情况 docker volume ls #具名挂载:通过 -v 卷名:容器内路径 docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx #查看这个卷 docker volume inspect jumming-nginx #所有的docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxxx/_data #我们通过具名挂载可以方便的找到我们的一个卷,大部分情况使用具名挂载
5.1数据卷应用
-
数据卷继承和共享
-
容器1完成与宿主机的映射,以ubuntu作为容器为例
docker run -it --privileged=true -v /mydocker/u:/tmp/u --name u1 ubuntu
-
容器2继承容器1规则,例
docker run -it --privileged=true --volumes-from u1 --name u2 ubuntu
-
通过1、2实现了容器1、2数据共享
-