概述

Docker中,开发者可以通过将应用程序及其所有依赖项打包到容器中来构建、部署和测试应用程序。Docker Compose是一个管理多个容器(使用服务)的必备工具。

在这篇教程中,我们将了解如何在使用Docker Compose管理的Docker容器中执行多个命令。此外,我们还将探索在Docker容器中执行多个命令的不同方法。

1. 单个命令运行

Docker Compose允许我们在Docker容器内执行命令。在容器启动时,可以通过[command]指令设置任何命令。

让我们看看一个docker-compose.yml文件,其中在容器内执行了一个简单的命令:

version: "3"
services:
 server:
   image: alpine
   command: sh -c "echo "baeldung""

在上述docker-compose.yml文件中,我们正在使用alpineDocker镜像在容器内执行一个简单的echo命令。

2. 多个命令运行

我们可以使用Docker Compose通过docker-compose.yml文件创建服务来管理多个应用程序。具体来说,我们将使用&&|操作符。让我们看看它们是如何工作的。

2.1 使用&&操作符

首先,我们创建一个简单的docker-compose.yml文件来演示Docker Compose如何运行多个命令:

version: "3"
services:
 server:
   image: alpine
   command: sh -c "echo "baeldung" && echo "docker" "

在这里,我们使用了alpine作为Docker容器的基础镜像。注意最后一行,我们在那里执行了两个命令:echo baeldungecho docker。它们由&&操作符分隔。

为了演示结果,让我们使用docker-compose up命令运行此镜像:

$ docker-compose up
Creating dockercompose_server_1 ... done
Attaching to dockercompose_server_1
server_1  | baeldung
server_1  | docker
dockercompose_server_1 exited with code 0

这里,两个echo语句的输出被打印到了stdout

2.2 使用|操作符

我们还可以使用|操作符在Docker Compose中运行多个命令。|操作符的语法与&&操作符略有不同。

为了说明|操作符的工作原理,让我们更新我们的docker-compose.yml

version: "3"
services:
 server:
   image: alpine
   command:
      - /bin/sh
      - -c
      - |
        echo "baeldung"
        echo "docker"

在这里,我们分别在不同的行添加了命令。除了command指令外,一切都是一样的。

这种方法推荐,因为它使我们的YAML文件保持整洁,因为所有的命令都在单独的一行。

让我们再次使用docker-compose up命令运行Docker容器:

$ docker-compose up
Creating dockercompose_server_1 ... done
Attaching to dockercompose_server_1
server_1  | baeldung
server_1  | docker
dockercompose_server_1 exited with code 0

如上图所示,两个命令按顺序执行。

4. 总结

在这篇文章中,我们展示了如何在Docker Compose中执行多个命令。首先,我们看到如何使用&&操作符执行多个命令。之后,我们使用|操作符实现了类似的结果。