从零开始:CentOS 系统安装 Docker 容器引擎 – wiki基地


从零开始:CentOS 系统安装 Docker 容器引擎——详尽指南与最佳实践

引言:拥抱容器化时代

在当今的软件开发与运维领域,容器化技术已成为不可或缺的一部分。它以其轻量级、可移植、环境一致性等优点,彻底改变了应用的部署、运行和管理方式。而 Docker,作为容器技术的领导者,以其易用性和强大的生态系统,赢得了全球开发者的青睐。

CentOS,作为一款广受欢迎的企业级 Linux 发行版,以其稳定性、安全性和长期支持,成为了许多生产环境的首选操作系统。因此,在 CentOS 系统上部署 Docker,成为了众多技术人员的日常需求。

本篇文章将为您提供一份从零开始、详尽无遗的 CentOS 系统安装 Docker 容器引擎的指南。我们将涵盖从系统准备、旧版本清理、官方仓库配置、Docker Engine 安装、服务启停与验证、到关键的后安装配置(如非 Root 用户访问、镜像加速器、存储驱动优化和防火墙设置),以及 Docker 的基本使用和常见问题排查。无论您是 Docker 新手还是希望深入了解安装细节的资深用户,这份指南都将助您一臂之力,确保您能在 CentOS 系统上成功搭建并高效运行 Docker 环境。

第一章:准备工作——系统环境与前置条件

在着手安装 Docker 之前,我们需要确保 CentOS 系统处于一个良好且符合要求的状态。这包括系统版本、更新、必要的工具以及网络连接。

1.1 系统版本要求

Docker 官方支持在以下 CentOS 版本上运行:
* CentOS 7
* CentOS 8 (及 CentOS Stream 8)
* CentOS 9 Stream

对于生产环境,通常推荐使用 CentOS 7 或 CentOS 8。本指南将以 CentOS 7/8 为主要参考,因为安装步骤在这两个版本上基本一致,主要差异在于 yum (CentOS 7) 和 dnf (CentOS 8/Stream 8/9) 命令,但 Docker 官方仓库已为这两种包管理器做好了兼容。

1.2 硬件要求

  • 内存 (RAM): 至少 2GB RAM,建议 4GB 或更高,尤其是在运行多个容器或内存密集型应用时。
  • CPU: 至少 64 位处理器,建议双核或更高。
  • 磁盘空间: 至少 20GB 可用空间,建议 50GB 或更高。Docker 镜像和容器会占用大量磁盘空间。

1.3 权限要求

您需要一个具有 sudo 权限的用户,或者直接使用 root 用户进行操作。为了安全起见,通常推荐使用 sudo 用户。

1.4 网络连接

您的 CentOS 服务器需要能够访问互联网,以便下载 Docker 相关的软件包和镜像。

1.5 系统更新与必要工具安装

在安装任何新软件之前,始终推荐先更新系统软件包,以确保所有现有软件包都是最新的,并解决潜在的兼容性或安全问题。同时,安装一些辅助工具,如 yum-utils(或 dnf-utils)、device-mapper-persistent-datalvm2,这些工具对于管理 yum/dnf 仓库以及 Docker 存储驱动(如 devicemapper,尽管现在更推荐 overlay2,但这些依赖通常需要)至关重要。

“`bash

1. 更新系统软件包

对于 CentOS 7:

sudo yum update -y

对于 CentOS 8/Stream 8/9:

sudo dnf update -y

2. 安装必要的工具 (yum-utils 用于 yum-config-manager,device-mapper-persistent-data 和 lvm2 是 Docker 存储驱动的依赖)

对于 CentOS 7:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

对于 CentOS 8/Stream 8/9:

sudo dnf install -y yum-utils device-mapper-persistent-data lvm2

echo “系统更新与必要工具安装完成。”
``
**解释:**
*
yum update -y(或dnf update -y): 更新所有已安装的软件包到最新版本,-y选项表示自动确认所有提示。
*
yum install -y yum-utils device-mapper-persistent-data lvm2(或dnf install -y …):
*
yum-utils(或dnf-utils): 提供yum-config-manager(或dnf config-manager) 命令,用于更方便地添加或管理yum/dnf仓库。
*
device-mapper-persistent-datalvm2: 这是 Docker 早期devicemapper存储驱动的依赖项。虽然overlay2` 是目前推荐的存储驱动,但安装这些依赖可以避免一些潜在的问题,并且它们是系统常用工具。

第二章:卸载旧版本 Docker(如果存在)

如果您之前尝试安装过 Docker,或者系统上存在旧版本的 Docker(例如通过 CentOS 官方仓库安装的旧版 docker 包),那么在安装最新版本之前,强烈建议您将其彻底卸载。这可以避免版本冲突和不必要的兼容性问题。

“`bash
echo “尝试卸载旧版本的 Docker…”

1. 停止并禁用 Docker 服务

sudo systemctl stop docker
sudo systemctl disable docker

2. 卸载所有相关的 Docker 包

列出所有可能的旧 Docker 包名称,并尝试卸载

sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
docker-ce \
docker-ce-cli \
containerd.io -y

对于 CentOS 8/Stream 8/9,使用 dnf

# sudo dnf remove docker \
# docker-client \
# docker-client-latest \
# docker-common \
# docker-latest \
# docker-latest-logrotate \
# docker-logrotate \
# docker-engine \
# docker-ce \
# docker-ce-cli \

containerd.io -y

3. 删除 Docker 相关的数据和配置目录

这是非常重要的一步,它会删除所有镜像、容器、卷和网络配置

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

echo “旧版本 Docker 卸载及残留数据清理完成。”
``
**解释:**
*
systemctl stop docker/systemctl disable docker: 停止正在运行的 Docker 服务并阻止其在系统启动时自动运行。
*
yum remove …: 卸载所有可能存在的 Docker 相关软件包。即使某些包不存在,命令也不会报错。
*
rm -rf /var/lib/docker/rm -rf /var/lib/containerd: **这是关键一步!** 它会删除 Docker 引擎和containerd` 运行时存储的所有数据,包括下载的镜像、创建的容器、数据卷和网络配置。请务必谨慎操作,因为这些数据一旦删除将无法恢复。对于全新安装,这正是我们期望的“从零开始”的状态。

第三章:配置 Docker 官方仓库

Docker 官方为 CentOS 提供了专门的 yum/dnf 仓库,从中可以获取到最新版本的 Docker Engine。直接从官方仓库安装是推荐的做法,因为它提供了最新功能、安全更新和最佳兼容性。

“`bash
echo “配置 Docker 官方仓库…”

1. 添加 Docker 官方 yum 仓库

对于 CentOS 7:

sudo yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo

对于 CentOS 8/Stream 8/9:

sudo dnf config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo

2. (可选) 查看可用 Docker 版本

可以使用此命令查看仓库中可用的 Docker CE 版本列表

sudo yum list docker-ce –showduplicates | sort -r

sudo dnf list docker-ce –showduplicates | sort -r # for CentOS 8/9

echo “Docker 官方仓库配置完成。”
``
**解释:**
*
yum-config-manager –add-repo …(或dnf config-manager –add-repo …): 这个命令是yum-utils(或dnf-utils) 包提供的,用于将 Docker 官方仓库的.repo文件添加到/etc/yum.repos.d/目录下,从而使yum/dnf能够从该仓库中获取 Docker 软件包。
*
https://download.docker.com/linux/centos/docker-ce.repo: 这是 Docker CE (Community Edition) 官方仓库的 URL。
*
yum list docker-ce –showduplicates | sort -r: 此命令用于列出docker-ce` 包在仓库中所有可用的版本,并按降序排列,方便您选择安装特定版本。在生产环境中,锁定特定版本的 Docker 是一个好习惯,以确保稳定性。

第四章:安装 Docker Engine

仓库配置完成后,我们就可以正式安装 Docker Engine 了。Docker Engine 包含了 Docker 守护进程(dockerd)、客户端(docker CLI)以及 containerd 运行时等核心组件。

“`bash
echo “开始安装 Docker Engine…”

1. 安装 Docker Engine、CLI 和 Containerd

推荐安装最新稳定版,无需指定版本号

对于 CentOS 7:

sudo yum install docker-ce docker-ce-cli containerd.io -y

对于 CentOS 8/Stream 8/9:

sudo dnf install docker-ce docker-ce-cli containerd.io -y

2. (可选) 安装特定版本

如果您需要安装特定版本的 Docker,例如 20.10.x 版本

首先通过 yum list docker-ce --showduplicates | sort -r 查看可用版本

然后指定完整的版本字符串进行安装,例如:

sudo yum install docker-ce-20.10.9 docker-ce-cli-20.10.9 containerd.io -y

务必替换为实际查找到的版本号,且 docker-ce 和 docker-ce-cli 版本通常需一致

echo “Docker Engine 安装完成。”
``
**解释:**
*
docker-ce: 这是 Docker 社区版的核心软件包,包含 Docker 守护进程 (dockerd)。
*
docker-ce-cli: 这是 Docker 命令行客户端,用于与 Docker 守护进程进行交互。
*
containerd.io: 这是一个独立的容器运行时,由 Docker 和 CNCF 维护,它负责管理容器的生命周期,例如创建、启动、停止和销毁容器。Docker Engine 依赖于containerd来实际运行容器。
*
-y`: 自动确认所有安装提示。

第五章:启动 Docker 服务并验证安装

安装完成后,我们需要启动 Docker 服务,并验证它是否正常运行。

“`bash
echo “启动 Docker 服务并验证安装…”

1. 启动 Docker 服务

sudo systemctl start docker

2. 设置 Docker 服务开机自启

sudo systemctl enable docker

3. 检查 Docker 服务状态

sudo systemctl status docker

4. 运行一个简单的测试容器(hello-world)

这将下载一个名为 hello-world 的镜像,并在容器中运行它

sudo docker run hello-world

5. 查看 Docker 系统信息

这将显示 Docker 守护进程的详细信息,包括版本、存储驱动、运行时等

sudo docker info

echo “Docker 服务启动与验证完成。”
``
**解释:**
*
sudo systemctl start docker: 启动 Docker 守护进程。
*
sudo systemctl enable docker: 将 Docker 服务设置为开机自启,确保服务器重启后 Docker 也能自动运行。
*
sudo systemctl status docker: 检查 Docker 服务的当前状态。如果一切正常,您应该看到Active: active (running)
*
sudo docker run hello-world: 这是验证 Docker 是否安装成功的经典方式。Docker 会尝试从 Docker Hub 下载hello-world镜像(如果本地没有),然后在一个新的容器中运行它。如果成功,您会看到一个欢迎信息,表明 Docker 守护进程可以正常拉取镜像并运行容器。
*
sudo docker info`: 提供了 Docker 守护进程的详细运行时信息,例如版本号、存储驱动、日志驱动、Cgroup 驱动、已用空间等。这是诊断 Docker 环境的重要工具。

第六章:后安装配置——优化与最佳实践

虽然 Docker 已经安装并可以运行,但为了更方便、安全和高效地使用 Docker,我们还需要进行一些重要的后安装配置。

6.1 非 Root 用户访问 Docker

默认情况下,只有 root 用户或具有 sudo 权限的用户才能执行 docker 命令。为了方便日常操作并提高安全性(避免总是使用 sudo),我们可以将当前用户添加到 docker 用户组。

“`bash
echo “配置非 Root 用户访问 Docker…”

1. 创建 docker 用户组(如果不存在)

通常在安装 Docker 时会自动创建,但为了确保,可以执行

sudo groupadd docker || echo “docker group already exists”

2. 将当前用户添加到 docker 用户组

将 $USER 替换为您自己的用户名,或者直接使用 $USER 变量

sudo usermod -aG docker $USER

3. 激活用户组更改

您需要注销并重新登录,或者执行以下命令使更改生效

newgrp docker

4. 验证:不使用 sudo 运行 docker 命令

docker run hello-world

echo “非 Root 用户访问配置完成,请注意可能需要重新登录终端会话以使更改生效。”
``
**解释:**
*
sudo groupadd docker: 创建一个名为docker的用户组。
*
sudo usermod -aG docker $USER: 将当前登录的用户(通过$USER变量获取)添加到docker用户组中。-a表示追加,-G表示指定组。
*
newgrp docker: 临时激活当前会话中的新组权限。更彻底的方法是注销并重新登录。
* **安全提示:** 将用户添加到
docker组等同于授予该用户root权限,因为docker组的成员可以运行容器,而容器内的root用户可以挂载宿主机的根文件系统并获得root` 权限。请谨慎授予此权限。

6.2 配置 Docker 镜像加速器

对于中国大陆的用户,由于网络环境限制,直接从 Docker Hub 拉取镜像可能会非常缓慢甚至失败。配置镜像加速器可以显著提升镜像下载速度。国内常见的 Docker 镜像加速服务提供商包括阿里云、腾讯云、网易云等,它们都提供了免费的加速服务。

“`bash
echo “配置 Docker 镜像加速器…”

1. 创建或编辑 Docker 配置文件 daemon.json

Docker 的主配置文件位于 /etc/docker/daemon.json

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [“https://docker.mirrors.ustc.edu.cn”, “https://hub-mirror.c.163.com”, “https://mirror.ccs.tencentyun.com”],
“exec-opts”: [“native.cgroupdriver=systemd”],
“log-driver”: “json-file”,
“log-opts”: {
“max-size”: “100m”
},
“storage-driver”: “overlay2”
}
EOF

2. 添加您的专属加速器地址

建议前往阿里云、腾讯云等官网获取您的专属加速器地址,通常格式为 https://xxxxxx.mirror.aliyuncs.com

例如,替换上面配置中的 “https://docker.mirrors.ustc.edu.cn” 为您的专属地址。

可以添加多个加速器,Docker 会按顺序尝试。

3. 重新加载 Docker 配置并重启服务

sudo systemctl daemon-reload
sudo systemctl restart docker

4. 验证加速器是否生效

运行 docker info 命令,查找 “Registry Mirrors” 部分

docker info | grep “Registry Mirrors”

echo “Docker 镜像加速器配置完成。”
``
**解释:**
*
sudo tee /etc/docker/daemon.json <<-‘EOF’ … EOF’: 使用tee命令创建或覆盖/etc/docker/daemon.json文件,并将EOF之间的内容写入。
*
registry-mirrors: 这是一个数组,用于指定 Docker 镜像的加速器地址。您可以添加多个,Docker 会按顺序尝试。请务必替换为您获取的专属加速器地址。
*
exec-opts: 推荐将native.cgroupdriver设置为systemd。这是 Docker 官方推荐的配置,可以避免一些与cgroup相关的警告和潜在问题,特别是在 CentOS 7/8/9 上,systemd是默认的cgroup管理器。
*
log-driver: 设置容器的日志驱动,json-file是默认且常用的。
*
log-opts: 配置日志选项,例如max-size限制单个日志文件的大小,防止日志文件过大。
*
storage-driver: 配置存储驱动,下面将详细解释。
*
sudo systemctl daemon-reload: 重新加载systemd的配置,以便它识别daemon.json中的更改。
*
sudo systemctl restart docker`: 重启 Docker 服务以应用新的配置。

6.3 配置存储驱动 (Storage Driver)

Docker 支持多种存储驱动,如 aufsoverlayoverlay2devicemapperbtrfszfs 等。在 CentOS 上,默认或推荐使用的驱动是 overlay2overlay2 具有更好的性能和稳定性,并且是 Docker 官方推荐的生产环境驱动。

“`bash
echo “配置 Docker 存储驱动…”

1. 检查当前 Docker 使用的存储驱动

docker info | grep “Storage Driver”

如果不是 overlay2,或者您想明确指定,请在 /etc/docker/daemon.json 中添加或修改 “storage-driver”

(在前面镜像加速器配置时我们已经添加了这一行)

“storage-driver”: “overlay2”

2. 如果您修改了 daemon.json,需要重启 Docker 服务

sudo systemctl daemon-reload

sudo systemctl restart docker

3. 再次验证存储驱动是否生效

docker info | grep “Storage Driver”

echo “Docker 存储驱动配置完成。”
``
**解释:**
*
Storage Driver: 确定 Docker 如何在宿主机上存储镜像层和容器文件系统。
*
overlay2: 是目前最推荐的存储驱动。它利用 Linux 内核的overlayfs功能,提供高效的层管理和文件共享,性能优异。
* 确保您的
daemon.json文件中包含“storage-driver”: “overlay2″`。如果之前配置镜像加速器时已经添加,则无需重复。

6.4 配置防火墙 (Firewalld)

CentOS 默认使用 firewalld 作为防火墙。为了允许外部流量访问 Docker 容器中运行的服务,您可能需要配置防火墙规则。

Docker 在启动时通常会自动在 firewalld 中添加一些规则(如 docker0 桥接网卡的转发规则),但如果您需要暴露容器端口到外部网络,则需要手动添加规则。

“`bash
echo “配置防火墙…”

1. 检查 firewalld 服务状态

sudo systemctl status firewalld

2. 如果 firewalld 没有运行,建议启动并设置开机自启

sudo systemctl start firewalld

sudo systemctl enable firewalld

3. 允许特定的 Docker 端口通过防火墙

假设您的 Docker 容器应用需要通过 80 端口对外提供服务

sudo firewall-cmd –permanent –add-port=80/tcp

如果您需要在宿主机上远程管理 Docker Daemon (不推荐在生产环境直接暴露),可能需要打开 2375 或 2376

sudo firewall-cmd –permanent –add-port=2375/tcp # 非加密端口,非常不安全

sudo firewall-cmd –permanent –add-port=2376/tcp # TLS 加密端口

4. 重新加载防火墙规则使之生效

sudo firewall-cmd –reload

5. 验证端口是否已添加

sudo firewall-cmd –list-ports

echo “防火墙配置完成。”
``
**解释:**
*
firewall-cmd –permanent –add-port=/: 永久性地打开指定端口和协议。
*
firewall-cmd –reload: 重新加载firewalld` 配置,使永久性规则生效。
* 安全警示: 随意暴露 Docker Daemon 的端口(如 2375 或 2376)到公网是非常危险的行为,除非您有严格的访问控制和加密措施。通常,我们通过反向代理(如 Nginx、HAProxy)或在内部网络中访问容器服务。

第七章:Docker 基本使用

恭喜您!现在您的 CentOS 系统已经安装并配置好了一个功能完善的 Docker 容器引擎。接下来,我们将学习一些基本的 Docker 命令,帮助您快速上手。

7.1 搜索镜像

bash
docker search centos

这会在 Docker Hub 上搜索名为 centos 的镜像,并显示相关信息,如星级、官方/非官方等。

7.2 拉取镜像

bash
docker pull centos:latest
docker pull ubuntu:20.04

docker pull 命令用于从 Docker Hub (或其他配置的镜像仓库) 下载镜像到本地。latest 是标签,代表最新版本。

7.3 查看本地镜像

bash
docker images

列出所有已下载到本地的 Docker 镜像。

7.4 运行容器

运行容器是 Docker 最核心的功能。

“`bash

运行一个交互式 Centos 容器,并进入其 bash 终端

docker run -it –name my_centos centos:latest /bin/bash

在容器内部,您可以执行各种 Linux 命令,例如:

ls /

yum update -y

exit # 退出容器,容器将停止

运行一个 Nginx 容器,并将容器的 80 端口映射到宿主机的 8080 端口

docker run -d -p 8080:80 –name my_nginx nginx:latest

-d: 后台运行 (detached mode)

-p 8080:80: 端口映射,宿主机端口:容器端口

–name my_nginx: 为容器指定一个名称

“`

7.5 查看容器

“`bash

查看所有正在运行的容器

docker ps

查看所有容器(包括已停止的)

docker ps -a
“`

7.6 停止、启动、重启容器

“`bash

停止容器

docker stop my_nginx

启动容器

docker start my_nginx

重启容器

docker restart my_nginx
“`
您可以使用容器的名称或 ID 来执行这些操作。

7.7 进入正在运行的容器

“`bash
docker exec -it my_nginx /bin/bash

-it: 交互式终端

my_nginx: 容器名称

/bin/bash: 要在容器内执行的命令,这里是启动一个 bash shell

``docker exec` 允许您在不停止容器的情况下,在容器内部执行命令。

7.8 删除容器和镜像

“`bash

删除容器(必须先停止)

docker rm my_nginx
docker rm $(docker ps -aq) # 删除所有已停止的容器

删除镜像(必须先删除依赖于该镜像的容器)

docker rmi centos:latest
docker rmi $(docker images -aq) # 删除所有镜像(危险操作!)

删除所有未使用的容器、镜像、网络和卷 (释放磁盘空间)

docker system prune -a
``
*
docker rm: 删除一个或多个容器。
*
docker rmi: 删除一个或多个镜像。
*
docker system prune -a`: 一个非常有用的命令,可以清理 Docker 系统中所有未使用的资源,包括停止的容器、未被任何容器使用的镜像、未连接的网络和所有未使用的卷。使用时请务必小心,确保您不需要这些资源。

第八章:常见问题与故障排除

在安装和使用 Docker 过程中,可能会遇到一些常见问题。

8.1 “Cannot connect to the Docker daemon at unix:///var/run/docker.sock”

原因:
* Docker 服务没有运行。
* 当前用户没有访问 docker.sock 文件的权限。

解决方案:
1. 检查 Docker 服务状态: sudo systemctl status docker。如果未运行,请启动:sudo systemctl start docker
2. 检查用户权限: 确保您的用户已添加到 docker 组。如果没有,执行 sudo usermod -aG docker $USER 并重新登录或运行 newgrp docker

8.2 镜像拉取缓慢或失败

原因:
* 网络连接不稳定或被防火墙阻断。
* 未配置或配置错误的镜像加速器(尤其是中国大陆用户)。

解决方案:
1. 检查网络连接: 尝试 ping docker.iocurl https://registry-1.docker.io/v2/
2. 配置镜像加速器: 按照本文第六章 6.2 节的步骤配置并重启 Docker 服务。

8.3 容器无法启动,日志显示 “Permission denied” 或 “SELinux is preventing…”

原因:
* SELinux 安全策略阻止 Docker 访问某些文件或目录。
* 文件权限问题。

解决方案:
1. SELinux:
* 临时禁用 SELinux (不推荐在生产环境):sudo setenforce 0
* 永久禁用 SELinux (不推荐):编辑 /etc/selinux/config,将 SELINUX=enforcing 改为 SELINUX=disabled,然后重启系统。
* 推荐: 安装 container-selinux 包,并为 Docker 相关的目录设置正确的 SELinux 上下文。
* sudo yum install -y container-selinux (CentOS 7)
* sudo dnf install -y container-selinux (CentOS 8/9)
* 如果 SELinux 拒绝访问自定义路径,可能需要手动添加规则或修改文件上下文:sudo chcon -Rt svirt_sandbox_file_t /path/to/your/data
2. 文件权限: 检查 Docker 容器挂载的宿主机目录的权限,确保 Docker 用户具有读写权限。

8.4 磁盘空间不足

原因:
* 下载了过多的镜像。
* 创建了大量容器且未及时清理。
* 容器日志文件过大。

解决方案:
1. 清理 Docker 资源: 使用 docker system prune -a 命令清理未使用的镜像、容器、网络和卷。
2. 限制日志大小:/etc/docker/daemon.json 中配置 log-opts,如本文第六章 6.2 节所示,限制日志文件大小。

第九章:展望与进阶学习

至此,您已经成功在 CentOS 系统上安装并配置了 Docker,并掌握了基本使用方法。Docker 的世界远不止于此,以下是一些值得您继续深入学习的方向:

  • Dockerfile: 学习如何编写 Dockerfile,自动化构建自己的镜像。
  • Docker Compose: 使用 Compose 定义和运行多容器 Docker 应用。
  • Docker 网络: 深入了解 Docker 的各种网络模式,如 bridgehostoverlay 等。
  • Docker 卷: 学习如何管理容器的数据持久化。
  • Docker Swarm / Kubernetes: 了解容器编排工具,用于在大规模生产环境中管理容器集群。
  • Portainer: 一个图形化的 Docker 管理界面,方便可视化管理容器、镜像、卷和网络。

结语

容器化技术是现代 IT 架构的基石,而 Docker 则是您迈入这个领域的最佳起点。通过本篇详尽的指南,您应该已经能够在 CentOS 系统上从零开始,成功安装、配置并开始使用 Docker 容器引擎。

从系统准备到高级配置,每一步都力求详细解释其原理和实践意义,旨在帮助您不仅知其然,更知其所以然。掌握 Docker 不仅仅是学会几个命令,更是理解了一种全新的应用交付和管理哲学。

现在,您已经拥有了一个强大的工具。祝您在容器化的世界中探索愉快,构建出更多高效、可靠的应用程序!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部