一、docker镜像和容器docker镜像是一个可执行的静态独立软件包,包括打包后的程序代码和软件运行环境等文件。如:代码、运行时库、环境变量和配置文件都包含在其中。容器是镜像的运行状态(镜像中的软件和程序正在运行),占用服务器的CPU、内存、磁盘等资源。如果你学过java,可以用下面的类比来更形象地理解两者的关系:图像可以类比为java类的二进制字节码文件。可以将容器比作从字节码实例化的java对象。一个字节码文件(类)可以创建多个新对象,一个镜像可以快速实例化多个容器服务。什么是镜像源?DockerHub官方镜像,以及国内阿里云等都有对外开放的docker镜像仓库。使用Dockerfile自行构建映像。Dockerfile是对代码文件、环境变量、系统依赖软件等的构建描述,固化了镜像构建过程,保证环境安装工作不会重复。概念上类似于maven的pom.xml。企业私有镜像和私有镜像仓库Dockerregistrydocker容器的本质是宿主机上的一个进程。你怎么理解这句话?容器的运行时本质上是一个进程,但不同于直接在宿主机中执行的进程。容器进程有自己独立的命名空间。所以一个容器有它自己的根文件系统、它自己的网络配置、它自己的进程空间,甚至它自己的用户ID空间。容器中的进程运行在一个隔离的环境中,使用起来就好像运行在一个独立于宿主机的系统下一样。也正是因为这种隔离特性,很多人在刚开始学习Docker的时候,经常会把容器和虚拟机混为一谈。2.Docker的核心组件上一篇我们安装的DockerCE主要由以下几个部分组成:Docker客户端(DockerClient)、Docker守护进程(Dockerdaemon)、containerd和runc,分别负责创建和执行集装箱的协调与合作。运营和生命周期管理。DockerClient:通过命令行向docker引擎(服务器)发送指令。RESTAPI:dockerengine(server)通过RESTfulAPI对外提供操作命令入口。daemon:docker守护进程,包括RESTAP、认证、基本配置管理等功能。containerd:核心功能用于管理容器的生命周期,如:启动、暂停、删除等。镜像管理功能也在containerd中。runc:runc是为Libcontainer(Libcontainer取代了早期Docker架构中的LXC)封装的轻量级命令行交互工具。LXC提供了操作命名空间(Namespace)和控制组(CGroup)等基本工具的能力。Namespace实现资源隔离,例如:独立的文件系统、网络空间、用户空间等。Cgroups实现资源限制,例如每个容器使用多少内存。欢迎关注我的公告号:字母哥杂谈,回复003赠送本文所在专栏《docker修炼之道》的PDF版,以及30多篇docker优质文章。Antetokounmpo博客:zimug.com
