docker系列(二)————安装docker与基础命令

开端

这篇文章基于CentOS Stream(或类似国产系统,如统信UOS/Kylin)和Ubuntu 24.04 LTS,提供Docker的安装指南和基础命令。步骤经过2025年最新官方文档验证(Docker Engine 29.1+)。如果你是新手,放心跟随;CentOS部分兼容旧版,但推荐使用dnf(CentOS 8+已转向Stream,用dnf替换yum)。Ubuntu部分新增,以覆盖更多用户。

安装前注意:从CentOS 8+开始,默认安装podman(Docker替代品),需卸载以避免冲突。Ubuntu也可能有旧版Docker或podman-docker。生产环境勿关闭防火墙;使用ufw/firewalld时,需特殊配置以防端口暴露。

0. 卸载旧版/冲突包(所有系统通用,必做)

先移除旧Docker或podman,以避免“docker.service not found”等错误。

CentOS Stream

1
2
3
sudo dnf remove -y podman buildah docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
# 如果使用yum(旧版CentOS):sudo yum erase -y podman buildah docker ...
sudo rm -rf /var/lib/docker /var/lib/containerd # 可选:清理数据(备份先)

Ubuntu 24.04

1
2
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove -y $pkg; done
sudo rm -rf /var/lib/docker /var/lib/containerd # 可选:清理数据

1. 安装Docker依赖环境

CentOS Stream

1
2
sudo dnf install -y dnf-plugins-core device-mapper-persistent-data lvm2
# 旧版CentOS用yum:sudo yum install -y yum-utils device-mapper-persistent-data lvm2

Ubuntu 24.04

1
2
sudo apt update
sudo apt install -y ca-certificates curl

2. 配置Docker CE yum/apt源

推荐官方源(稳定最新)。可选阿里云源(国内加速)。

CentOS Stream(官方源)

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

阿里云源(备用):

1
2
sudo dnf config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 或yum-config-manager(旧版)

查看源文件:

1
2
cd /etc/yum.repos.d  # 或 /etc/dnf.repos.d
ls | grep docker-ce.repo

Ubuntu 24.04(官方源)

1
2
3
4
5
6
7
8
9
10
11
12
13
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update

阿里云源(备用,需调整为Ubuntu):

1
2
3
4
5
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update

3. 安装Docker CE

CentOS Stream

1
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

如果包无匹配:

  • 查看可用版本:sudo dnf list docker-ce –showduplicates | sort -r
  • 安装指定:sudo dnf install -y docker-ce-

查看包信息:dnf info docker-ce

Ubuntu 24.04

1
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

指定版本:

  • 查看:apt list –all-versions docker-ce
  • 安装:VERSION_STRING=5:29.1.3-1ubuntu.24.04noble; sudo apt install docker-ce=$VERSION_STRING …

启动并检查:

1
2
sudo systemctl start docker
sudo systemctl status docker # 应为active

4. 开启网络转发功能

Docker默认自动开启(/proc/sys/net/ipv4/ip_forward=1)。验证:

1
cat /proc/sys/net/ipv4/ip_forward  # 应为1

手动开启(如果为0):

1
2
3
sudo sysctl -w net.ipv4.ip_forward=1
# 永久:sudo vim /etc/sysctl.conf 添加 net.ipv4.ip_forward=1
sudo sysctl -p

如果报错:

1
sudo modprobe ip_tables  # 加载模块

5. 防火墙配置(生产推荐勿关闭)

关闭防火墙仅限测试;生产用规则允许端口。Docker会绕过ufw/firewalld,需特殊配置。

CentOS Stream(firewalld)

1
2
3
4
5
# 测试关闭:sudo systemctl stop firewalld && sudo systemctl disable firewalld
# 生产:sudo firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp
sudo firewall-cmd --reload
sudo systemctl restart docker # 重启Docker以应用
iptables -nL # 检查规则(Docker添加DOCKER链)

Ubuntu 24.04(ufw)

1
2
3
4
5
6
7
8
9
# 测试关闭:sudo ufw disable
# 生产:sudo apt install ufw-docker # 安装ufw-docker工具
sudo ufw-docker install
sudo ufw allow OpenSSH # 允许SSH
sudo ufw-docker allow nginx 80 # 示例:允许容器端口
sudo ufw enable
sudo ufw status
sudo systemctl restart docker
# 注意:用iptables-legacy如果nft冲突:sudo update-alternatives --set iptables /usr/sbin/iptables-legacy

6. 启动服务并设置开机自启

1
2
sudo systemctl start docker && sudo systemctl enable docker
sudo docker run hello-world # 验证安装

7. 后置配置(推荐)

  • 非root用户运行Docker:

    1
    2
    3
    sudo usermod -aG docker $USER
    newgrp docker # 或注销重登录
    docker run hello-world # 测试无sudo
  • IPv6支持(可选):编辑/etc/docker/daemon.json 添加 “ipv6”: true,重启Docker。

  • 安全扫描:docker scout cves (用Docker Scout)。

8. 基础命令

(1) 帮助命令

1
2
3
docker version     # 显示Docker详细信息
docker info # 显示Docker系统信息,包括镜像和容器数量
docker --help # Docker帮助手册

(2) 镜像命令

命令 描述 示例
docker images 查看本地镜像 -
docker search nginx 搜索镜像 -
docker pull nginx:alpine 下载镜像(指定tag,默认latest) -
docker rmi nginx:alpine 删除镜像 docker rmi -f $(docker images -q) 删除全部
docker tag nginx:alpine my-nginx:v1 复制并重命名镜像 -
docker commit -a “author” -m “desc” container_id my-image:v1 提交容器为镜像(不推荐,优先用Dockerfile) -
docker build -f Dockerfile -t myapp:v1 . 从Dockerfile构建 -
docker buildx build –platform linux/amd64,arm64 -t myapp:v1 . –push 多平台构建 -
docker save -o image.tar nginx 保存为tar -
docker load -i image.tar 导入tar -
docker image prune -a 清理未用镜像 -

(3) 容器命令

命令 描述 示例
docker run -d -p 80:80 –name my-nginx nginx 启动容器(-d后台,-p端口,–name名字) -it 交互式
docker ps -a 列出所有容器(-a包括停止的) -
docker logs container_id 查看日志 -
docker top container_id 查看进程 -
docker rename old new 重命名容器 -
docker start/restart/stop container_id 启动/重启/停止 -
docker rm -f container_id 删除(-f强制) -
docker kill container_id 杀掉容器 -
docker history image_id 查看镜像历史 -
docker exec -it container_id /bin/bash 进入容器(新终端) docker attach container_id(进入当前终端)
docker cp container_id:/path host_path 拷贝文件(容器↔主机) -
docker compose up -d 用Compose启动(v2集成) -
docker system prune -a –volumes 清理所有未用资源 -

退出容器:exit(停止)或 Ctrl+P+Q(不停止)。

9. 常见故障排除

  1. “docker.service not found”:卸载podman/docker旧版,重装。
  2. “permission denied”:加docker组,非root运行。
  3. GPG/源错误:检查curl URL,用阿里云备用。
  4. 网络失败:检查ip_forward,journalctl -u docker。
  5. UFW绕过:用ufw-docker。
  6. iptables冲突(Ubuntu):切换iptables-legacy。

10. 最后

完善后支持CentOS/Ubuntu,欢迎评论指出错误或建议!下一期:镜像仓库与Compose示例。嘿嘿,bote现在醒了,继续码字。


docker系列(二)————安装docker与基础命令
http://bote798.github.io/2025/01/10/docker系列-二-————安装docker与基础命令/
作者
bote798
发布于
2025年1月10日
更新于
2025年12月24日
许可协议