Docker命令在 CentOS 上的差异与注意点
一 系统层面命令差异
- 包管理与安装命令不同:在 CentOS 上安装 Docker 使用 yum/dnf 与官方仓库,例如:sudo yum install -y yum-utils device-mapper-persistent-data lvm2,随后 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo,再安装 sudo yum install -y docker-ce docker-ce-cli containerd.io;而在 Ubuntu 上使用的是 apt 系列命令。这是最常见的“命令不同”。
- 服务管理命令相同:无论 CentOS 还是 Ubuntu,Docker 都作为 systemd 服务管理,常用命令为 sudo systemctl start docker、sudo systemctl enable docker、sudo systemctl status docker。
- 容器内的包管理不同:基于 CentOS 的容器应使用 yum 安装软件;基于 Ubuntu 的容器使用 apt-get。这会影响你在 docker exec -it <容器> 之后执行的安装命令。
二 Docker 行为与命令使用上的差异
- 前台进程与 -it 的必要性:官方 centos 镜像的默认命令是 /bin/bash。直接执行 docker run centos 会因为没有终端输入而立即退出,因此通常需要加上 -it 进入交互式终端;而 nginx 镜像的默认命令以前台方式运行(nginx -g ‘daemon off;’),不加 -it 也能保持运行。
- 让 CentOS 容器后台保持运行:若希望容器在后台持续运行,可使用前台进程,例如 docker run -d centos tail -f /dev/null,随后再 docker exec -it bash 进入。
- 进入容器的常用方式:优先使用 docker exec -it <容器> /bin/bash 进入已运行容器;也可用 docker attach,但 attach 会直接附着到容器的主进程,退出可能导致容器停止,使用上不及 exec 灵活。
三 版本与替代方案带来的差异
- 版本与默认存储驱动:在 CentOS 7/8/9 的演进中,Docker 版本与默认存储驱动逐步升级,常见为 overlay2;同时 CentOS 9 原生更强调 Podman 生态,但 Docker 命令在 CLI 层面保持兼容。
- 安装包拆分:现代 Docker 在 CentOS 上通常拆分为 docker-ce / docker-ce-cli / containerd.io 三个包,这是与一些更早期或非官方打包方式的主要差异点。
- 系统差异导致的命令习惯:在 CentOS 主机上,新建的非 root 用户默认可能没有 sudo 权限,需要先在 /etc/sudoers 中授权;这与 Ubuntu 常见做法不同,会影响你执行 docker 命令时的权限获取方式。
四 常见命令对照与示例
| 场景 |
CentOS 主机 |
容器为 CentOS |
容器为 Ubuntu |
| 安装 Docker |
sudo yum install -y docker-ce docker-ce-cli containerd.io |
— |
— |
| 启动/开机自启 |
sudo systemctl start docker;sudo systemctl enable docker |
— |
— |
| 运行交互式 CentOS |
docker run -it centos /bin/bash |
— |
— |
| 让 CentOS 容器后台常驻 |
docker run -d centos tail -f /dev/null |
— |
— |
| 容器内安装软件 |
— |
yum install -y <包> |
apt-get update && apt-get install -y <包> |
| 进入运行中容器 |
— |
docker exec -it /bin/bash |
docker exec -it /bin/bash |