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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

🍁博主简介
        🏅云计算领域优质创作者
        🏅2022年CSDN新星计划python赛道第一名

        🏅2022年CSDN原力计划优质作者
        🏅阿里云ACE认证高级工程师
        🏅阿里云开发者社区专家博主

💊交流社区CSDN云计算交流社区欢迎您的加入

目录

 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文件
Dockerfile文件内容如下
FROM centos:centos7
RUN touch /root/startup.sh
CMD tail -f /root/startup.sh
[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		#进入容器内部

在容器内下载一些必须命令并且安装一个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文件
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
[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	#启动镜像

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

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

3. 镜像动态化

[root@localhost dockerrun2]# cd ..
[root@localhost ~]# mkdir dockerenv
[root@localhost ~]# cd dockerenv/
[root@localhost dockerenv]# vim Dockerfile	#创建Dockerfile文件
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
[root@localhost dockerenv]# vim startup.sh	#创建启动脚本

创建启动脚本脚本内容为

#!/bin/bash
echo $INDEX_DATA > /usr/local/nginx/html/index.html
/usr/local/nginx/sbin/nginx && tail -f /usr/local/nginx/logs/access.log
[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	#先正常启动镜像

浏览器访问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	#动态启动镜像

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

👑👑👑结束语👑👑👑

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

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

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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Docker