Skip to content

Docker

作者: Ryan 发布于: 2023/6/20 更新于: 2025/8/1 字数: 0 字 阅读: 0 分钟

容器是什么?

Docker 的核心是容器。容器是一个独立的、隔离的运行环境,包含了应用程序运行所需的一切。与传统的虚拟机不同,容器不需要完整的操作系统副本,而是共享宿主机的操作系统内核,这使得容器更加轻量和高效。

Docker 是什么

Docker 是一个开源的容器化平台,它允许开发者将应用程序及其所有依赖项(如代码、运行时、系统工具、系统库等)打包到一个轻量级、可移植的容器中。这个容器可以在任何支持 Docker 的环境中运行,比如开发者的本地机器或云服务器,并且能够保证一致的行为,不受环境差异的影响。

系统环境:openEuler release 22.03

bash
[root@OpenEuler2203 ~]# cat /etc/os-release 
NAME="openEuler"
VERSION="22.03 (LTS-SP4)"
ID="openEuler"
VERSION_ID="22.03"
PRETTY_NAME="openEuler 22.03 (LTS-SP4)"
ANSI_COLOR="0;31"

一、准备工作(离线安装包获取)

1. 在联网环境中下载安装包

如果 docker-27.5.0.tgz 未提前准备好,需在联网环境中下载:

bash
# 下载官方二进制包(需确认版本存在性)

wget https://download.docker.com/linux/static/stable/x86_64/docker-27.5.1.tgz

# 若无法访问官方源,可通过其他途径获取离线包(如企业内部镜像)

二、安装Docker二进制文件

1. 解压安装包

shell
cd /opt/docker
tar -xzvf docker-27.5.0.tgz

2. 复制二进制文件到系统路径

bash
# 将解压后的二进制文件复制到 /usr/bin/
sudo cp docker/* /usr/bin/

# 验证文件权限
sudo chmod +x /usr/bin/docker*
sudo chmod +x /usr/bin/containerd*
sudo chmod +x /usr/bin/runc

三、配置Docker服务

bash
# 创建Docker服务配置文件
sudo tee /etc/systemd/system/docker.service <<EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
Requires=containerd.service

[Service]
Type=notify
ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target
EOF

创建 containerd 服务文件

生成 systemd 服务配置文件:

bash
sudo tee /etc/systemd/system/containerd.service <<EOF
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target

[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/bin/containerd
Restart=always
RestartSec=5
Delegate=yes
KillMode=process
OOMScoreAdjust=-999
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity

[Install]
WantedBy=multi-user.target
EOF

启动 containerd

bash
# 重载 systemd 配置
sudo systemctl daemon-reload

# 启动 containerd 并设置开机自启
sudo systemctl enable --now containerd

# 再次启动 Docker
sudo systemctl start docker

# 验证服务状态
sudo systemctl status containerd docker

启动Docker服务

bash
# 重新加载systemd配置
sudo systemctl daemon-reload

# 启动Docker并设置开机自启
sudo systemctl enable --now docker

# 验证服务状态
sudo systemctl status docker

四、验证安装

1. 检查Docker版本

bash
# 检查 Docker 版本
docker version

# 应输出 Docker 27.5.0 版本信息

2. 运行测试容器

bash
sudo docker run hello-world
# 输出 "Hello from Docker!" 表示成功

安装Docker Compose

若需离线安装Docker Compose:

1. 下载二进制文件(联网环境)

bash
wget https://github.com/docker/compose/releases/download/v2.27.5/docker-compose-linux-aarch64
mv docker-compose-linux-aarch64 docker-compose
chmod +x docker-compose

2. 部署到目标机器

bash
sudo cp docker-compose /usr/local/bin/
docker-compose version

六、常见问题解决

1. 依赖缺失错误

若提示缺少依赖库(如 libcgroupcontainerd):

手动安装依赖:在联网环境中下载对应RPM包(如 containerd-*.rpm)并复制到目标机器:

bash
sudo yum localinstall -y containerd-*.rpm

2. 权限问题

bash
# 允许普通用户运行Docker
sudo usermod -aG docker $USER
newgrp docker  # 或重新登录

3. 服务启动失败

bash
# 查看日志定位问题
sudo journalctl -u docker.service --no-pager
# 常见问题:containerd未安装或配置错误

4. 安装包内容验证

确保 docker-27.5.0.tgz 解压后包含以下关键文件:

bash

docker/
├── dockerd          # Docker守护进程
├── docker           # Docker客户端
├── containerd       # 容器运行时
├── containerd-shim  # 容器进程管理
└── runc             # 容器运行时工具

针对 Failed to start docker.service: Unit containerd.service not found 错误,问题根源是 Docker 依赖的容器运行时 containerd 未正确安装或配置。以下是分步解决方案:

原因分析

containerd 未安装

Docker 依赖 containerd 作为容器运行时,离线安装时若未单独安装 containerd,会导致服务启动失败。

containerd 服务文件缺失 containerd 需通过 systemd 服务文件管理,若服务文件未配置,systemd 无法识别其服务。