AlmaLinux 9作为CentOS Stream的理想替代品,在企业服务器市场的占有率越来越高。容器化部署已经成为当下的主流方案,而Docker仍然是使用最广泛的容器运行时之一。不过在AlmaLinux 9上安装Docker并不像想象中那么顺利,系统默认内置的podman会和Docker产生冲突,官方仓库的配置也需要额外注意。本文将手把手完成整个安装配置流程,并配合实际示例、练习题和常见问题说明,帮助你一次性搭建成功。

一、安装前的准备工作
AlmaLinux 9默认安装了podman和buildah,它们与Docker在功能上高度重合,如果同时保留,后续使用docker命令时可能会出现混乱,甚至某些工具脚本会误调用podman。所以在正式安装Docker CE之前,建议先把这几个组件清理干净:
# 移除系统自带的容器工具,避免与Docker冲突 sudo dnf remove -y podman buildah runc # 更新系统到最新状态(建议先做,避免依赖问题) sudo dnf update -y
清理完成后,还需要安装一些必要的工具包,比如yum-utils,它提供了yum-config-manager命令,后面添加Docker官方仓库时会用到。如果服务器在国内网络环境,建议提前确认网络能否访问Docker官方源,如果不通,直接使用国内镜像源即可,这一点在下文会详细说明。
另外要确认系统时间和时区是否正确,Docker的证书校验对时间敏感,时间偏差过大时拉取镜像会报TLS错误。可以用timedatectl命令检查并修正。
二、安装Docker CE并完成基础配置
1. 添加Docker仓库
Docker官方为RHEL系发行版提供了yum仓库,AlmaLinux 9完全兼容。执行以下命令添加仓库:
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
如果访问官方源速度慢或超时,可以改用阿里云提供的镜像仓库,仓库内容完全一致,只是下载节点在国内:
sudo dnf config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2. 安装Docker引擎
仓库添加好后,直接安装Docker引擎、命令行工具和containerd运行时:
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
安装过程中如果提示GPG密钥问题,确认导入的是download.docker.com或阿里云对应的公钥即可放心继续。安装完成后先不要急着启动,建议先把普通用户加入docker组,这样日常操作不需要每次都加sudo:
# 将当前用户加入docker组 sudo usermod -aG docker $USER # 让组权限立即生效(或重新登录) newgrp docker # 启动Docker并设置开机自启 sudo systemctl enable --now docker # 验证安装结果 docker run hello-world
看到“Hello from Docker!”的输出,说明整个链路已经打通。如果这里报权限错误,多半是用户组设置还没生效,重新登录一次终端即可。
3. 配置镜像加速器
国内环境直接从Docker Hub拉取镜像经常超时,配置加速器是必做的一步。编辑/etc/docker/daemon.json文件:
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "50m",
"max-file": "3"
}
}除了镜像加速,上面的配置还限制了容器日志的单文件大小和数量。这一点非常重要,长期运行的服务如果不限制日志,/var/lib/docker/containers目录会不断膨胀,最终把磁盘占满。修改完成后重启服务:
sudo systemctl daemon-reload sudo systemctl restart docker # 查看配置是否生效 docker info | grep -A 3 "Registry Mirrors"
三、配套使用示例与练习题
1. 实用示例:运行一个Web服务
下面用Nginx演示容器的完整生命周期操作,包括后台运行、端口映射和文件挂载:
# 拉取Nginx镜像 docker pull nginx:stable # 后台运行容器,把宿主机8080端口映射到容器80端口 docker run -d --name my-nginx -p 8080:80 nginx:stable # 查看容器状态和日志 docker ps docker logs my-nginx # 进入容器内部查看 docker exec -it my-nginx bash # 停止并删除容器 docker stop my-nginx docker rm my-nginx
端口映射时要注意,如果宿主机的8080端口已被占用,容器会启动失败,可以用ss -tlnp | grep 8080提前检查端口占用情况。另外防火墙放行也不能忘:
sudo firewall-cmd --permanent --add-port=8080/tcp sudo firewall-cmd --reload
2. 练习题推荐
掌握Docker的关键在于动手练习,以下几道题目由浅入深,适合初学者巩固知识:
- 练习一:拉取
alpine镜像,运行一个容器并输出“Hello Docker”,完成后用docker images和docker ps -a观察镜像与容器的关系。 - 练习二:运行一个MySQL 8容器,通过环境变量设置root密码,并用宿主机的客户端工具连接验证。
- 练习三:使用数据卷持久化MySQL的数据目录,删除容器后重新创建,验证数据是否还在。
- 练习四:编写一个简单的Dockerfile,把自己的静态网页打包成镜像并对外提供服务。
- 练习五:用docker compose一键启动一个包含Nginx和PHP-FPM的小型站点。
这些练习覆盖了镜像、容器、网络、存储四大核心概念,全部做完基本就能独立完成常规的容器化部署任务了。
四、常见问题与注意事项
1. 启动报错Failed to start docker.service
这是最常见的报错之一,排查思路是先看详细日志:
sudo journalctl -u docker.service -n 50 --no-pager
常见原因有三个:一是daemon.json文件格式写错,多了一个逗号或者少了引号都会导致启动失败,可以用cat /etc/docker/daemon.json逐字检查;二是内核模块没有加载,执行sudo modprobe overlay br_netfilter后重试;三是磁盘空间不足,用df -h检查根分区和/var/lib/docker所在分区。
2. 拉取镜像超时或被拒绝
遇到timeout或toomanyrequests错误,说明加速器配置未生效或加速节点不可用。可以先换一个加速器地址再试,也可以直接测试加速器连通性:
curl -I https://docker.m.daocloud.io/v2/
返回200或401状态码都属正常,说明节点可用。如果返回超时,就需要更换其他加速地址。
3. 其他注意事项
第一,/var/lib/docker目录会随着镜像和容器数量增长而变大,规划磁盘时建议单独分区或挂载大容量磁盘。第二,定期清理无用的镜像和停止的容器,命令是docker system prune,但执行前务必确认没有需要保留的资源,这个命令默认会删除所有已停止的容器。第三,SELinux在AlmaLinux 9上默认是Enforcing模式,绝大多数情况下Docker可以与之共存,但如果遇到奇怪的权限问题,可以临时setenforce 0测试是否是SELinux引起,定位后再针对性调整策略而不是长期关闭。
到这里,从安装、配置到实战练习和问题排查的完整流程就介绍完了。Docker的学习重在实践,建议按照文中的练习题逐一动手操作,遇到问题先看日志再查配置,绝大多数故障都能快速定位解决。
AlmaLinux 9Docker安装Docker配置修改时间:2026-09-08 23:19:08