努力
加油

Ubuntu 20.04在腾讯云环境下安装Docker需要哪些前置配置?

在腾讯云 CVM(云服务器)上跑 Ubuntu 20.04 装 Docker,其实是个非常标准的操作。但作为老鸟,我得提醒你:直接照着网上随便搜的 apt-get install docker.io 或者官方文档一步步走,很容易踩坑,尤其是网络连通性和内核模块加载这块。

下面我把流程拆解一下,重点标出那些“不配置就会报错”的关键点。

1. 基础环境检查与内核模块加载

Ubuntu 20.04 的内核版本通常是 5.4.x,Docker 对 Linux 内核有要求(主要是 cgroups, namespaces, overlayfs 等)。虽然默认内核已经支持大部分功能,但在云环境下,必须确保内核模块被正确加载。

打开终端,执行以下命令检查关键模块是否已加载:

lsmod | grep -E 'overlay|br_netfilter'
  • overlay: 用于存储驱动。如果没看到输出,说明没加载。
  • br_netfilter: 用于网络桥接和 iptables 规则转发。这个在 Kubernetes 或复杂网络场景下特别重要,Docker 默认也依赖它来做端口映射。

如果缺失,手动加载并设置开机自启:

# 加载模块
sudo modprobe overlay
sudo modprobe br_netfilter

# 设置开机自动加载
echo "overlay" | sudo tee /etc/modules-load.d/overlay.conf
echo "br_netfilter" | sudo tee /etc/modules-load.d/br_netfilter.conf

# 为了让 sysctl 参数生效(特别是 br_netfilter),需要设置这些内核参数
cat <<EOF | sudo tee /etc/sysctl.d/docker.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

sudo sysctl --system

注意:net.ipv4.ip_forward = 1 是必须的,否则容器之间的网络通信以及 NAT 转发会出问题。

2. 系统更新与依赖安装

不要跳过这一步,很多新手因为 apt 源缓存问题导致后续下载失败。

sudo apt update
sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release software-properties-common

3. 添加 Docker 官方 GPG 密钥和 APT 源

腾讯云的镜像源虽然快,但 Docker 官方源的软件包版本更新最及时、最稳定。强烈建议直接使用 Docker 官方源,而不是用 Ubuntu 自带的 docker.io 包(那个版本通常很旧,且缺乏最新特性支持)。

步骤如下:

# 1. 添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 2. 设置稳定版仓库
echo 
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu 
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 3. 再次更新索引
sudo apt update

4. 安装 Docker Engine

现在可以正式安装了。推荐安装 docker-ce (Community Edition) 和 containerd.io。

sudo apt install -y docker-ce docker-ce-cli containerd.io

安装完成后,启动服务并设置为开机自启:

sudo systemctl start docker
sudo systemctl enable docker

验证安装:

sudo docker run hello-world

如果能正常打印出欢迎信息,说明基础环境没问题。

5. 【关键】腾讯云特有优化:非 root 用户权限 & 镜像提速

A. 允许非 root 用户使用 Docker

默认情况下,只有 root 用户可以运行 docker 命令。为了方便日常开发,建议创建一个 docker 用户组,并将当前用户加入其中。

# 创建 docker 组(如果不存在)
sudo groupadd docker

# 将当前用户添加到 docker 组
sudo usermod -aG docker $USER

# 重启会话使配置生效(或者直接注销重新登录)
newgrp docker

# 测试
docker ps

B. 配置国内镜像提速器(必做!)

在国内访问 Docker Hub 速度极慢,甚至经常超时。你必须配置镜像提速器。腾讯云提供了自己的镜像提速器地址,当然阿里云、网易等也可以。

以腾讯云为例(具体地址请以腾讯云控制台实时提供的为准):

  1. 编辑 /etc/docker/daemon.json:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://mirror.ccs.tencentyun.com"
  ]
}
EOF
  1. 重启 Docker 服务使配置生效:
sudo systemctl daemon-reload
sudo systemctl restart docker
  1. 验证配置是否生效:
docker info | grep -i mirror

6. 安全组与防火墙注意事项

这是最容易忽略的一点。

  • 腾讯云安全组:如果你要暴露容器的端口(比如 80, 443, 3306 等),必须在腾讯云控制台的“安全组”规则中放行对应端口。仅仅在服务器内部开放端口是没用的,云厂商的网络隔离层会拦截。
  • UFW 防火墙:如果你开启了 ufw,也需要确保放行相应端口。但对于生产环境,建议统一由云平台安全组管理,服务器内部保持最小化开放。

7. 常见问题排查

  • 问题:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

    • 原因:Docker 服务没启动。
    • 解决:sudo systemctl status docker 查看状态,必要时 sudo systemctl start docker。
  • 问题:拉取镜像超时或失败

    • 原因:未配置镜像提速器或网络波动。
    • 解决:检查 /etc/docker/daemon.json 中的 registry-mirrors 是否正确,并确认网络能访问该域名。
  • 问题:权限拒绝 permission denied

    • 原因:当前用户不在 docker 组中。
    • 解决:重新执行 usermod -aG docker $USER 并重新登录。

总结

在腾讯云 Ubuntu 20.04 上装 Docker,核心就是三步:

  1. 内核模块加载(特别是 br_netfilter 和 overlay)。
  2. 使用官方源安装,不要用系统自带的那个旧版本。
  3. 配置镜像提速器,否则你的人生会被等待镜像下载耗尽。

按这个流程走,基本不会翻车。如果遇到其他具体问题,再针对性排查。