JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

云计算-5-docker commit定制镜像 docker制作镜像命令

wys521 2024-10-23 15:19:29 精选教程 31 ℃ 0 评论

云计算-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、中间件等技术


原创不易,转载请注明出处,感谢支持!如果本文对您有用,欢迎转发分享!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表