docker命令中commit和build
下文笔者讲述docker命令中commit和build命令的优点和缺点说明,如下所示
commit与build优缺点说明
commit: 优点: 简单、所见所得 缺点 元数据信息无法注入 镜像层级的重用性弱 编译步骤不可重用 DockerFile: 优点 元数据信息可注入 镜像层级的重用性强 编译步骤不可重用 缺点: 编译速度没有宿主机快 下载程序的依赖包比在宿主机中直接下载更加耗时 会产生none镜像,占用磁盘空间
commit + build镜像制作方法
docker pull centos:centos7 #从官网下载一个基础镜像 [root@localhost dockerrun]# mkdir test #创建一个目录并进入 [root@localhost test]# vim Dockerfile #创建一个Dockerfile文件 Dockerfile文件内容如下: FROM centos:centos7 RUN touch /root/startup.sh CMD tail -f /root/startup.sh [root@localhost test]# docker build -t axplinux/centos:7.9 . #将Dockerfile文件转化成镜像axplinux/centos:7.9 [root@localhost test]# docker run --name nginx -p 8000:80 -d axplinux/centos:7.9 #将axplinux/centos:7.9当第二个基础镜像,用nginx容器运行该镜像。 [root@localhost test]# docker extc -it nginx /bin/bash #进入容器内部 //容器内下载一些所需命令 exit #退出容器 [root@localhost test]# docker commit nginx axplinux/nginx:v0.1 #将nginx容器封装成最终镜像axplinux/nginx:v0.1 [root@localhost test]# cc #容器已无用,可以删除,cc是删除容器的脚本,脚本内容在我前几期文章中有写 [root@localhost test]# docker images #查看v0.1版的nginx镜像已制作完成。将此镜像作为另一个基础镜像继续升级。 [root@localhost ~]# mkdir test2 #创建另一个文件 [root@localhost ~]# cd test2 #进入 [root@localhost test2]# 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 test2]# docker build -t axplinux/nginx:v2.0 . #再将Dockerfile文件转化成镜像axplinux/nginx:v2.0 [root@localhost test2]# docker image inspect axplinux/nginx:v2.0 #可以查看标签信息和作者信息 [root@localhost test2]# docker run --name nginx -p 666:80 -d axplinux/nginx:v2.0 #启动镜像 浏览器访问ip:666能看到网页文件 [root@localhost test2]# docker logs nginx #可查看nginx的访问日志 3. 镜像动态化 [root@localhost test2]# 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=999999999 -d axplinux/nginx:v3.0 #动态启动镜像 浏览器访问ip:8000,输出默认结果999999999
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。