Docker 安装与使用教程
本教程旨在提供一个从零开始,在 CentOS 7.9 系统上安装、配置并成功运行 Docker 的详尽指南。它整合了系统准备、Docker 安装、镜像加速配置、基本使用以及常见问题排查。
快捷版
适用系统:CentOS Linux release 7.9.2009 (Core)
镜像源:Docker 官方 + 第三方公共镜像加速器
1. 卸载旧版本 Docker(可选)
# 停止 Docker 服务sudo systemctl stop docker# 卸载 Docker 相关包sudo yum remove -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras# (可选)清理 Docker 数据目录(会删除所有镜像、容器、卷!)# sudo rm -rf /var/lib/docker# sudo rm -rf /var/lib/containerd
2. 配置 Docker YUM 仓库(使用阿里云源)
# 安装 yum-utils 工具sudo yum install -y yum-utils# 添加 Docker 仓库(阿里云源)sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 生成缓存sudo yum makecache fast
3. 安装 Docker 引擎及插件
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
4. 配置镜像加速器(公共镜像源推荐)
使用多个公共镜像源,提高拉取成功率,适配不同地区网络情况。
# 创建 Docker 配置目录(如不存在)sudo mkdir -p /etc/docker# 写入镜像加速器配置sudo tee /etc/docker/daemon.json <<-\'EOF\'{ \"registry-mirrors\": [ \"https://docker-0.unsee.tech\", \"https://docker-cf.registry.cyou\", \"https://docker.1panel.live\", \"https://docker.m.daocloud.io\" ]}EOF# 重载配置并重启 Dockersudo systemctl daemon-reloadsudo systemctl restart docker
5. 启动并验证 Docker 是否正常
# 启动 Dockersudo systemctl start docker# 设置开机自动启动sudo systemctl enable docker# 查看 Docker 版本信息docker version# 查看加速器是否生效docker info | grep -i mirrors# 拉取测试镜像并运行docker run hello-world
详细版
适用系统: CentOS Linux release 7.9.2009 (Core) 或兼容版本
教程内容:
- 系统准备与更新(可选,推荐使用国内镜像源)
- 安装必要的依赖
- 配置 Docker 的 YUM 仓库(推荐阿里云源)
- 安装 Docker 引擎(包含 Compose/Buildx 插件)
- 启动并设置 Docker 开机自启
- 初步验证 Docker 安装
- 配置 Docker 镜像加速器(关键步骤,提升下载速度)
- 最终验证与镜像加速器生效确认
- Docker 基本使用方法
- 常用 Docker 命令参考
- 常见问题排查指南
- 退出容器与终端
1. 系统准备与更新(可选,推荐使用国内镜像源)
为了提高软件包下载速度,尤其是在中国大陆地区,建议将系统 YUM 源更换为国内镜像(如阿里云)。
首先如果系统中已经存在旧的Docker,则先卸载:
yum remove docker \\ docker-client \\ docker-client-latest \\ docker-common \\ docker-latest \\ docker-latest-logrotate \\ docker-logrotate \\ docker-engine \\ docker-selinux
# 备份当前的 YUM 源配置 (安全起见)sudo mv /etc/yum.repos.d /etc/yum.repos.d.bak.$(date +%s)sudo mkdir -p /etc/yum.repos.d# 下载阿里云的 CentOS 7 YUM 源配置文件sudo curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo# 清理旧的缓存并生成新的缓存sudo yum clean allsudo yum makecache fast
2. 安装必要的依赖
安装 yum-utils
软件包,它提供了 yum-config-manager
工具,用于管理 YUM 仓库。同时,安装 device-mapper-persistent-data
和 lvm2
是 Docker 存储驱动推荐的依赖。
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3. 配置 Docker 的 YUM 仓库(推荐阿里云源)
Docker 官方也提供了仓库,但使用国内镜像源通常可以获得更快的下载速度。
# 添加 Docker 的阿里云 YUM 仓库sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 更新 YUM 缓存以包含 Docker 仓库信息sudo yum makecache fast
- 备选方案:使用 Docker 官方仓库
如果你不在意下载速度或者更倾向于使用官方源,可以使用以下命令代替上面的yum-config-manager
命令:
# sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo# sudo yum makecache fast
4. 安装 Docker 引擎(包含 Compose/Buildx 插件)
执行以下命令安装最新稳定版的 Docker Engine、CLI、Containerd 以及推荐的 Buildx 和 Compose 插件。
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- *� 附:可选命令
-
- 查看所有可安装的 Docker 版本:
yum list docker-ce --showduplicates | sort -r
-
- 安装指定版本的 Docker: (将
替换为实际版本,例如
20.10.9
)
- 安装指定版本的 Docker: (将
# sudo yum install -y docker-ce- docker-ce-cli- containerd.io docker-buildx-plugin docker-compose-plugin
5. 启动并设置 Docker 开机自启
安装完成后,启动 Docker 服务并将其设置为开机自动启动。
# 启动 Docker 服务sudo systemctl start docker# 设置 Docker 服务开机自启sudo systemctl enable docker
6. 初步验证 Docker 安装
检查 Docker 版本信息,并尝试运行经典的 hello-world
镜像来确认 Docker 核心功能正常。
# 检查 Docker 版本docker version# 查看 Docker 系统信息 (包括存储驱动、运行状态等)docker info# 运行 hello-world 镜像docker run hello-world
如果看到类似以下的输出,特别是 Hello from Docker!
,则表示 Docker 已成功安装并可以运行容器:
Unable to find image \'hello-world:latest\' locallylatest: Pulling from library/hello-world[...]Status: Downloaded newer image for hello-world:latestHello from Docker!This message shows that your installation appears to be working correctly.[...]
7. 配置 Docker 镜像加速器(关键步骤,提升下载速度)
默认情况下,Docker 从 Docker Hub 拉取镜像,速度可能较慢。配置镜像加速器可以显著提高下载速度。
使用公共镜像加速器
你可以使用一些公开的镜像加速器地址。注意,公共地址的稳定性和速度可能不如专属地址。
# 创建配置目录 (如果不存在)sudo mkdir -p /etc/docker# 使用 tee 命令写入配置文件 (包含多个公共地址)sudo tee /etc/docker/daemon.json <<-\'EOF\'{ \"registry-mirrors\": [ \"https://docker-0.unsee.tech\", \"https://docker-cf.registry.cyou\", \"https://docker.1panel.live\", \"https://docker.m.daocloud.io\" ]}EOF
- 应用配置更改
修改配置文件后,需要重载配置并重启 Docker 服务:
# 重载 systemd 管理的配置文件sudo systemctl daemon-reexec # 有时用 daemon-reload 也可以,reexec 更彻底# 重启 Docker 服务以应用新配置sudo systemctl restart docker
8. 最终验证与镜像加速器生效确认
再次检查 Docker 信息,并运行 hello-world
。
# 再次查看 Docker 信息docker info
在输出的信息中,查找 Registry Mirrors:
部分,确认你配置的加速器地址已经列出。
# 再次运行 hello-world (如果之前已下载,会直接使用本地缓存)# 你可以尝试拉取一个新镜像来测试速度,例如 docker pull ubuntudocker run hello-world
如果配置成功,拉取新镜像的速度应该会比之前快很多。
9. Docker 基本使用方法
- 运行一个交互式容器 (例如 Ubuntu)
# -i: 交互式操作# -t: 分配一个伪终端# ubuntu: 使用的镜像名称# bash: 进入容器后执行的命令docker run -it ubuntu bash
执行后,你将进入 Ubuntu 容器的 Bash Shell。
- 列出当前正在运行的容器,如果不报错,说明安装启动成功
docker ps
- 列出所有容器(包括已停止的)
docker ps -a
- 停止一个正在运行的容器
首先使用docker ps
找到容器的 ID (CONTAINER ID) 或名称 (NAMES)。
# 使用容器 ID 停止docker stop # 或者使用容器名称停止# docker stop
- 启动一个已停止的容器
docker start
- 重启一个容器
docker restart
- 进入一个正在运行的容器 (Attach vs Exec)
-
attach
: 连接到容器的主进程(通常是启动时指定的命令)。
docker attach
-
exec
: 在运行的容器内执行一个新的命令(更常用,例如打开一个新的 shell)。
# 打开一个新的 Bash Shelldocker exec -it bash
10. 常用 Docker 命令参考
- 镜像管理 (Images)
-
docker images
: 列出本地所有镜像。docker pull :
: 从仓库拉取镜像 (例如docker pull nginx:latest
)。docker rmi
: 删除一个或多个本地镜像。docker image prune
: 删除所有未被任何容器使用的悬空镜像 (dangling images)。docker image prune -a
: 删除所有未被任何容器使用的镜像(慎用!)。
- 容器管理 (Containers)
-
docker rm
: 删除一个或多个已停止的容器。docker rm $(docker ps -aq)
: 删除所有已停止的容器(常用)。docker container prune
: 删除所有已停止的容器 (与上面命令效果类似)。docker logs
: 查看容器的日志输出。docker logs -f
: 实时跟踪容器的日志输出。
- Docker Compose (如果使用
.yml
文件管理多容器应用)
-
docker compose up
: 根据docker-compose.yml
创建并启动容器。docker compose up -d
: 在后台创建并启动容器。docker compose down
: 停止并删除由docker-compose.yml
定义的容器、网络。docker compose ps
: 列出由docker-compose.yml
管理的容器。docker compose logs
: 查看由docker-compose.yml
管理的服务日志。docker compose exec
: 在指定服务容器内执行命令 (例如docker compose exec webserver bash
)。
11. 常见问题排查指南
如果 Docker 无法启动或运行容器时遇到问题:
- 查看 Docker 服务状态:
sudo systemctl status docker.service
这会显示服务是否正在运行,以及最近的日志片段,通常包含错误信息。
- 查看系统日志获取更详细信息:
sudo journalctl -u docker.service -n 100 --no-pager # 查看 Docker 服务的最后 100 条日志sudo journalctl -xe # 查看系统日志中的错误(可能包含 Docker 相关信息)
- 检查配置文件语法:
如果你修改了/etc/docker/daemon.json
,确保它是有效的 JSON 格式。可以使用在线 JSON 验证器检查。 - 检查文件权限:
确保 Docker 配置文件权限正确。
sudo ls -l /etc/docker/daemon.json# 预期输出类似: -rw-r--r-- 1 root root ... /etc/docker/daemon.json# 如果权限不对,可以尝试修复:# sudo chown root:root /etc/docker/daemon.json# sudo chmod 644 /etc/docker/daemon.json
- 检查系统资源:
-
- 磁盘空间:
df -h
- 内存:
free -h
- 确认是否有足够的资源供 Docker 及其容器运行。
- 磁盘空间:
- 尝试重启 Docker 服务:
在修复配置或解决问题后,务必重启 Docker。
sudo systemctl restart docker
- 网络问题:
-
- 检查防火墙设置(如
firewalld
或iptables
)是否阻止了 Docker 的网络通信(尤其是端口映射)。 - 检查
/etc/resolv.conf
中的 DNS 设置是否正确,容器需要 DNS 来解析域名。
- 检查防火墙设置(如
12. 退出容器与终端
- 退出 Docker 容器的交互式 Shell:
在容器的 Shell 中输入exit
命令,或者按下Ctrl + D
。 - 退出 SSH 终端:
如果你是通过 SSH 连接到服务器操作的,输入exit
命令或按下Ctrl + D
来断开 SSH 连接。