Ubuntu 22.04 LTS 完整 Docker 环境部署指南:从系统配置到镜像加速

最近在帮团队部署新的开发环境时,发现即便是经验丰富的工程师,在全新系统上配置 Docker 仍然会遇到各种"坑"。特别是当系统刚安装完毕,直接运行 apt install docker.io 时,那个刺眼的 Unable to locate package 错误提示,让不少同事都挠头不已。本文将带你从零开始,在 Ubuntu 22.04 LTS 上完成 Docker 环境的完整部署,不仅解决常见报错,还会深入分析背后的原因,并提供国内开发者最需要的镜像加速方案。

1. 系统准备与环境检查

在开始安装 Docker 之前,我们需要确保系统处于最佳状态。很多安装问题其实源于基础环境配置不当。

首先确认你的 Ubuntu 版本是否为 22.04 LTS:

lsb_release -a

输出应该显示:

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04 LTS
Release:        22.04
Codename:       jammy

接下来,更新现有的软件包列表并升级已安装的软件:

sudo apt update && sudo apt upgrade -y

注意:这一步可能会花费较长时间,取决于你的网络速度和系统更新情况。建议在稳定的网络环境下执行。

检查系统架构(Docker 支持 x86_64/amd64、arm64、s390x 等架构):

uname -m

对于大多数现代电脑,应该显示 x86_64amd64

2. 软件源配置与优化

Unable to locate package 错误的根本原因是本地软件包索引没有正确更新或配置。我们需要确保软件源配置正确,特别是对于国内用户,使用国内镜像源可以大幅提升下载速度。

2.1 备份原有源列表

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

2.2 配置国内镜像源

对于 Ubuntu 22.04,推荐使用阿里云或清华大学的镜像源。以下是替换为阿里云镜像源的方法:

sudo sed -i 's|http://.*archive.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list
sudo sed -i 's|http://.*security.ubuntu.com|https://mirrors.aliyun.com|g' /etc/apt/sources.list

或者使用清华源:

sudo sed -i 's|http://.*archive.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list
sudo sed -i 's|http://.*security.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list

2.3 更新软件包索引

这是解决 Unable to locate package 的关键步骤:

sudo apt update

这个命令会从配置的镜像源下载最新的软件包列表,通常需要几分钟时间。完成后,系统就能正确识别 docker.io 等软件包了。

3. Docker 安装方案选择与实施

Ubuntu 上有两种主要的 Docker 安装方式:Ubuntu 官方仓库的 docker.io 和 Docker 官方的 docker-ce。我们来分析两者的区别:

特性docker.iodocker-ce
维护方Ubuntu 团队Docker 官方
更新频率较低较高
版本较旧最新
稳定性较高
适合场景生产环境开发环境

3.1 安装 docker.io(Ubuntu 仓库版本)

这是最简单的安装方式,适合大多数不需要最新功能的用户:

sudo apt install docker.io -y

安装完成后,检查 Docker 版本:

docker --version

输出类似:

Docker version 20.10.12, build 20.10.12-0ubuntu2~22.04.1

3.2 安装 docker-ce(Docker 官方版本)

如果你需要最新功能,可以安装 Docker 官方版本。首先需要添加 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

然后添加 Docker 官方仓库:

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 update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y

验证安装:

docker --version

输出应该显示较新的版本号,如:

Docker version 24.0.2, build cb74dfc

4. 安装后配置与优化

安装完成后,还需要进行一些必要的配置才能获得最佳体验。

4.1 用户组配置

默认情况下,运行 Docker 命令需要 sudo 权限。为了避免每次都要输入密码,可以将当前用户加入 docker 组:

sudo usermod -aG docker $USER
newgrp docker

提示:执行 newgrp docker 后可能需要重新登录才能使更改生效。

4.2 国内镜像加速

对于国内用户,从 Docker Hub 拉取镜像速度可能很慢。可以配置国内镜像加速器。

创建或修改 /etc/docker/daemon.json 文件:

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "https://mirror.baidubce.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}
EOF

重启 Docker 服务使配置生效:

sudo systemctl restart docker

验证配置是否生效:

docker info | grep Mirrors -A 3

4.3 服务管理

Docker 安装后会自动启动并启用开机自启。你可以手动管理 Docker 服务状态:

# 查看状态
sudo systemctl status docker

# 启动服务
sudo systemctl start docker

# 停止服务
sudo systemctl stop docker

# 重启服务
sudo systemctl restart docker

# 设置开机自启
sudo systemctl enable docker

5. 验证与基本使用

现在,Docker 应该已经正确安装并配置好了。让我们运行一个测试容器来验证:

docker run hello-world

如果一切正常,你会看到类似下面的输出:

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

5.1 常用 Docker 命令速查

以下是一些最常用的 Docker 命令:

  • 镜像相关

    # 搜索镜像
    docker search ubuntu
    
    # 拉取镜像
    docker pull ubuntu:22.04
    
    # 列出本地镜像
    docker images
    
    # 删除镜像
    docker rmi <image_id>
    
  • 容器相关

    # 运行容器
    docker run -it ubuntu:22.04 bash
    
    # 列出运行中的容器
    docker ps
    
    # 列出所有容器(包括停止的)
    docker ps -a
    
    # 停止容器
    docker stop <container_id>
    
    # 启动已停止的容器
    docker start <container_id>
    
    # 删除容器
    docker rm <container_id>
    

5.2 常见问题排查

如果在安装或使用过程中遇到问题,可以尝试以下排查步骤:

  1. 权限问题

    # 确保当前用户在 docker 组中
    groups
    
    # 如果没有,添加并重新登录
    sudo usermod -aG docker $USER
    
  2. 服务未运行

    # 检查 Docker 服务状态
    sudo systemctl status docker
    
    # 如果未运行,启动服务
    sudo systemctl start docker
    
  3. 网络问题

    # 测试是否能访问 Docker Hub
    curl -I https://hub.docker.com
    
    # 如果超时,可能需要配置代理或检查网络
    
  4. 存储空间不足

    # 检查 Docker 磁盘使用情况
    docker system df
    
    # 清理未使用的资源
    docker system prune
    

6. 进阶配置与优化建议

对于生产环境或需要高性能的场景,还需要考虑以下配置。

6.1 日志配置

默认情况下,Docker 容器的日志会无限增长。可以限制日志大小:

sudo tee -a /etc/docker/daemon.json <<-'EOF'
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
EOF

然后重启 Docker 服务:

sudo systemctl restart docker

6.2 存储驱动选择

Docker 支持多种存储驱动,对于 Ubuntu 22.04,推荐使用 overlay2

docker info | grep Storage

如果显示不是 overlay2,可以修改 /etc/docker/daemon.json

{
  "storage-driver": "overlay2"
}

6.3 资源限制

为了防止单个容器占用过多资源,可以设置默认的资源限制:

sudo tee -a /etc/docker/daemon.json <<-'EOF'
{
  "default-ulimits": {
    "nofile": {
      "Name": "nofile",
      "Hard": 65536,
      "Soft": 65536
    }
  }
}
EOF

6.4 安全加固

生产环境中,应该考虑以下安全措施:

  • 定期更新 Docker 和系统
  • 使用非 root 用户运行容器
  • 限制容器的能力(Capabilities)
  • 启用内容信任(Content Trust)
  • 扫描镜像中的漏洞

7. Docker 生态工具推荐

除了 Docker Engine 本身,还有一些周边工具可以提升开发效率:

  • Docker Compose:用于定义和运行多容器应用
  • Portainer:提供图形化管理界面
  • Watchtower:自动更新运行中的容器
  • Trivy:容器镜像漏洞扫描器
  • LazyDocker:终端中的 Docker 管理工具

安装 Docker Compose(已包含在 docker-ce 安装中):

docker compose version

如果未安装,可以单独安装:

sudo apt install docker-compose-plugin -y

在团队协作中,我们通常会遇到各种环境配置问题。有一次新同事加入,花了两天时间都没能正确安装 Docker,最后发现是因为公司网络对某些域名做了限制。从那以后,我们就建立了内部的环境配置文档,并设置了本地镜像缓存。这种经验告诉我,看似简单的环境配置,实际上需要考虑很多细节

更多推荐