Docker镜像管理
Docker镜像管理
1. 简介
Docker 镜像是构建 Docker 容器的基础,它是容器的模板或者蓝图,包含了运行容器所需要的所有信息和文件。通过 Docker 镜像,我们可以在不同的主机上启动并运行容器,从而保证容器在任何地方的一致性和可移植性。

2. 基本概念
以下是对Docker镜像的详细介绍,包括其结构、创建、使用及相关概念。
表2-1 镜像中的资源概念
|
概念 |
作用 |
|
Image(镜像) |
只读模版,用于启动容器 |
|
ID(镜像ID) |
每个镜像都有唯一的标识符ID |
|
Tag(标签) |
用于区分不同版本的镜像 |
-
Image:是一个只读的模板,用于创建 Docker 容器。它包含操作系统、应用程序、库、依赖项以及容器启动时需要执行的命令。每个 Docker 镜像都由一系列的层(Layer)组成,这些层是镜像的构建过程中的增量变化。
-
ID:每个镜像都有一个唯一的标识符(ID)。它是镜像的 SHA256 哈希值,可以通过 docker images 命令查看。
-
Tag:镜像的标签用于区分镜像的不同版本。标签通常以 repository:tag 的形式存在,tag 默认为 latest,如果没有指定标签,则默认使用 latest 标签。例如,ubuntu:18.04 和 ubuntu:20.04 是两个不同版本的镜像。
3. 镜像的结构
Docker 镜像是由多个只读层(Layer)构成的,每个层代表一个增量变化。镜像的最底层通常是操作系统(例如 Ubuntu 或 CentOS),上面可以叠加安装应用程序和依赖项。每次镜像构建时,都会创建一个新的层,Docker 会在此基础上进行操作。需要注意的是镜像最大支持127层。
3.1. 镜像层
-
基础镜像层:最底层通常是一个操作系统的镜像,如 ubuntu 或 alpine。
-
应用层:在操作系统之上,可能会安装应用程序及其依赖项,例如 Nginx、MySQL 等。
-
修改层:每次对镜像进行修改时,都会创建一个新的层,这个层记录了增量变化(例如安装了新的软件包或修改了配置文件)。
3.2. 元数据
除了数据层外,Docker 镜像还包含一些元数据,例如:
-
镜像的命令:镜像执行时需要运行的命令(如 ENTRYPOINT 或 CMD)。
-
镜像的配置:镜像的环境变量、端口映射、挂载点等。
3.3. 镜像存储
Docker 镜像存储在 Docker 守护进程的本地存储中,默认位于 /var/lib/docker 路径下。您可以通过修改配置来调整存储位置。
4. 镜像制作
通常我们在公共仓库中使用的镜像无法满足全部使用需求,若需要运行特殊的应用程序则需要制作新镜像,通常制作镜像的方式分为以下两种:
(1)明盒制作:
通过基础镜像(包含操作系统的镜像)启动,在容器中安装需要的应用程序并进行配置,完成后通过工具将容器导出为镜像。
(2)暗盒制作:
通过使用文件来规定Docker引擎执行对应的操作如:下载文件、运行命令等。制作过程和我们传统的执行命令不同,不会有较多反馈。
常用的镜像制作方式为使用Dockerfile来制作镜像,下面是一个简单的Dockerfile:
|
FROM alpine MAINTANER zcloud WORKDIR /app ENV VERSION V1 COPY file_src /app/file_dest RUN yum install -y nginx EXPOSE 80 CMD ["nginx","-g","daemon off"] |
-
FROM:通过该镜像来制作新镜像,一般选择带有基础操作系统的小型镜像,以免后续制作镜像过大。
-
MAINTAINER:设置制作者的信息。
-
WORKDIR:创建(如果不存在)并进入到一个目录,设置后续通过镜像启动容器时默认工作目录。
-
ENV:设置环境变量。
-
COPY:将本机对应的文件拷贝到镜像中。
-
RUN:执行命令
-
EXPOSE:配置镜像暴露的端口,方便后续使用镜像时对镜像使用的端口判断。
-
CMD:通过镜像启动容器时执行的启动命令。
-
ENTRYPOINT:不可覆盖的命令,如果有CMD则将CMD作为其参数。
5. 常用操作
镜像在日常运维使用过程中主要操作为:拉取镜像、保存镜像、导入镜像、制作新镜像等。下表是一些常用操作:
5.1. 镜像管理
下表为镜像的相关管理操作,其中“[]”中的为可选参数,“<>”中的为必选参数。
表5-1 Image管理操作
|
操作 |
命令 |
备注 |
|
列举 |
docker images |
查询所有镜像 |
|
查询 |
docker inspect <image> |
查询镜像详细信息 |
|
拉取镜像 |
docker pull <image> |
拉取一个仓库中的镜像 |
|
推送镜像 |
docker push <image> |
将镜像推送至仓库 |
|
加载镜像 |
docker load -i <image_file> |
通过文件加载镜像 |
|
导出镜像 |
docker save <image> [<image>] -o <filename> |
导出一个或多个本机镜像 |
|
添加标签 |
docker tag <image> <new_image> |
为镜像添加一个标签或改名 |
|
制作镜像 |
docker build -t <image_name> -f <dockerfile> <dir> |
通过dockerfile制作新的镜像 |
来源:Zcloud laboratory
更多推荐
所有评论(0)