关于Docker里面的几个主要概念

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:

 

这里用个不太恰当的比方来说明。

大家肯定安装过ghost系统,镜像就像是ghost文件,容器就像是ghost系统。你可以拿别人的ghost文件安装系统(使用镜像运行容器),也可以把自己现有的系统制作成ghost文件(从容器构建镜像)。Dockerfile则像是一个生成ghost文件的脚本(镜像构建脚本),这个脚本会指定去哪里下载哪个版本的window系统,再去哪里下载哪些软件并安装,再修改哪些配置文件,等等。本文主要讲的是,如何从容器构建镜像(把现有系统制作成ghost文件),和如何使用Dockerfile构建镜像(使用脚本生成ghost文件)。

两种方式构建镜像的主要步骤:

1.从容器构建镜像(以下简称容器镜像)

  • 创建一个容器,比如使用 tomcat:latest 镜像创建一个tomcat-test容器
  • 修改tomcat-test容器的文件系统,比如修改tomcat的server.xml文件中的默认端口
  • 使用commit命令提交镜像

2.使用Dockerfile构建镜像(以下简称Dockerfile镜像)

  • 编写Dockerfile文件
  • 使用build命令构建镜像

两种构建方式的区别:

1.容器镜像的构建者可以任意修改容器的文件系统后进行发布,这种修改对于镜像使用者来说是不透明的,镜像构建者一般也不会将对容器文件系统的每一步修改,记录进文档中,供镜像使用者参考。

2.容器镜像不能(更准确地说是不建议)通过修改,生成新的容器镜像。

从镜像运行容器,实际上是在镜像顶部上加了一层可写层,所有对容器文件系统的修改,都在这一层中进行,不影响已经存在的层。比如在容器中删除一个1G的文件,从用户的角度看,容器中该文件已经没有了,但从文件系统的角度看,文件其实还在,只不过在顶层中标记该文件已被删除,当然这个标记为已删除的文件还会占用镜像空间。从容器构建镜像,实际上是把容器的顶层固化到镜像中。

也就是说, 对容器镜像进行修改后,生成新的容器镜像,会多一层,而且镜像的体积只会增大,不会减小。长此以往,镜像将变得越来越臃肿。Docker提供的 export 和 import 命令可以一定程度上处理该问题,但也并不是没有缺点。

3.容器镜像依赖的父镜像变化时,容器镜像必须进行重新构建。如果没有编写自动化构建脚本,而是手工构建的,那么又要重新修改容器的文件系统,再进行构建,这些重复劳动其实是没有价值的。

4.Dockerfile镜像是完全透明的,所有用于构建镜像的指令都可以通过Dockerfile看到。甚至你还可以递归找到本镜像的任何父镜像的构建指令。也就是说,你可以完全了解一个镜像是如何从零开始,通过一条条指令构建出来的。

5.Dockerfile镜像需要修改时,可以通过修改Dockerfile中的指令,再重新构建生成,没有任何问题。

6.Dockerfile可以在GitHub等源码管理网站上进行托管,DockerHub自动关联源码进行构建。当你的Dockerfile变动,或者依赖的父镜像变动,都会触发镜像的自动构建,非常方便。

** 不管是官方还是我个人,都推荐使用第二种方式构建镜像。**

关于Dockerfile里面指令的详细说明,这里就不一一列出了,大家可以参考官方文档,或关注我之后的文章,当然网上也是一搜一大堆。 


本文作者:dfengwei

来源:51CTO

相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2月前
|
存储 持续交付 Docker
Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
41 0
|
6月前
|
存储 Kubernetes 持续交付
Docker 核心概念深度解析:探索容器、镜像和仓库在Docker生态系统中的重要作用和 应用
Docker 核心概念深度解析:探索容器、镜像和仓库在Docker生态系统中的重要作用和 应用
130 0
|
1月前
|
存储 Kubernetes 虚拟化
Docker相关的概念
Docker相关的概念
13 0
|
1月前
|
存储 测试技术 开发者
Docker的基本概念和优势,以及实际应用场景
Docker的基本概念和优势,以及实际应用场景
|
2月前
|
测试技术 持续交付 数据库
介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
56 0
|
3月前
|
弹性计算 运维 Java
【Docker容器精解篇 】深入探索Docker技术的概念与容器思想
【Docker容器精解篇 】深入探索Docker技术的概念与容器思想
110 0
|
3月前
|
存储 持续交付 Docker
介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用
介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用
25 0
|
3月前
|
存储 持续交付 Docker
介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
|
4月前
|
网络协议 Java Shell
docker常用命令的概念
docker常用命令的概念
|
4月前
|
安全 应用服务中间件 nginx
Docker基础概念解析:镜像、容器、仓库
当谈到容器化技术时,Docker往往是第一个被提及的工具。Docker的基础概念涵盖了镜像、容器和仓库,它们是理解和使用Docker的关键要素。在这篇文章中,将深入探讨这些概念,并提供更丰富的示例代码,帮助大家更好地理解和应用这些概念。