如何在 Linux 上安装 Docker 和 Docker Compose

Docker 为您提供了在 Linux 系统上构建和运行容器所需的一切。容器类似于轻量级虚拟机。它们允许您创建可移植的应用程序映像,这些映像使用您主机的操作系统内核运行。
您可以在 Debian、Fedora、CentOS 和 Raspbian 平台上使用 Docker。这些分布的导数也将起作用。 Docker 为大多数受支持的平台提供 x86/x64 和 ARM 构建。我们在本指南中使用带有 apt
包管理器的 Debian 系统。可以在 Docker 文档中找到特定于其他发行版的说明。
Docker Compose 允许您构建和运行多个容器的堆栈。您创建一个 YAML 文件来配置应用程序的容器。然后,您可以使用单个命令启动所有容器并将它们链接在一起。 Compose 可帮助您将堆栈的组件分离为单独的容器化服务。
Compose 独立于 Docker 进行分发。在添加 Compose 之前安装 Docker——否则,Compose 将无法运行。
安装 Docker
您可以使用操作系统的包管理器来安装最新的 Docker 版本。您需要添加 Docker 的存储库,更新您的包列表,然后安装 Docker。
Debian/Ubuntu
首先添加安装过程所需的依赖项:
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
接下来,添加 Docker 的存储库 GPG 密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
将存储库添加到您的源并更新您的包列表:
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
现在你可以安装 Docker:
sudo apt-get install docker-ce docker-ce-cli containerd.io
软呢帽
添加 Docker 的包存储库:
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
安装泊坞窗:
sudo dnf install docker-ce docker-ce-cli containerd.io
中央操作系统
添加 Docker 的包存储库:
sudo yum -y install yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
安装泊坞窗:
sudo yum install docker-ce docker-ce-cli containerd.io
在没有 Sudo 的情况下使用 Docker
Docker 守护进程作为 root
运行。您通常必须在 Docker 命令前加上 sudo
。如果您经常使用 Docker,这可能会变得乏味。将您自己添加到 docker
组将允许您在没有 sudo
的情况下使用 Docker。
sudo usermod -aG docker $USER
进入群组后,注销并重新登录。或者,运行 newgrp docker
命令以立即登录更新后的组。您现在应该能够从 Docker 命令中删除 sudo
。
测试您的 Docker 安装
现在 Docker 已安装,是时候测试它是否正常工作了!您可以使用最小的 hello-world
图像。
docker run hello-world:latest
您应该会在终端中看到几行输出。 Docker 将首先在您的机器上查找 hello-world:latest
图像。由于它不存在,因此将从 Docker Hub 存储库中提取图像。

一旦图像被拉取,一个新的容器将被创建。容器配置为发出基本的“hello world”消息,然后退出。如果您看到该文本,则表明您的 Docker 安装正常!
管理 Docker 服务
您可以通过使用 systemctl
检查其服务来检查 Docker 是否正在运行。有两个组件需要考虑,docker
和 containerd
。 docker
是 CLI 向其发送命令的 Docker 引擎守护进程。 containerd
是实际运行容器的底层运行时。
sudo systemctl status docker.service
sudo systemctl status containerd.service
您可以像管理系统上的任何其他服务一样管理守护进程。如果您想暂时停止 Docker 并释放容器使用的系统资源,请使用 systemctl stop
:
sudo systemctl stop docker.service
您可以使用 systemctl start
重新启动服务。
添加 Docker-Compose
docker-compose
是一个单独的二进制文件,最好直接从项目的 GitHub 版本下载。大多数流行的 Linux 发行版都在其包管理器中包含 Compose,但它可能已经过时了。
前往 Docker Compose 的发布页面并记下最新版本号。在撰写本文时,它是 1.29.0
。
在下面的命令中替换您看到的版本而不是 1.29.0
。这将为您的系统下载正确的二进制文件并将其放入 /usr/local/bin
。
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
接下来使文件可执行:
sudo chmod +x /usr/local/bin/docker-compose
您现在可以在终端中使用 docker-compose
命令。尝试运行 docker-compose --version
来检查。
创建一个简单的 Docker-Compose 文件
要使用 docker-compose
,您必须创建一个 docker-compose.yml
文件。这描述了构成应用程序堆栈的容器。您可以指定容器使用的端口绑定、环境变量、网络和卷。
在同一 docker-compose.yml
文件中声明的容器自动成为同一堆栈的一部分。它们被链接到一个 Docker 网络中,因此它们可以使用它们的 docker-compose.yml
服务名称作为主机名来相互通信。
这是一个简单的 docker-compose.yml
来运行 PHP Web 服务器和 MySQL 数据库:
version: "3"
services:
app:
image: php8.0-apache
environment:
- MYSQL_SERVER=mysql
- MYSQL_USERNAME=root
- MYSQL_PASSWORD=example
ports:
- ${PORT:-80}:80
restart: unless-stopped
mysql:
image: mysql:8.0
expose:
- 3306
environment:
- MYSQL_ROOT_PASSWORD
volumes:
- mysql:/var/lib/mysql
restart: unless-stopped
volumes:
mysql:
您可以通过运行 docker-compose up -d
来启动这两项服务。您会看到这两个图像都是从 Docker Hub 中提取的。然后将启动容器。您可以使用 docker-compose stop
停止它们。使用 docker-compose down
删除容器。
示例 YAML 文件展示了一些 Docker Compose 功能。容器在 services
节点下定义,每个容器声明其 Docker image
。您可以将 shell 环境变量传递到容器 (environments
) 并设置 Docker 端口绑定 (ports
)。可以使用 $ {VARIABLE:-DEFAULT}
语法将环境变量插入到字符串中。如果变量没有在你的 shell 中设置,DEFAULT
将被用作值。您可以在我们的专门指南中了解有关 Docker Compose 的更多信息。
概括
您可以使用流行的 Linux 发行版的包管理器轻松安装 Docker。添加 Docker 存储库,然后安装 docker-ce
、docker-ce-cli
和 containerd.io
。这些组件为您提供构建和运行容器所需的一切。
启动并运行后,您可以编写 Dockerfile
并使用 docker build -t my-app:latest .
来构建它。然后使用 docker run my-app:latest
启动您的容器。
Docker-Compose 是一个额外的抽象层,可以更轻松地运行多个容器的“堆栈”。使用 Compose,您无需手动连续运行多个命令。您可以编写声明性 YAML 文件并使用 docker-compose up
来同时启动所有容器。