介绍
Docker Compose 是一个用于管理多容器 Docker 应用程序的重要工具。本实验将指导你解决许多用户在开始使用 Docker Compose 时遇到的常见 "zsh: command not found: docker-compose" 错误。
通过完成本实验,你将学习如何正确安装 Docker Compose,解决与路径相关的问题,并使用 Docker Compose 运行一个简单的多容器应用程序。这些技能对于使用容器化应用程序的开发人员来说至关重要。
Docker Compose 是一个用于管理多容器 Docker 应用程序的重要工具。本实验将指导你解决许多用户在开始使用 Docker Compose 时遇到的常见 "zsh: command not found: docker-compose" 错误。
通过完成本实验,你将学习如何正确安装 Docker Compose,解决与路径相关的问题,并使用 Docker Compose 运行一个简单的多容器应用程序。这些技能对于使用容器化应用程序的开发人员来说至关重要。
在开始故障排除之前,让我们了解一下 Docker Compose 是什么,以及它在 Docker 生态系统中的重要性。
Docker 是一个平台,使开发人员能够在容器中构建、打包和运行应用程序。容器是轻量级、隔离的环境,包含运行应用程序所需的一切——代码、运行时、系统工具、库和设置。
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Docker Compose,你使用一个 YAML 文件来配置应用程序的服务、网络和卷。然后,只需一个命令,你就可以从你的配置中创建并启动所有服务。
让我们检查一下 Docker 是否已正确安装在我们的系统上:
docker --version
你应该看到类似这样的输出:
Docker version 20.10.21, build baeda1f
这确认了 Docker 已安装并可以使用。现在,让我们尝试运行 Docker Compose,看看它是否已安装:
docker-compose --version
如果 Docker Compose 未安装,你将看到错误:
zsh: command not found: docker-compose
此错误消息是本实验的重点——我们将在接下来的步骤中对这个问题进行故障排除和修复。
Docker Compose 为管理多容器应用程序提供了几个优势:
在下一步中,我们将安装 Docker Compose 并解决 "command not found" 错误。
现在我们了解了 Docker Compose 是什么,让我们在系统上安装它以解决 "command not found" 错误。
第一步是下载 Docker Compose 二进制文件。官方 Docker Compose 二进制文件可在 GitHub 上获得。我们将使用 curl 命令下载它:
sudo curl -L "https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
此命令下载与你的操作系统架构匹配的 Docker Compose 二进制文件,并将其保存到 /usr/local/bin/docker-compose。该命令将需要一点时间来执行,因为它会下载文件。
下载二进制文件后,我们需要使其可执行:
sudo chmod +x /usr/local/bin/docker-compose
此命令授予 Docker Compose 二进制文件执行权限。
现在,让我们验证 Docker Compose 是否已正确安装:
docker-compose --version
你应该看到类似这样的输出:
Docker Compose version v2.17.2
如果你仍然看到 "command not found" 错误,这意味着 /usr/local/bin 目录可能不在你系统的 PATH 中。我们将在下一步中解决此问题。
PATH 变量是 Linux 中的一个环境变量,它告诉 shell 在你运行命令时搜索可执行文件的目录。要查看你当前的 PATH,请运行:
echo $PATH
你应该看到一个由冒号 (:) 分隔的目录列表。如果 /usr/local/bin 不在此列表中,这可以解释为什么 shell 找不到 docker-compose 命令。
在下一步中,我们将对可能阻止我们使用 Docker Compose 的任何剩余问题进行故障排除和解决。
如果你在安装后仍然遇到 "zsh: command not found: docker-compose" 错误,让我们对一些常见原因及其解决方案进行故障排除。
一个常见的解决方案是在你的 PATH 中肯定存在的目录(例如 /usr/bin)中创建指向 Docker Compose 二进制文件的符号链接:
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
此命令在 /usr/bin 目录中创建一个指向 Docker Compose 二进制文件的符号链接(快捷方式),该目录通常默认包含在系统的 PATH 中。
创建符号链接后,再次尝试运行 Docker Compose:
docker-compose --version
你现在应该看到 Docker Compose 的版本信息,没有任何错误。
在较新版本的 Docker 中,Compose 作为插件提供。如果你更喜欢使用此方法,可以尝试:
docker compose version
请注意 docker 和 compose 之间没有连字符。如果此命令有效,则表示 Docker Compose 作为插件可用,你可以使用此语法。
如果你希望将 Docker Compose 保留在当前位置,但符号链接不起作用,你可以手动将该目录添加到你的 PATH 中:
echo 'export PATH=$PATH:/usr/local/bin' >> ~/.zshrc
source ~/.zshrc
这会将 /usr/local/bin 添加到你的 PATH 中,并立即将更改应用于你当前的会话。
无论你使用哪种解决方案,请验证 Docker Compose 现在是否正常工作:
docker-compose --version
你应该看到类似这样的输出:
Docker Compose version v2.17.2
现在我们已经成功安装和配置了 Docker Compose,在下一步中,我们将创建一个简单的 Docker Compose 项目来测试我们的安装。
现在 Docker Compose 已正确安装并运行,让我们创建一个简单的项目来测试我们的设置。我们将创建一个包含 Web 服务器和 Redis 数据库的基本 Web 应用程序。
首先,让我们为我们的项目创建一个专用目录:
mkdir ~/project/docker-compose-test
cd ~/project/docker-compose-test
现在,让我们使用 nano 文本编辑器创建一个 docker-compose.yml 文件:
nano docker-compose.yml
将以下内容复制并粘贴到文件中:
version: "3"
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
redis:
image: redis:alpine
此 Docker Compose 文件定义了两个服务:
web:一个 Nginx Web 服务器,它将从本地目录提供内容redis:一个 Redis 数据库,用于缓存或存储会话数据按 Ctrl+O,然后按 Enter 保存文件,然后按 Ctrl+X 退出 nano。
让我们创建一个简单的 HTML 页面,我们的 Web 服务将提供该页面:
mkdir -p html
nano html/index.html
将以下内容复制并粘贴到文件中:
<!DOCTYPE html>
<html>
<head>
<title>Docker Compose Test</title>
</head>
<body>
<h1>Hello from Docker Compose!</h1>
<p>If you can see this, your Docker Compose setup is working correctly.</p>
</body>
</html>
按 Ctrl+O,然后按 Enter 保存文件,然后按 Ctrl+X 退出 nano。
现在,让我们启动我们的 Docker Compose 项目:
docker-compose up -d
-d 标志在后台运行容器(分离模式)。你应该看到类似这样的输出:
Creating network "docker-compose-test_default" with the default driver
Pulling web (nginx:alpine)...
Pulling redis (redis:alpine)...
[...]
Creating docker-compose-test_web_1 ... done
Creating docker-compose-test_redis_1 ... done
让我们检查我们的服务是否正在正确运行:
docker-compose ps
你应该看到类似这样的输出:
Name Command State Ports
------------------------------------------------------------------------------------
docker-compose-test_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp
docker-compose-test_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8080->80/tcp
现在,你可以通过在 LabEx 界面中打开 Web 浏览器并导航到 http://localhost:8080 来访问 Web 应用程序。你应该看到 "Hello from Docker Compose!" 消息。
或者,你可以使用 curl 从命令行检查 Web 服务器:
curl http://localhost:8080
你应该看到我们之前创建的 HTML 内容。
当你完成测试后,你可以停止 Docker Compose 项目:
docker-compose down
你应该看到类似这样的输出:
Stopping docker-compose-test_web_1 ... done
Stopping docker-compose-test_redis_1 ... done
Removing docker-compose-test_web_1 ... done
Removing docker-compose-test_redis_1 ... done
Removing network docker-compose-test_default
恭喜你!你已成功安装 Docker Compose,解决了 "command not found" 错误,并通过一个简单的多容器应用程序测试了你的设置。
在这个实验中,你已经学会了:
这些技能为使用 Docker 和 Docker Compose 奠定了坚实的基础。你现在可以自信地使用 Docker Compose 来定义、部署和管理复杂的多容器应用程序。
为了进一步学习,请考虑探索更高级的 Docker Compose 功能,例如环境变量、网络、卷和扩展服务。你可能还想了解 Docker Compose 在生产环境中的应用,以及如何将其与 CI/CD 管道集成。