云计算-5-docker commit定制镜像
镜像是容器的基础,在每次执行docker run的时候都会指定那个镜像作为容器的基础,之前我们的例子中的镜像都是来自镜像仓库(Docker Hub,以后可能会来源于自己的私有仓Harbor),这些镜像有时候可能不满足我们的需求,那么就需要我们定制镜像以达到我们的需要,接下来几章接我们介绍一下如何定制镜像。
我们以我们之前讲过如何快速的部署nginx为例子,来讲解镜像如何构建
docker run --name mynginx -p 8080:80 -d nginx
执行上面命令后,nginx镜像会启动容器,名字为mynginx,并且映射到了宿主机8080端口上,启动成功以后我们就可以使用浏览器访问nginx服务器。
如果是本地运行Docker,可以直接使用http://localhost:8080,如果是虚拟机或者云服务器,那么将localhost换成对应的IP地址即可。访问结果如下:
但是如果我们因为工作需要,想将这个页面换成我们需要的页面,例如换成SpribootBoot葵花宝典欢迎你使用Docker的文字,那么我们需要使用docker exec命令进入容器,修改页面内容
#进入容器 docker exec -it mynginx bash #修改页面 echo '<h1>welcome My Docker!</h1>' > /usr/share/nginx/html/index.html #推出容器 exit
我们通过交互式方式进入mynginx容器,执行bash命令,获得一个可以操作的shell。
然后我们将<h1>welcome My Docker!</h1>
覆盖/usr/share/nginx/html/index.html
原来内容,然后我们刷新浏览器,内容发生改变
查看修改后区别docker diff
我们修改过容器内容以后,实际上就是修改了容器的存储层,我们可以使用命令docker diff mynginx查看具体的改动。
[root@hecs-17222 ~]# docker diff mynginx C /usr C /usr/share C /usr/share/nginx C /usr/share/nginx/html C /usr/share/nginx/html/index.html C /etc C /etc/nginx C /etc/nginx/conf.d C /etc/nginx/conf.d/default.conf C /root A /root/.bash_history C /run A /run/nginx.pid C /var C /var/cache C /var/cache/nginx A /var/cache/nginx/scgi_temp A /var/cache/nginx/uwsgi_temp A /var/cache/nginx/client_temp A /var/cache/nginx/fastcgi_temp A /var/cache/nginx/proxy_temp
保存修改后容器内容,形成镜像
当我们希望将我们修改后的容器保存下来形成容器的时候,可以使用的、docker commit
命令将在镜像原有的基础上,加上修修改容器的存储层,构成新的镜像。
docker commit [选项] <容器ID\容器名> [<仓库名>[:<标签>]]
我们使用命令将mynginx容器保存为镜像
docker commit \ --author "Springboot葵花宝典 <1359282905@qq.cm>" \ --message "修改nginx默认网页" \ mynginx \ mynginx:v2
- –author:用于表示容器修改的作者
- –message:距离修改的内容信息
查看修改后 镜像:
docker image ls mynginx
我们可以使用docker history
查看镜像内修改的记录
docker history mynginx:v2
运行新的容器:
docker run --name mynginx2 -d -p 8081:80 mynginx:v2
docker commit谨慎使用
我们在使用docker commit
的时候虽然可以比较直观的理解镜像存储的概念,但是一般在实际环境中我们不使用这个docker commit命令而是使用dockerfile有以下几点原因
如果简单修改,命令简单没有什么,如果要安装软件、编译构建
会有大量的无关内容被添加进来,将会导致镜像极为臃肿。
docker commit是黑箱操作,生成的镜像被称为黑箱镜像,就是说除了制造镜像的人其他人不知道执行过什么命令,怎么生成的镜像,而且如果时间久远的话,制作人也会忘记操作过程,其维护成本过高。
如果您觉得本文不错,欢迎关注,点赞,收藏支持,您的关注是我坚持的动力!
springboot葵花宝典
主要分享JAVA技术,主要包含SpringBoot、SpingCloud、Docker、中间件等技术,以及Github开源项目