Ubuntu 22.04 中安装 Docker 容器 ------ 知识点详解
一、引入
在现代软件开发与部署中,环境一致性 是核心挑战。Docker 通过容器化技术,将应用及其依赖打包为轻量、可移植的单元,实现"一次构建,到处运行"。
✅ 本章目标:在 Ubuntu 22.04 上完整部署 Docker,并掌握容器基本操作。
二、Docker 容器技术简介
- 容器(Container):轻量级、隔离的运行环境,共享宿主机内核。
- 镜像(Image) :只读模板,用于创建容器(如
nginx:latest)。 - Docker Engine:核心服务,负责构建、运行和管理容器。
- 优势:快速启动、资源占用低、版本控制、CI/CD 集成友好。
三、在 Ubuntu 22.04 中安装 Docker 及镜像加速器
1. 安装 Docker 引擎
⚠️ 不建议使用
apt install docker.io(版本旧、功能不全)。推荐使用官方仓库安装。
步骤详解:
bash
# 1. 更新系统包索引
sudo apt update
# 2. 安装必要依赖
sudo apt install -y ca-certificates curl gnupg lsb-release
# 3. 添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 4. 设置稳定版仓库
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
# 5. 再次更新包索引
sudo apt update
# 6. 安装 Docker Engine、CLI 和 Containerd
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 7. 验证安装
sudo docker --version
# 输出示例:Docker version 26.1.4, build ...
# 8. 运行 Hello World 测试
sudo docker run hello-world
✅ 成功标志:输出 "Hello from Docker!" 并显示说明信息。
2. 配置镜像加速器(国内必备)
Docker Hub 在国内访问慢,需配置镜像加速器(如阿里云、中科大)。
以阿里云为例:
bash
# 1. 创建或编辑 daemon.json 配置文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://<你的ID>.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
EOF
# 注:替换 <你的ID> 为阿里云容器镜像服务 ID(可免费注册获取)
# 或直接使用中科大镜像(无需账号):
# {
# "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
# }
# 2. 重载配置并重启 Docker 服务
sudo systemctl daemon-reexec
sudo systemctl restart docker
# 3. 验证配置生效
docker info | grep -A 1 "Registry Mirrors"
✅ 输出应包含你配置的镜像地址。
3. 配置用户(避免每次使用 sudo)
默认只有 root 或 docker 组用户可运行 docker 命令。
bash
# 1. 创建 docker 用户组(若不存在)
sudo groupadd docker
# 2. 将当前用户加入 docker 组
sudo usermod -aG docker $USER
# 3. 重新登录或刷新组权限
newgrp docker
# 4. 验证(无需 sudo)
docker run hello-world
🔒 安全提示:将用户加入 docker 组等同于赋予 root 权限,请谨慎授权。
四、Docker 容器的使用
1. 查看本地已安装镜像
bash
# 列出所有本地镜像
docker images
# 示例输出:
# REPOSITORY TAG IMAGE ID CREATED SIZE
# nginx latest abc123def456 2 weeks ago 142MB
2. 查找 Docker 镜像
bash
# 在 Docker Hub 搜索镜像(关键词:nginx)
docker search nginx
# 输出包含:NAME, DESCRIPTION, STARS, OFFICIAL, AUTOMATED
💡 推荐优先选择 OFFICIAL = [OK] 的官方镜像。
3. 拉取镜像
bash
# 拉取最新版 Nginx 镜像
docker pull nginx:latest
# 拉取指定版本
docker pull python:3.10-slim
4. 容器的运行与进入
运行一个交互式容器(前台)
bash
# 启动 Ubuntu 容器并进入 bash
docker run -it ubuntu:22.04 /bin/bash
# -i: 保持 STDIN 打开(交互)
# -t: 分配伪终端
# 退出容器:输入 exit 或 Ctrl+D
后台运行容器(守护式)
bash
# 后台运行 Nginx,并命名容器为 my-nginx
docker run -d --name my-nginx nginx
# -d: 后台运行(detached mode)
# --name: 指定容器名称(便于管理)
进入正在运行的容器
bash
# 方法1:使用 exec(推荐)
docker exec -it my-nginx /bin/bash
# 方法2:使用 attach(会绑定到主进程,慎用)
docker attach my-nginx
# 退出 attach:Ctrl+P, Ctrl+Q(不终止容器)
5. 停止容器
bash
# 停止指定容器(优雅停止,发送 SIGTERM)
docker stop my-nginx
# 强制停止(发送 SIGKILL)
docker kill my-nginx
6. 启动容器
bash
# 启动已停止的容器
docker start my-nginx
# 启动并进入
docker start -ai my-nginx
7. 自启动容器
让容器在 Docker 服务启动时自动运行:
bash
# 设置重启策略为 always
docker run -d --restart=always --name redis redis
# 其他策略:
# --restart=no (默认)
# --restart=on-failure[:max-retries]
# --restart=unless-stopped
✅ 验证:重启系统后,
docker ps应显示该容器正在运行。
8. 删除容器
bash
# 删除已停止的容器
docker rm my-nginx
# 强制删除运行中的容器(先 stop 再 rm 更安全)
docker rm -f my-nginx
# 删除所有已停止的容器
docker container prune
9. 容器的状态
bash
# 查看所有容器(包括停止的)
docker ps -a
# 查看运行中的容器
docker ps
# 查看容器详细信息(JSON 格式)
docker inspect my-nginx
# 查看容器资源使用(CPU、内存等)
docker stats my-nginx
# 按 q 退出
10. 开启容器的端口(端口映射)
将容器内部端口暴露给宿主机:
bash
# 将容器 80 端口映射到宿主机 8080 端口
docker run -d --name web -p 8080:80 nginx
# 访问 http://localhost:8080 即可看到 Nginx 欢迎页
# 多端口映射示例
docker run -d -p 3306:3306 -p 33060:33060 mysql:8.0
📌 语法:
-p <宿主机端口>:<容器端口>
11. 与宿主系统共享目录(挂载卷)
实现宿主机与容器文件系统共享:
bash
# 创建宿主机目录
mkdir -p ~/html
# 写入测试文件
echo "<h1>Hello from Host!</h1>" > ~/html/index.html
# 启动 Nginx,挂载宿主机目录到容器 /usr/share/nginx/html
docker run -d --name web-vol \
-p 8080:80 \
-v ~/html:/usr/share/nginx/html:ro \
nginx
# :ro 表示只读挂载;省略则为读写(rw)
✅ 修改
~/html/index.html,刷新浏览器即可看到变化。
12. 在宿主系统与容器之间复制文件
bash
# 从容器复制文件到宿主机
docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf
# 从宿主机复制文件到容器
echo "custom config" > custom.txt
docker cp custom.txt my-nginx:/tmp/
# 验证
docker exec my-nginx cat /tmp/custom.txt
💡 适用于临时调试,长期使用建议用
-v挂载卷。
13. 容器的监控
实时监控资源
bash
# 监控单个容器
docker stats my-nginx
# 监控所有容器
docker stats
查看日志
bash
# 查看容器完整日志
docker logs my-nginx
# 实时跟踪日志(类似 tail -f)
docker logs -f my-nginx
# 查看最近 10 行
docker logs --tail 10 my-nginx
14. 查看帮助
bash
# 查看全局帮助
docker --help
# 查看子命令帮助(如 run)
docker run --help
# 查看特定选项说明(如 --restart)
docker run --help | grep -A 2 restart
五、小结
| 功能 | 关键命令 |
|---|---|
| 安装 Docker | apt install docker-ce ... |
| 镜像加速 | 配置 /etc/docker/daemon.json |
| 用户免 sudo | sudo usermod -aG docker $USER |
| 运行容器 | docker run -d -p 8080:80 --name web nginx |
| 挂载目录 | -v /host/path:/container/path |
| 端口映射 | -p 8080:80 |
| 文件复制 | docker cp src dest |
| 自启动 | --restart=always |
| 监控 | docker stats, docker logs |
✅ 最佳实践建议:
- 所有生产容器使用
--restart=always- 敏感数据使用 Docker Secrets 或环境变量(
-e)- 日志使用卷挂载或日志驱动(如
json-file,syslog)- 定期清理无用镜像/容器:
docker system prune -a
通过本章学习,您已掌握在 Ubuntu 22.04 上从零部署 Docker 并熟练操作容器的核心技能,为后续部署 AI 服务、Web 应用、数据库等奠定坚实基础。