安装docker教程

内容纲要

服务器环境

ubuntu 22.04 64位
新加坡

一、在linux系统上先卸载可能存在的docker旧版本

1、卸载Docker相关主程序

  1. docker.io是ubuntu自维护的,比较老旧。
  2. docker-ce是docker官方维护的,Community Edition(社区版)。
  3. docker-ce-cli:命令行工具。containerd.io:底层 “容器引擎”,负责跑容器。
  4. 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 段理解:

  1. deb [arch=…] signed-by=…
    告诉系统:我要添加一个软件源
    自动匹配我的电脑架构(AMD64 / ARM64 都能自动识别)
    使用刚才下载的 docker.gpg 密钥 验证安全性
  2. https://download.docker.com/linux/ubuntu
    这是 Docker 官方软件仓库地址
    系统以后装 Docker、更新 Docker 都从这里下载。
  3. $(lsb_release -cs) stable
    执行命令:lsb_release -cs。可得到当前Ubuntu系统的版本代号
    如 jammy=Ubuntu 22.04、noble=Ubuntu 24.04
    选择 稳定版(stable) Docker
  4. | 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、开一台阿里或者腾讯的境外服务器,拉取国外镜像,然后打包保存到本地,再从本地上传到部署的目标服务器,在机器上加载出镜像。


作者:甘虎文

发表评论

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

滚动至顶部