Skip to content

Docker Engine

Docker Engine 是用于构建和容器化应用程序的开源平台,他提供了:

  • dockerd: Docker 守护进程
  • Docker CLI client: Docker 命令行客户端
  • API: 用于与 Docker 守护进程通信的 API

他是整个 Docker 中最核心的地方,从名字也能够看出来。其中 Docker CLI 使用 API 来与 Docker 守护进程进行通信。而守护进程来创建和管理 Docker 对象(Objects),对象包括映像(images)、容器(containers)、网络(networks)和卷(volumes)。

安装

在 Linux 命令行模式下运行 Docker 的唯一方式就是安装 Docker Engine(他也被称为 Docker CE)。而对于具有桌面环境的更推荐使用Docker Desktop来安装 Docker。

Tips

注意 Linux 的各个发行版都提供了自己封装的 Docker 软件包,这里的安装主要指的是安装 Docker 官方的版本。

Debian

Docker 官方支持 Debian 12 和 Debian 11 的 x86_64、arm64 架构。在安装之前需要首先卸载官方仓库提供的分发版本,这包括:

  • docker.io: 包括 containerd 和 runc
  • docker-compose
  • docker-doc
  • podman-docker

之后添加 Docker 的官方 apt 源:

Bash
# Add Docker's official GPG key:
sudo apt update
# 依赖,不一定需要
# sudo apt install ca-certificates curl
# sudo install -m 0755 -d /etc/apt/keyrings
# 可能需要代理,或者在其他地方下载 gpg 复制到 docker.asc 中
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
# 如果使用的是衍生版本例如 Kail 等,则可能需要替换 /etc/os-release  $VERSION_CODENAME
# 推荐查看下 /etc/apt/source.list.d/docker.list 来核对下
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

之后安装 Docker 包:

Bash
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

安装完成之后运行下面的命令来验证:

Bash
sudo docker run hello-world

Tips

必须使用 sudo 命令运行,这是因为运行 docker 需要 docker 用户组,当前该用户组不包含任何用户因此需要 sudo 来运行。之后可以查看Linux 安装后配置

Debian 下卸载

Bash
sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

# 删除主机上的 images containers volumes
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

# 对于用户自定义的配置文件需要手动参数

Linux安装后配置

Linux 安装后还需要执行一些操作来更好的使用。

非 root 用户管理 Docker

Docker daemon 绑定到 Unix 套接字而不是 TCP 协议,默认情况下使用的 Unix 套接字文件权限是 root 用户,因此其他用户只能通过 sudo 来访问。如果不想使用 sudo 需要创建一个名为 docker 的用户组并将具备 docker 权限的用户添加到该组中来实现。

Bash
sudo groupadd docker

sudo usermod -aG docker $USER

之后执行 docker run hello-world 来检查是否能够正确运行。

Tips

如果在将用户添加到 docker 组之前使用 sudo 运行了 Docker CLI 命令,会看到以下错误:

Bash
WARNING: Error loading config file: /home/user/.docker/config.json - stat /home/user/.docker/config.json: permission denied

他表示~/.docker/目录的权限设置不正确,因为之前使用 sudo 命令,只需要删除他即可

Tips

大多数 Linux 发行版版本库提供的安装包通常会自动帮助我们创建 docker 组,但用户通常依然需要手来添加当前用户到 docker 组

开机启动 Docker 服务

安装后 Docker 服务默认是启动的,但是并不是开机启动。因此需要运行:

Bash
sudo systemctl enable docker.service
# container 运行时
sudo systemctl enable containerd.service

Docker 组件

Docker 中涉及了很多组件,他是我们管理和使用 Docker 的核心:

  • Containers: 容器是主机上的运行进程
  • Storage: 为 Docker 容器提供持久性数据支持
  • Networking: 管理容器之间的网络连接

参考