【云原生 | 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

目录
相关文章
|
28天前
|
Kubernetes Cloud Native 云计算
云原生入门:从Docker到Kubernetes的旅程
【10月更文挑战第2天】本文将带你走进云原生的世界,从基础的Docker容器技术开始,逐步深入到Kubernetes集群管理。我们将通过实际代码示例,探索如何利用这些工具构建、部署和管理现代云应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的知识和技能,让你在云原生领域迈出坚实的一步。
74 5
|
8天前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
18 3
|
14天前
|
Kubernetes Cloud Native 开发者
探秘云原生计算:Kubernetes与Docker的协同进化
在这个快节奏的数字时代,云原生技术以其灵活性和可扩展性成为了开发者们的新宠。本文将带你深入了解Kubernetes和Docker如何共同塑造现代云计算的架构,以及它们如何帮助企业构建更加敏捷和高效的IT基础设施。
|
22天前
|
安全 Cloud Native Shell
云上攻防:云原生篇&Docker容器逃逸
本文介绍了Docker的基本概念及其对渗透测试的影响,重点讲解了容器逃逸的方法。Docker是一种轻量级的容器技术,与虚拟机相比,具有更高的便携性和资源利用率。然而,这也带来了安全风险,特别是容器逃逸问题。文章详细描述了三种常见的容器逃逸方法:不安全的配置、相关程序漏洞和内核漏洞,并提供了具体的检测和利用方法。此外,还介绍了几种特定的漏洞(如CVE-2019-5736和CVE-2020-15257)及其复现步骤,帮助读者更好地理解和应对这些安全威胁。
云上攻防:云原生篇&Docker容器逃逸
|
26天前
|
Kubernetes Cloud Native Docker
云原生入门:Kubernetes和Docker的协同之旅
【10月更文挑战第4天】在这篇文章中,我们将通过一次虚拟的旅行来探索云原生技术的核心——Kubernetes和Docker。就像乘坐一艘由Docker驱动的小船启航,随着波浪(代码示例)起伏,最终抵达由Kubernetes指挥的宏伟舰队。这不仅是一段技术上的旅程,也是理解现代云架构如何支撑数字世界的冒险。让我们扬帆起航,一探究竟!
|
1月前
|
Kubernetes Cloud Native 持续交付
云原生之旅:Docker容器化与Kubernetes集群管理
【9月更文挑战第33天】在数字化转型的浪潮中,云原生技术如同一艘航船,带领企业乘风破浪。本篇文章将作为你的航海指南,从Docker容器化的基础讲起,直至Kubernetes集群的高级管理,我们将一起探索云原生的奥秘。你将学习到如何封装应用、实现环境隔离,以及如何在Kubernetes集群中部署、监控和扩展你的服务。让我们启航,驶向灵活、可伸缩的云原生未来。
|
1月前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
2月前
|
运维 Cloud Native Docker
云原生技术入门:Docker容器化实战
【9月更文挑战第20天】本文将引导你走进云原生技术的世界,通过Docker容器化技术的实战演练,深入理解其背后的原理和应用。我们将一起探索如何在云平台上利用Docker简化部署、扩展和管理应用程序的过程,并揭示这一技术如何改变现代软件的开发和运维模式。
|
2月前
|
Cloud Native 持续交付 Docker
云原生技术入门与实践:Docker容器化部署示例
【9月更文挑战第25天】在数字化转型的浪潮下,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,为初学者揭示云原生技术的核心概念及其应用价值。我们将以Docker容器为例,逐步引导读者了解如何将应用程序容器化,并在云端高效运行。这不仅是对技术趋势的跟随,更是对资源利用和开发效率提升的探索。
59 4
|
2月前
|
Kubernetes Cloud Native 开发者
云原生入门:从Docker到Kubernetes的旅程
【9月更文挑战第16天】 本文将带你进入云原生的世界,从理解Docker容器的基础开始,逐步深入到Kubernetes集群管理。我们将通过简单的代码示例和实际操作,探索这两个关键技术如何协同工作,以实现更高效、灵活的应用程序部署和管理。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供清晰的指导和实用的知识。
60 11