docker-compose命令介绍 | docker-compose.yml 配置文件编写详解 11
docker-compose命令介绍
‘docker-compose up’ 是一个 Docker 命令,用于在包含多个服务(例如 Web、DB 等)的独立主机上启动和运行整个应用程序。它还可以同时创建volumes (卷)和networks 并附加到在名为“docker-compose.yml”的文件中定义的容器。它也用于所有环境,例如开发、测试和生产。
语法:
docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]
Docker 中的组合如何工作?
- docker-compose up 命令在当前目录中搜索名为“docker-compose.yml”的文件。我们在此文件中定义了所有服务、volumes (卷)、网络等。
- 当我们从 Docker CLI 执行 ‘docker-compose up’ 命令时,Docker CLI 将 ‘docker-compose.yml’ 转换为 ‘json’ 并向 Docker API 服务器发出 REST API 调用,Docker 守护进程为我们创建所有服务、网络,volumes (卷)等。
- 它有多个选项来控制部署,例如,如果有正在运行的服务容器,并且我们对服务的配置进行了一些更改,并希望使用“docker-compose up”命令应用它,那么 Docker 守护进程就会停止所有现有容器并重新创建它,但是,我们可以使用“–no-recreate”命令来阻止更改。
docker-compose.yml 配置文件编写详解
下面给出了示例:
我们将创建一个 docker-compose.yml’,它有 2 个服务,web 和 db,以及一个volumes (卷)。
这是“docker-compose.yml”文件:
代码:
version: '2'
services:
web:
image: "nginx:alpine"
ports:
- "80:80"
volumes:
- my-vol:/var/www/html
db:
image: "mysql"
restart: always
environment:
MYSQL_ROOT_PASSWORD: password
volumes:
my-vol: {}
示例#1
让我们运行 ‘docker-compose up’ 命令立即启动这些服务:
代码:
docker-compose up
输出:
解释:
- 在上面的快照中,我们可以看到服务正在创建并且正在运行,但是,它也在控制台上提供了一些输出,因为服务在前台运行,而不是在后台运行。
- 如果我们使用“ctrl+c”快捷方式从这里退出,Docker 守护进程将停止在该服务下运行的容器。
示例#2
我们可以根据我们的要求指定标志来控制命令的行为。
让我们通过示例了解一些基本标志:
a. ‘-d’ 标志的使用
我们可以使用“-d”标志以分离模式运行服务,就像我们在运行新容器时使用的那样。
代码:
docker-compose up -d
输出:
b. 使用“–quiet-pull”标志
如果我们简单地运行 ‘docker-compose up’ 命令,并且如果 ‘docker-compose.yml’ 文件中提到的 Docker 镜像在本地不存在,那么它将从仓库中拉取它并显示相同的进度条和如果我们对进度条不感兴趣,我们使用 ‘–quiet-pull’ 标志来静默拉取没有进度条的 Docker 镜像,如下所示:
docker-compose up --quiet-pull
- 没有“–quiet-pull”标志
代码:
docker-compose up
输出:
- 带有“–quiet-pull”标志
代码:
docker image ls -a
输出:
解释:
- 在上面的快照中,我们可以看到本地没有可用的 Docker 映像,但在启动服务时仍然没有显示进度条,因为我们使用了“–quiet-pull”命令。
C . 使用“–force-recreate”和“–no-recreate”命令
上述标志相互矛盾。我们一次只能使用一个标志。’-force-recreate’ 标志用于重新创建容器,即使没有对 ‘docker-compose.yml’ 文件进行配置更改,而如果我们对文件进行了一些更改但不想重新创建如果容器已经在运行,那么我们使用“-no-recreate”标志。默认情况下,如果“docker-compose.yml”中没有变化,Docker 守护进程什么都不做,如果在文件中检测到任何变化,Docker 守护进程会创建新的容器,如下所示。
代码:
docker-compose up -d
输出:
在上面的例子中,我们可以看到,如果我们运行 ‘docker-compose up -d’ 两次,它会显示 ‘up-to-date’。
在某些情况下,无论文件是否有任何更改,我们都希望重新创建容器。
让我们使用“–force-recreate”而不对文件进行任何更改来重新创建容器。
代码:
docker-compose up --force-recreate
输出:
解释:
- 在上面的快照中,我们可以看到在运行带有“–force-recreate”标志的命令后,容器的容器 ID 已更改。
有时,我们对“docker-compose.yml”文件进行了更改,但不想重新创建已经运行的容器。
让我们在将 Web 服务的镜像名称从“nginx:alpine”更改为“nginx”后使用“–no-recreate”标志。
代码:
docker-compose up --d --no-recreate
输出:
解释:
- 在上面的例子中,我们可以看到新的 Docker 镜像已经被拉取,但是如果我们使用“–no-recreate”标志检查运行命令前后容器的容器 ID 是否相同,这意味着没有新容器被创建。
d. 使用“–no-start”标志
它用于创建容器但不启动它。它不能与“-d”标志一起使用。
代码:
docker-compose up --no-start
输出:
解释:
- 在上面的快照中,我们可以看到容器刚刚创建但并未运行。
e. 使用“–remove-orphans”标志
如果有不再需要的服务,我们可以使用“–remove-orphans”标志来删除不需要的容器。在这里,只需从“docker-compose”文件中删除“db”服务并运行如下所示的命令。
代码:
docker-compose up -d --remove-orphans
输出:
解释:
- 在上面的快照中,我们可以看到在从文件中删除 ‘db’ 服务后,orphan containe正在被删除。
docker-compose up 的优点
以下是提到的优点:
- 我们可以使用这个命令一次性启动一个完整的应用程序。
- 它为我们的应用程序提供了单点管理,该应用程序具有多个服务,可以更轻松地管理容器。
- 我们甚至可以在使用“build”指令部署服务的同时构建一个 Docker 镜像。
结论
docker-compose up 是一个启动完整应用程序的命令,但是,它仅适用于独立主机,不适用于 Docker swarm 模式,因此不建议用于生产。我们必须使用“docker stack”才能在 Docker swarm 中启动一个成熟的应用程序。
推荐文章
这是 docker-compose命令介绍指南。这里我们分别通过例子和优点来讨论 docker-compose up 的介绍。
本文是docker快速入门教程系列的一部分您也可以查看以了解更多信息 –
常见问题FAQ
- 程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
- 请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!