服务器环境
ubuntu 22.04 64位
新加坡
一、在linux系统上先卸载可能存在的docker旧版本
1、卸载Docker相关主程序
- docker.io是ubuntu自维护的,比较老旧。
- docker-ce是docker官方维护的,Community Edition(社区版)。
- docker-ce-cli:命令行工具。containerd.io:底层 “容器引擎”,负责跑容器。
- docker-compose-plugin:上层 “编排工具”,负责管多容器。
sudo apt remove -y docker.io docker-ce docker-ce-cli containerd.io docker-compose-plugin
2、自动删掉Docker遗留的所有无用依赖
sudo apt autoremove -y
3、手动删除Docker残留的配置、镜像、容器数据目录
sudo rm -rf /var/lib/docker /etc/docker
二、配置安装docker的镜像源地址
1、创建秘钥文件夹
这个文件夹是 Ubuntu/Debian 系统专门用来存放 “软件源安全密钥” 的地方
sudo mkdir -p /etc/apt/keyrings
2、把 Docker 的官方安全密钥下载下来,放进这个文件夹里
作用:
让系统信任 Docker 官方软件源
安装 Docker 时不会报 “不安全、未认证” 的错误
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
3、给系统添加 Docker 的官方软件源
拆成 4 段理解:
- deb [arch=…] signed-by=…
告诉系统:我要添加一个软件源
自动匹配我的电脑架构(AMD64 / ARM64 都能自动识别)
使用刚才下载的 docker.gpg 密钥 验证安全性 - https://download.docker.com/linux/ubuntu
这是 Docker 官方软件仓库地址
系统以后装 Docker、更新 Docker 都从这里下载。 - $(lsb_release -cs) stable
执行命令:lsb_release -cs。可得到当前Ubuntu系统的版本代号
如 jammy=Ubuntu 22.04、noble=Ubuntu 24.04
选择 稳定版(stable) Docker - | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
把上面的软件源信息写入文件
文件路径:/etc/apt/sources.list.d/docker.list
5、> /dev/null
不输出多余内容,安静执行
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
3.1、配置国内源(可跳过)
如果配置了官方源之后,apt update失败,则换成国内源进行添加下载地址
注意国内源也只是把国外的docker提前同步到国内,并不是重新开发的新版本,所以官方安全密钥也是需要下载的。
移除之前配置的、导致报错的源文件(如果存在)
sudo rm /etc/apt/sources.list.d/docker.list
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
3.2、终极办法,离线下载(可跳过)
网络限制非常严格,连镜像源都配不好,手动下载 .deb 包来安装
正确的下载地址是:
https://download.docker.com/linux/ubuntu/dists/jammy/pool/stable/amd64/
下载这四个核心文件:
containerd.io_…amd64.deb (这是基础环境,必须先装)
docker-ce-cli…amd64.deb (命令行工具)
docker-ce…amd64.deb (Docker 本体)
docker-compose-plugin…_amd64.deb 容器管理插件
下载后,scp上传到服务器,(需修改星号为全名)执行:
scp containerd.io_*.deb docker-ce-cli_*.deb docker-ce_*.deb docker-compose-plugin*.deb root@你的服务器IP:/root/
使用命令 sudo dpkg -i <文件名>.deb 进行安装(需修改星号为全名)
sudo dpkg -i containerd.io*.deb docker-ce-cli*.deb docker-ce*.deb docker-compose-plugin*.deb
4、同步软件源
添加 / 修改 / 删除 软件源之后,必须执行一次 <code>apt update</code>,把下载地址,同步到本地
apt update
三、开始安装docker
1、安装四个最新版本的软件
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
1.1、安装四个指定版本的软件(可跳过)
查看这 4 个软件当前系统支持的所有可安装的版本列表(可跳过,非必须)
apt list -a docker-ce docker-ce-cli containerd.io docker-compose-plugin
在linux系统上安装docker(为了固定版本),将apt list -a docker-ce命令返回的结果,掐头去尾,复制主体,作为版本号信息进行安装
比如:
containerd.io/jammy,now 2.2.3-1~ubuntu.22.04~jammy amd64 [installed]
containerd.io/jammy 2.2.2-1~ubuntu.22.04~jammy amd64
可以设置成:
sudo apt install -y \
docker-ce=5:26.1.0-1~ubuntu.22.04~jammy \
docker-ce-cli=5:26.1.0-1~ubuntu.22.04~jammy \
containerd.io=1.6.31-1 \
docker-compose-plugin=2.27.0-1~ubuntu.22.04~jammy
2、锁定docker版本,禁止更新、禁止卸载
sudo:管理员权限
apt-mark hold:锁定版本,禁止更新、禁止卸载
docker-ce docker-ce-cli containerd.io docker-compose-plugin:锁定这4个 Docker 核心包
为什么要加这一句?(非常重要)
Docker 自动更新会导致容器全部重启、业务中断
服务器如果自动更新 Docker,所有正在运行的容器会全部重启,网站 / 服务会瞬间掉线。
新版本 Docker 可能不兼容你的环境
很多生产环境、脚本、K8s 都对 Docker 版本有严格要求,一升级就崩。
apt upgrade 系统更新时,会跳过 Docker
以后更新系统其他包,Docker 纹丝不动。
sudo apt-mark hold docker-ce docker-ce-cli containerd.io docker-compose-plugin
3、查看已锁定的包(验证)
apt-mark showhold
4、确认版本号
docker --version
四、设置日志限制
1、编辑 Docker 配置文件
nano /etc/docker/daemon.json
2、粘贴下面的配置
max-size: "10m":每个日志文件最大 10MB
max-file: "3":每个容器最多保留 3 个日志文件
也就是说,每个容器的日志上限就是 30MB,完全不会吃硬盘。
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
3、重启 Docker 生效
systemctl restart docker
4、检查日志限制生效
命令返回Logging Driver: json-file
说明全局默认日志驱动已经变成了 json-file
docker info | grep -i logging
五、问题与方法
国外的镜像拉取超时
1、配置国内的镜像源。
2、开一台阿里或者腾讯的境外服务器,拉取国外镜像,然后打包保存到本地,再从本地上传到部署的目标服务器,在机器上加载出镜像。
作者:甘虎文