以下记录一下在 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