一、docker 镜像与容器
docker 镜像是一个可执行的动态独立软件包,蕴含打包程序代码和软件运行环境等文件。如:代码、运行时库、环境变量和配置文件等都蕴含在其中。容器是镜像的运行时状态(镜像中的软件、程序运行),占用服务器 CPU、内存、磁盘等资源。
如果学过 java,用上面的这个类比可能更形象的了解二者之间的关系:
- 镜像能够类比 java 类的二进制字节码文件。
- 容器能够类比由字节码实例化进去的 java 对象。
- 一个字节码文件(类)能够 new 进去多个对象,一个镜像能够疾速实例化多个容器服务。
镜像起源有哪些?
- Docker Hub 官网镜像,以及国内阿里云等都有对外开放的 docker 镜像仓库。
- 应用 Dockerfile 本人构建镜像。Dockerfile 是代码文件、环境变量、零碎依赖软件等的构建形容,将镜像的构建过程固化下来,保障了不反复做环境装置工作。概念上相似于 maven 的 pom.xml。
- 企业公有镜像以及公有镜像仓库 Docker registry
docker 容器的实质是宿主机上的一个过程,这句话怎么了解?
容器的的运行时本质是过程,但它与间接在宿主机外面执行的过程有所不同,容器过程存在属于本人的独立的命名空间。因而容器领有本人的 root 文件系统、本人的网络配置、本人的过程空间,甚至本人的用户 ID 空间。
容器内的过程是运行在一个隔离的环境里,应用起来就如同是在一个独立于宿主的零碎下操作一样。也因为这种隔离的个性,很多人初学 Docker 时经常会混同容器和虚拟机。
二、Docker 外围组成部分
咱们在前文中装置的 Docker CE 次要由如下几局部形成:Docker 客户端(Docker Client)、Docker 守护过程(Docker daemon)、containerd 以及 runc,它们协调单干独特负责容器的创立和运行以及生命周期的治理。
- Docker Client:命令行形式向 docker 引擎(服务端)发送指令。
- REST API:docker 引擎 (服务端) 通过 RESTful API 的形式,对外提供操作命令入口。
- daemon:docker 守护过程,蕴含 REST AP、身份验证、根底配置管理等个性。
- containerd:外围性能用于容器生命周期的治理,如:启动、暂停、删除等。镜像治理性能也在 containerd 中。
-
runc:runc 是一个轻量级的、针对 Libcontainer 进行了包装的命令行交互工具(Libcontainer 取代了晚期 Docker 架构中的 LXC)。LXC 提供了对诸如命名空间(Namespace)和控制组(CGroup)等根底工具的操作能力。
- namespace 实现资源隔离,如:独立的文件系统、网络空间、用户空间等。
- cgroups 实现资源的限度,如每个容器应用多少内存。
欢送关注我的布告号:字母哥杂谈,回复 003 赠送本文所在专栏《docker 修炼之道》的 PDF 版本,30 余篇精品 docker 文章。字母哥博客:zimug.com