简介
在本实验中,你将学习如何使用 docker-compose start
命令来管理多容器 Docker 应用。我们将从创建一个简单的 docker-compose.yml
文件开始,用于定义我们的服务。
在完成 compose 文件的创建后,你将练习使用单个命令启动文件中定义的所有服务。最后,你将学习如何从 compose 配置中选择性地启动特定服务。通过这个动手实践,你将掌握有效管理 Docker Compose 项目的基础技能。
在本实验中,你将学习如何使用 docker-compose start
命令来管理多容器 Docker 应用。我们将从创建一个简单的 docker-compose.yml
文件开始,用于定义我们的服务。
在完成 compose 文件的创建后,你将练习使用单个命令启动文件中定义的所有服务。最后,你将学习如何从 compose 配置中选择性地启动特定服务。通过这个动手实践,你将掌握有效管理 Docker Compose 项目的基础技能。
在本步骤中,我们将创建一个简单的 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 内容。
在本步骤中,我们将启动 docker-compose.yml
文件中定义的所有服务。为此我们将使用 docker-compose up
命令。
首先确保你位于创建 docker-compose.yml
文件的目录中:
cd ~/project/my-compose-app
现在运行 docker-compose up
命令。-d
参数表示以分离模式运行容器,它们将在后台运行而不会阻塞你的终端:
docker-compose up -d
当你首次运行此命令时,Docker Compose 会执行以下操作:
docker-compose.yml
文件nginx:latest
镜像)你将看到显示镜像正在拉取以及容器正在创建和启动的输出信息:
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 输出,这确认了容器正在运行且端口映射工作正常。
在上一步中,我们使用 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
应该能看到状态为 Up
的 my-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 文件中定义的多容器应用的生命周期。