深色模式
Docker 安装与镜像拉取构建
摘要:本文完成 Docker 引擎的安装与开机自启配置,讲解国内网络下如何配置镜像加速,并把镜像的拉取、查看、打标签、构建和清理全流程跑一遍。命令均可直接复制执行。
适用环境
- Linux 主机(Ubuntu 22.04 / AlmaLinux 9 / Rocky Linux 9)
- 具备 sudo 权限
- 可访问公网(或至少有内网镜像仓库)
操作步骤
一、安装 Docker 引擎(Ubuntu)
bash
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
RHEL 系(AlmaLinux / Rocky)改用 dnf:
bash
sudo dnf install -y dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin1
2
3
2
3
二、启动并允许普通用户使用
bash
sudo systemctl enable --now docker
sudo usermod -aG docker $USER # 需重新登录生效
docker version1
2
3
2
3
三、配置镜像加速(可选,改善拉取速度)
bash
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<'EOF'
{
"registry-mirrors": ["https://docker.m.daocloud.io"],
"log-driver": "json-file",
"log-opts": { "max-size": "100m", "max-file": "3" }
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
注意
daemon.json 必须是合法 JSON,多写逗号会导致 Docker 启动失败。改完务必 systemctl status docker 确认。
四、镜像基本操作
bash
docker pull nginx:1.27-alpine # 拉取指定版本,不要拉 latest
docker images # 查看本地镜像
docker inspect nginx:1.27-alpine # 看镜像详情
docker tag nginx:1.27-alpine myrepo/nginx:1.27-alpine
docker login myrepo.example.com # 登录私有仓库
docker push myrepo/nginx:1.27-alpine # 推送1
2
3
4
5
6
2
3
4
5
6
五、从容器反向生成一个镜像(临时调试用)
bash
docker run -it --name tmp nginx:1.27-alpine sh
# 在容器内改动后退出,提交为新镜像
docker commit tmp myrepo/nginx:debug1
2
3
2
3
注意
docker commit 产生的是不可复现的「黑盒镜像」,生产环境请一律用 Dockerfile 构建。
六、清理磁盘
bash
docker image prune -a # 删除无容器引用的镜像
docker system df # 查看 Docker 占用
docker system prune -a # 清理镜像+容器+网络+构建缓存1
2
3
2
3
危险
docker system prune -a 会删除所有未被运行容器使用的镜像,且不可恢复。生产机执行前先确认没有离线业务依赖本地镜像。
验证
- [ ]
docker version能同时看到 Client 和 Server 版本 - [ ] 非 root 用户不加 sudo 可执行
docker ps - [ ]
docker run hello-world输出欢迎信息 - [ ]
docker images能看到刚拉取的 nginx 镜像
常见坑
Got permission denied while trying to connect to the Docker daemon socket:当前用户不在 docker 组,执行sudo usermod -aG docker $USER后必须重新登录,仅重开终端不够。- 镜像拉取超时:未配加速器或 DNS 异常,检查
/etc/docker/daemon.json与/etc/resolv.conf。 - 磁盘被撑爆:容器日志默认不限制大小,应在
daemon.json配log-opts限制(见上文)。 no space left on device:/var/lib/docker所在分区满了,用docker system df定位后清理。