Ubuntu 安装 Docker 详细步骤

以下记录一下在 Ubuntu 22.0.4上安装docker,并进行一些配置。

一、官方推荐安装步骤

1. 卸载旧版本(如有)

sudo apt-get remove docker docker-engine docker.io containerd runc

2. 更新系统并安装依赖

sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release -y

3. 添加 Docker 官方 GPG 密钥

# 创建 keyrings 目录
sudo mkdir -p /etc/apt/keyrings

# 下载并添加 GPG 密钥
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

4. 设置 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

# 更新 apt 包索引
sudo apt-get update

5. 安装 Docker Engine

# 安装最新版本
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y

# 或者安装特定版本
# 查看可用版本
apt-cache madison docker-ce

# 安装指定版本(例如 24.0.7)
# sudo apt-get install docker-ce=5:24.0.7-1~ubuntu.22.04~jammy docker-ce-cli=5:24.0.7-1~ubuntu.22.04~jammy containerd.io docker-compose-plugin -y

二、安装后配置

1. 启动 Docker 并设置开机自启

# 启动 Docker 服务
sudo systemctl start docker

# 设置开机自启
sudo systemctl enable docker

# 查看 Docker 状态
sudo systemctl status docker

2. 将当前用户加入 docker 组(避免每次使用 sudo)

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

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

# 更新用户组(需要重新登录生效)
newgrp docker

# 或者直接登出再登录

3. 验证安装

# 运行 hello-world 测试
docker run hello-world

# 查看 Docker 版本
docker --version
docker-compose --version

# 查看详细信息
docker info

三、配置镜像加速器

在拉取镜像的时候,因为墙的问题,会拉取失败,如下所示:

$ docker pull nginx
Using default tag: latest
Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded

需要修改daemon.json,可以使用如下命令:

# 创建配置文件目录
sudo mkdir -p /etc/docker

# 配置镜像加速器
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com",
    "https://registry.docker-cn.com"
  ],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF

# 重启 Docker
sudo systemctl daemon-reload
sudo systemctl restart docker

查看配置:

$ cat /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker-0.unsee.tech",
    "https://docker.m.daocloud.io"
  ],
  "live-restore": true,
  "features": { "buildkit": true }
}

或者使用这个来看:

# 查看所有配置
docker info

# 查看特定配置
docker info --format '{{json .RegistryConfig}}' | jq .
docker info --format '{{json .LoggingDriver}}'

# 查看存储驱动
docker info --format '{{.Driver}}'

网上有说,去使用阿里云的个人镜像加速器,亲测无效。但可以参考修改的步骤:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

#依然会报错:
$ docker pull docker.mirrors.ustc.edu.cn/library/nginx:latest
Error response from daemon: Get "https://docker.mirrors.ustc.edu.cn/v2/": dial tcp: lookup docker.mirrors.ustc.edu.cn on 114.114.114.114:53: no such host

四、故障排查

1. 权限问题

# 如果提示 "Got permission denied while trying to connect to the Docker daemon socket"
sudo usermod -aG docker $USER
newgrp docker

# 或者直接修改 socket 权限(不推荐)
sudo chmod 666 /var/run/docker.sock

2. 网络问题

# 检查网络配置
sudo systemctl status docker
journalctl -u docker -n 50

# 检查 DNS 配置
cat /etc/resolv.conf

# 临时使用代理(如果需要)
export HTTP_PROXY=http://proxy.example.com:8080
export HTTPS_PROXY=http://proxy.example.com:8080

3. 存储问题

# 查看 Docker 存储信息
docker system df

# 清理空间
docker system prune
docker volume prune

# 修改存储位置(如果需要)
# 1. 停止 Docker
sudo systemctl stop docker
# 2. 移动数据
sudo mv /var/lib/docker /path/to/new/location
# 3. 创建软链接
sudo ln -s /path/to/new/location/docker /var/lib/docker
# 4. 重启 Docker
sudo systemctl start docker

五、卸载 Docker

# 停止所有容器
docker stop $(docker ps -aq)

# 卸载 Docker
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras -y

# 删除数据
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

# 删除配置文件
sudo rm -rf /etc/docker

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注