如何使用 docker compose start 命令启动服务

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,你将学习如何使用 docker-compose start 命令来管理多容器 Docker 应用。我们将从创建一个简单的 docker-compose.yml 文件开始,用于定义我们的服务。

在完成 compose 文件的创建后,你将练习使用单个命令启动文件中定义的所有服务。最后,你将学习如何从 compose 配置中选择性地启动特定服务。通过这个动手实践,你将掌握有效管理 Docker Compose 项目的基础技能。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/start("Start Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555092{{"如何使用 docker compose start 命令启动服务"}} docker/ps -.-> lab-555092{{"如何使用 docker compose start 命令启动服务"}} docker/start -.-> lab-555092{{"如何使用 docker compose start 命令启动服务"}} docker/stop -.-> lab-555092{{"如何使用 docker compose start 命令启动服务"}} docker/create -.-> lab-555092{{"如何使用 docker compose start 命令启动服务"}} docker/pull -.-> lab-555092{{"如何使用 docker compose start 命令启动服务"}} end

创建一个简单的 docker-compose.yml 文件

在本步骤中,我们将创建一个简单的 docker-compose.yml 文件。Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过 Compose,你可以使用 YAML 文件来配置应用服务,然后只需一条命令就能根据配置创建并启动所有服务。

在创建 docker-compose.yml 文件之前,我们需要先安装 Docker Compose。由于 LabEx 环境没有预装该工具,我们将使用 pip 进行安装。

首先更新软件包列表并安装 pip(如果尚未安装):

sudo apt update
sudo apt install -y python3-pip

现在可以通过 pip 安装 Docker Compose:

pip install docker-compose

安装完成后,可以通过检查版本号来验证安装是否成功:

docker-compose --version

你应该会看到类似 docker-compose version 1.29.2, build 5becea4c 的输出信息。

安装好 Docker Compose 后,让我们为项目创建目录并进入该目录。我们将在此目录中创建 docker-compose.yml 文件:

mkdir ~/project/my-compose-app
cd ~/project/my-compose-app

接下来使用 nano 编辑器创建 docker-compose.yml 文件:

nano docker-compose.yml

nano 编辑器中粘贴以下内容。这个 docker-compose.yml 文件定义了一个名为 web 的服务,使用 nginx 镜像,并将容器的 80 端口映射到宿主机的 8080 端口:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"

让我们分解这个文件的结构:

  • version: '3.8' 指定了 Compose 文件格式版本
  • services: 定义了组成应用的各个服务
  • web: 是我们的服务名称(可自定义)
  • image: nginx:latest 指定该服务使用的 Docker 镜像(这里使用最新版官方 Nginx 镜像)
  • ports: 配置宿主机与容器之间的端口映射
  • - "8080:80" 将容器内的 80 端口(Nginx 默认运行端口)映射到宿主机的 8080 端口,这意味着你可以通过浏览器访问 http://localhost:8080 或使用终端 curl 命令来访问 Nginx 服务器

Ctrl + X,然后按 Y,最后按 Enter 保存文件。

可以使用 cat 命令验证文件内容:

cat docker-compose.yml

你应该能看到刚刚粘贴的 YAML 内容。

启动 compose 文件中定义的所有服务

在本步骤中,我们将启动 docker-compose.yml 文件中定义的所有服务。为此我们将使用 docker-compose up 命令。

首先确保你位于创建 docker-compose.yml 文件的目录中:

cd ~/project/my-compose-app

现在运行 docker-compose up 命令。-d 参数表示以分离模式运行容器,它们将在后台运行而不会阻塞你的终端:

docker-compose up -d

当你首次运行此命令时,Docker Compose 会执行以下操作:

  1. 在当前目录查找 docker-compose.yml 文件
  2. 读取服务定义
  3. 对于每个服务,检查本地是否存在指定镜像。若不存在,则从 Docker Hub 拉取镜像(本例中将拉取 nginx:latest 镜像)
  4. 为每个服务创建并启动容器

你将看到显示镜像正在拉取以及容器正在创建和启动的输出信息:

Pulling web (nginx:latest)...
latest: Pulling from library/nginx
... (显示镜像层下载过程的输出)
Status: Downloaded newer image for nginx:latest
Creating my-compose-app_web_1 ... done

命令执行完成后,可以使用 docker ps 命令验证容器是否正在运行:

docker ps

你应该能看到 web 容器的条目,显示镜像为 nginx:latest,状态为 Up。容器名称类似于 my-compose-app_web_1

要进一步验证 Nginx 服务器是否正常运行且可访问,可以使用 curl 命令访问宿主机 8080 端口的 web 服务:

curl http://localhost:8080

你将在终端看到 Nginx 默认欢迎页面的 HTML 输出,这确认了容器正在运行且端口映射工作正常。

启动 compose 文件中指定的单个服务

在上一步中,我们使用 docker-compose up 启动了 docker-compose.yml 文件中定义的所有服务。本步骤将学习如何在 Compose 文件中定义多个服务时,单独启动某个特定服务。

虽然当前的 docker-compose.yml 只包含一个服务(web),但当你的应用包含多个服务(如 web 服务器、数据库和后端 API)时,单独启动服务的命令会非常有用。

首先停止当前运行的服务。我们可以使用 docker-compose down 命令,该命令会停止并移除由 up 创建的容器、网络和卷。

确保你位于 ~/project/my-compose-app 目录:

cd ~/project/my-compose-app

运行 docker-compose down 命令:

docker-compose down

你将看到停止和移除容器及网络的输出信息:

Stopping my-compose-app_web_1 ... done
Removing my-compose-app_web_1 ... done
Removing network my-compose-app_default

可以通过 docker ps 验证容器已停止,此时应看不到 compose 文件创建的运行中容器:

docker ps

现在演示如何启动特定服务。命令格式为 docker-compose up <service_name>,本例中服务名为 web。我们同样使用 -d 参数使其在后台运行:

docker-compose up -d web

该命令仅会启动 docker-compose.yml 中定义的 web 服务。由于镜像已在上一步拉取,此时会直接创建并启动容器。

你将看到类似输出:

Creating my-compose-app_web_1 ... done

再次使用 docker ps 验证 web 容器是否运行:

docker ps

应该能看到状态为 Upmy-compose-app_web_1 容器。

这展示了如何选择性启动 docker-compose.yml 中定义的服务,该功能在管理复杂的多服务应用时非常实用。

总结

在本实验中,我们学习了如何使用 docker-compose start 命令。我们首先创建了一个简单的 docker-compose.yml 文件,这包括使用 pip 安装 Docker Compose、验证安装、创建项目目录,然后创建 docker-compose.yml 文件本身。创建的文件定义了一个名为 web 的服务,使用 nginx 镜像并配置了端口映射。

后续步骤(提供内容中未完全详述)将涉及使用 docker-compose start 命令来启动 compose 文件中定义的所有服务或特定服务。这展示了 docker-compose start 命令的核心功能,用于管理 Compose 文件中定义的多容器应用的生命周期。