Ubuntu 系统 Docker 部署详细指南(附shell脚本一键部署↓)
·
Docker 是一种开源的容器化平台,用于构建、打包、分发和运行应用程序。它将应用程序及其依赖项(如库、运行时环境、系统工具等)打包到一个独立的容器中,确保应用程序在任何环境中都能以一致的方式运行。
核心概念
- Docker 镜像
- 镜像是一个轻量、可执行的独立软件包,包含运行容器所需的文件系统内容、环境变量、程序配置等。
- 采用分层架构,由多个只读层叠加而成,每一层对应一次构建操作(如
RUN、COPY)。 - 支持多阶段构建,可显著减小镜像体积。例如,使用
golang:1.17 AS builder构建应用程序后,仅将二进制文件复制到轻量级镜像(如alpine:latest)中。
- Docker 容器
- 容器是镜像的运行实例,提供独立、轻量级的运行环境,包含应用程序及其所有依赖项。
- 基于镜像创建,具有可写层,支持隔离性(通过
Namespace)和资源限制(通过Cgroups)。 - 生命周期短暂,可被快速创建、启动、停止和删除。
- Docker 仓库
- 存储和分享 Docker 镜像的地方,开发者可从仓库中获取镜像,并将自己的镜像推送到仓库中。
- 分为公共仓库(如 Docker Hub)和私有仓库。
底层原理
- Namespace
- 实现资源隔离,为容器创建独立的系统资源视图,包括进程、网络、文件系统、用户等。
- 例如,
PID Namespace隔离进程 ID,Network Namespace隔离网络栈。
- Cgroups
- 实现资源限制与管理,用于限制和监控容器的资源使用,包括 CPU、内存、磁盘 I/O 和网络带宽。
- 防止容器耗尽系统资源,影响其他容器或主机系统的正常运行。
- UnionFS(联合文件系统)
- 允许将多个只读镜像层叠加,形成一个统一的文件系统视图。
- 容器启动时,在镜像层之上添加可写层,实现写时复制(Copy-on-Write),保证镜像层只读且容器的文件变更隔离。
优势与应用场景
- 优势
- 一致性和可移植性:容器在任何支持 Docker 的平台上都能运行,确保开发和生产环境的一致性。
- 轻量级和高效性:容器共享宿主机的操作系统内核,资源占用少,启动速度快。
- 快速部署和交付:减少开发、测试和生产环境之间的差异,提高应用程序的交付速度。
- 应用场景
- 微服务架构:将应用程序拆分为多个独立的微服务,每个微服务运行在一个容器中。
- 持续集成/持续部署(CI/CD):通过 Docker 实现应用程序的快速构建、测试和部署。
- 多环境部署:确保应用程序在不同的环境中(如开发、测试、生产)以相同的方式运行。
一、Docker 安装
1. 安装依赖包
sudo apt update
sudo apt install -y apt-transport-https ca-certificates gnupg software-properties-common
2. 添加阿里云 GPG 密钥
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
3. 配置阿里云 Docker 仓库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
说明:
$(dpkg --print-architecture):自动获取当前系统架构。$(lsb_release -cs):自动获取当前 Ubuntu 版本代号。
4. 安装 Docker 引擎
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
5. 验证安装
sudo docker --version
![]()
二、配置优化
1. 配置国内镜像加速器
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors" : [
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc",
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://dockerproxy.com",
"https://gst6rzl9.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"http://mirrors.ustc.edu.cn/",
"https://mirrors.tuna.tsinghua.edu.cn/",
"http://mirrors.sohu.com/"
],
"insecure-registries" : [
"registry.docker-cn.com",
"docker.mirrors.ustc.edu.cn"
],
"debug": true,
"experimental": false
}
EOF
配置说明:
registry-mirrors:多个国内镜像源,Docker 会自动选择最快的一个。log-driver和log-opts:限制单个容器日志大小为 10MB,最多保留 3 个日志文件,防止磁盘占满。storage-driver:推荐使用overlay2,性能更好。dns:设置公共 DNS,避免容器内网络解析问题。
2. 配置用户组(免 sudo 使用 Docker)
默认情况下,使用 Docker 需要 sudo 权限。可通过将用户加入 docker 用户组实现免密码操作。
sudo groupadd docker # 创建 docker 组
sudo usermod -aG docker $USER # 将当前用户加入 docker 组
newgrp docker # 刷新组权限,立即生效(无需重新登录)
3. 启动并启用 Docker 服务
sudo systemctl daemon-reload
sudo systemctl enable docker # 开机自启
sudo systemctl start docker # 启动服务
检查服务状态:
sudo systemctl status docker

三、环境验证
1. 基础功能测试
运行官方 hello-world 镜像,验证 Docker 是否正常工作。
docker run --rm hello-world
2. 测试镜像拉取速度
拉取一个常用镜像(如 Nginx)
time docker pull nginx:latest
3. 资源限制测试
创建一个受资源限制的测试容器,验证 Docker 的资源控制能力。
docker run -it --rm --name stress-test alpine:latest \
sh -c "apk add --no-cache stress-ng && stress-ng --cpu 4 --io 4 --vm 2 --vm-bytes 128M --timeout 60s"
另开一个窗口执行命令,看监控资源使用情况:
docker stats stress-test

测试结束后删除容器:
docker rm -f stress-test
四、维护与安全建议
日志轮转配置(防止日志占满磁盘)
Docker 容器日志可能持续增长,建议配置日志轮转。
创建日志轮转配置文件:
sudo tee /etc/logrotate.d/docker <<-'EOF'
/var/lib/docker/containers/*/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
EOF
说明:
- 每天轮转一次日志。
- 最多保留 7 个备份。
copytruncate:避免重启容器以释放文件句柄。
五、Shell 脚本自动化安装
#!/bin/bash
# Ubuntu 系统全自动安装 Docker 脚本
# 支持 Ubuntu 20.04/22.04/24.04
# 作者:LoneEon
set -e # 遇到错误立即退出
echo "🚀 开始安装 Docker 环境..."
# 检查是否为 root 用户,避免权限问题
if [ "$(id -u)" -ne 0 ]; then
echo "❌ 请使用 root 用户运行此脚本,或使用 sudo 执行。"
exit 1
fi
# 获取当前登录用户名(用于加入 docker 组)
CURRENT_USER=$(logname 2>/dev/null || echo $SUDO_USER)
if [ -z "$CURRENT_USER" ] || [ "$CURRENT_USER" = "root" ]; then
echo "⚠️ 当前为 root 用户,建议切换为普通用户后运行脚本。"
echo "💡 若继续,请确保后续手动将用户加入 docker 组。"
read -p "是否继续?[y/N]: " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
CURRENT_USER="root"
fi
# 1. 安装依赖
echo "🔧 安装依赖包..."
apt update -qq > /dev/null
apt install -y apt-transport-https ca-certificates gnupg software-properties-common > /dev/null
# 2. 添加阿里云 GPG 密钥
echo "🔐 添加阿里云 GPG 密钥..."
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 3. 添加阿里云 Docker 仓库
echo "📦 配置阿里云 Docker 仓库..."
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
# 4. 安装 Docker
echo "📥 安装 Docker 引擎..."
apt update -qq > /dev/null
apt install -y docker-ce docker-ce-cli containerd.io > /dev/null
# 5. 创建 daemon.json 配置文件
echo "⚙️ 配置国内镜像加速与日志策略..."
cat > /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me",
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2",
"dns": ["8.8.8.8", "8.8.4.4"]
}
EOF
# 6. 创建 docker 用户组并添加当前用户
echo "👥 配置用户组,实现免 sudo 使用 Docker..."
groupadd -f docker
usermod -aG docker "$CURRENT_USER"
# 7. 启动并启用 Docker 服务
echo "🔄 启动并设置开机自启 Docker 服务..."
sudo systemctl daemon-reload
sudo systemctl enable docker --now > /dev/null
sudo systemctl restart docker
# 8. 验证安装
echo "✅ 验证 Docker 安装..."
if ! docker --version; then
echo "❌ Docker 安装失败,请检查日志。"
exit 1
fi
# 运行 hello-world 测试
echo "🧪 运行测试容器 hello-world..."
docker run --rm hello-world > /dev/null 2>&1 && echo "🎉 Docker 安装成功!" || {
echo "⚠️ hello-world 测试失败,但 Docker 可能已安装,请检查网络或镜像源。"
}
# 提示用户重新登录以应用组权限
echo
echo "--------------------------------------------------"
echo "✅ Docker 安装完成!"
echo "📌 当前用户 '$CURRENT_USER' 已加入 docker 组。"
echo "💡 请退出终端并重新登录,或执行:"
echo " newgrp docker"
echo " 或重新登录系统以使用 'docker' 命令无需 sudo。"
echo "--------------------------------------------------"
六、常见问题排查
| 问题 | 解决方案 |
|---|---|
Permission denied 错误 |
确保用户已加入 docker 组并执行 newgrp docker |
| 镜像拉取慢 | 检查 /etc/docker/daemon.json 中的 registry-mirrors 是否生效 |
| 服务无法启动 | 查看日志 sudo journalctl -u docker.service |
| 存储驱动错误 | 确保系统支持 overlay2,一般现代内核均支持 |
本文详细介绍了在 Ubuntu 系统上部署 Docker 的完整步骤,涵盖安装、国内镜像加速、用户权限配置、服务管理及环境验证。通过合理的配置优化,可显著提升镜像拉取速度,增强系统稳定性与使用便捷性。方案适用于各类 Ubuntu 环境,为后续容器化应用的部署打下坚实基础。
更多推荐


所有评论(0)