【云原生 | 15】Docker commit与Docker build比较

简介: 最直观的理由就是,commit会把当前容器运行的日志等文件也打包到镜像中造成镜像体积偏大。从软件版本管理角度讲,Dockerfile本身是脚本文件,是可以版本化的。理论上使用Dockerfile,在任何时候任何机器上都可以重演镜像制作过程制作出一模一样的镜像,这是非常有利于工程化的。强烈建议使用Dockerfile来制作镜像...

 🍁作者简介:🏅云计算领域优质创作者🏅新星计划第三季python赛道TOP1🏅 阿里云ACE认证高级工程师🏅

✒️个人主页:小鹏linux

💊个人社区:小鹏linux(个人社区)欢迎您的加入!

目录

1.commit与build优缺点比较

2.commit + build镜像制作方法

3. 镜像动态化

👑👑👑结束语👑👑👑


1.commit与build优缺点比较

commit:

        优点:

                简单、所见所得

        缺点

                元数据信息无法注入

                镜像层级的重用性弱

                编译步骤不可重用

DockerFile:

        优点

                元数据信息可注入

                镜像层级的重用性强

                编译步骤不可重用

        缺点:

                编译速度没有宿主机快

                下载程序的依赖包比在宿主机中直接下载更加耗时

                会产生none镜像,占用磁盘空间

2.commit + build镜像制作方法

容器 > 镜像(简单好用但是功能性不全,不能封装启动命令。只能当中应急方案)(Docker commit + Docker build = 镜像)

docker pull centos:centos7          #从官网下载一个基础镜像
[root@localhost dockerrun]# mkdir dockerrun1    #创建一个目录并进入
[root@localhost dockerrun1]# vim Dockerfile     #创建一个Dockerfile文件

image.gif

Dockerfile文件内容如下:
FROM centos:centos7
RUN touch /root/startup.sh
CMD tail -f /root/startup.sh

image.gif

[root@localhost dockerrun1]# docker build -t axplinux/centos:7.9 .    #将Dockerfile文件转化成镜像axplinux/centos:7.9 
[root@localhost dockerrun1]# docker run --name nginx -p 8000:80 -d axplinux/centos:7.9  #将axplinux/centos:7.9当第二个基础镜像,用nginx容器运行该镜像。
[root@localhost dockerrun1]# docker extc -it nginx /bin/bash    #进入容器内部

image.gif

在容器内下载一些必须命令,并且安装一个nginx软件且修改网页文件内容并启动。

浏览器访问192.168.232.165:8000能看到网页文件内容证明成功安装并运行nginx

exit    #退出容器
[root@localhost dockerrun1]# docker commit nginx axplinux/nginx:v0.1  #将nginx容器封装成最终镜像axplinux/nginx:v0.1
[root@localhost dockerrun1]# cc     #容器已无用,可以删除,cc是删除容器的脚本,脚本内容在我前几期文章中有写
[root@localhost dockerrun1]# docker images  #查看v0.1版的nginx镜像已制作完成。将此镜像作为另一个基础镜像继续升级。
[root@localhost ~]# mkdir dockerrun2  #创建另一个文件
[root@localhost ~]# cd dockerrun2 #进入
[root@localhost dockerrun2]# vim Dockerfile     #再创建一个Dockerfile文件

image.gif

Dockerfile文件内容如下:
FROM axplinux/nginx:v0.1
MAINTAINER anxiaopeng_linux
LABEL nginx_version="1.21.3"
RUN rm -rf /root/startup.sh
EXPOSE  80 443
WORKDIR /usr/local/nginx
CMD /usr/local/nginx/sbin/nginx && tail -f /usr/local/nginx/logs/access.log

image.gif

[root@localhost dockerrun2]# docker build -t axplinux/nginx:v2.0 .  #再将Dockerfile文件转化成镜像axplinux/nginx:v2.0
[root@localhost dockerrun2]# docker image inspect axplinux/nginx:v2.0 #可以查看标签信息和作者信息
[root@localhost dockerrun2]# docker run --name nginx -p 666:80 -d axplinux/nginx:v2.0 #启动镜像

image.gif

浏览器访问ip:666能看到网页文件

[root@localhost dockerrun2]# docker logs nginx  #可以查看nginx的访问日志。结束!

image.gif

3. 镜像动态化

[root@localhost dockerrun2]# cd ..
[root@localhost ~]# mkdir dockerenv
[root@localhost ~]# cd dockerenv/
[root@localhost dockerenv]# vim Dockerfile  #创建Dockerfile文件

image.gif

Dockerfile文件内容如下:
FROM axplinux/nginx:v2.0
ENV INDEX_DATA default
ADD ./startup.sh /root
RUN chmod +x /root/startup.sh
ENTRYPOINT /bin/bash /root/startup.sh

image.gif

[root@localhost dockerenv]# vim startup.sh  #创建启动脚本

image.gif

创建启动脚本,脚本内容为:

#!/bin/bash
echo $INDEX_DATA > /usr/local/nginx/html/index.html
/usr/local/nginx/sbin/nginx && tail -f /usr/local/nginx/logs/access.log

image.gif

[root@localhost dockerenv]# docker build -t axplinux/nginx:v3.0 .
[root@localhost dockerenv]# docker run --name nginx -p 8000:80 -d axplinux/nginx:v3.0 #先正常启动镜像

image.gif

浏览器访问Ip:8000,输出默认结果default

[root@localhost dockerenv]# cc
[root@localhost dockerenv]# docker run --name nginx -p 8000:80 --env INDEX_DATA=2222222 -d axplinux/nginx:v3.0  #动态启动镜像

image.gif

浏览器访问ip:8000,输出默认结果2222222

👑👑👑结束语👑👑👑

为大家推荐一款刷题神奇 点击链接访问牛客网

各大互联网大厂面试真题。基础题库到进阶题库等各类面试题应有尽有!

牛客网面经合集,满足大厂面试技术深度,快速构建Java核心知识体系大厂面试官亲授,备战面试与技能提升,主要考点+主流场景+内功提升+真题解析

image.gif

目录
相关文章
|
2月前
|
Cloud Native 测试技术 数据安全/隐私保护
云原生之使用Docker部署Teedy轻量级文档管理系统
【5月更文挑战第8天】云原生之使用Docker部署Teedy轻量级文档管理系统
82 1
|
2月前
|
Kubernetes Cloud Native 开发者
构建高效的云原生应用:Docker与Kubernetes的完美搭档
【5月更文挑战第29天】 在现代软件开发领域,"云原生"这一术语已经成为高效、可扩展和弹性的代名词。本文将深入探讨如何通过Docker容器化技术和Kubernetes集群管理工具实现云原生应用的构建和管理。我们将剖析Docker的核心原理,揭示其轻量级和易于部署的特点,并进一步探索Kubernetes如何为这些容器提供编排,保证应用的高可用性与自动扩缩容。文章不仅讨论了二者的技术细节,还提供了实践案例,帮助开发者理解并运用这些技术构建和维护自己的云原生应用。
|
15天前
|
Cloud Native 安全 Docker
云上攻防-云原生篇&Docker安全&系统内核&版本&CDK自动利用&容器逃逸
云上攻防-云原生篇&Docker安全&系统内核&版本&CDK自动利用&容器逃逸
|
2月前
|
Cloud Native 测试技术 数据库
【云原生之Docker实战】使用Docker部署flatnotes笔记工具
【5月更文挑战第17天】使用Docker部署flatnotes笔记工具
98 8
|
2月前
|
Cloud Native 搜索推荐 测试技术
云原生之使用Docker部署homarr个人导航页
【5月更文挑战第18天】云原生之使用Docker部署homarr个人导航页
84 1
|
2月前
|
监控 安全 Cloud Native
【云原生之Docker实战】使用Docker部署Ward服务器监控工具
【5月更文挑战第11天】使用Docker部署Ward服务器监控工具
83 4
|
2月前
|
Cloud Native 安全 Linux
【云原生之Docker实战】使用Docker部署mBlog微博系统
【5月更文挑战第10天】使用Docker部署mBlog微博系统
37 2
|
2月前
|
监控 Cloud Native 测试技术
云原生之使用Docker部署ServerBee服务器监控工具
【5月更文挑战第6天】云原生之使用Docker部署ServerBee服务器监控工具
36 2
|
2月前
|
监控 Cloud Native 持续交付
云原生之使用Docker部署Magma导航页
【5月更文挑战第19天】云原生之使用Docker部署Magma导航页
48 0
|
2月前
|
Cloud Native 测试技术 Linux
云原生之使用Docker部署homer静态主页
【5月更文挑战第7天】云原生之使用Docker部署homer静态主页
36 0