拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 使用Docker Compose 的交互式Shell

使用Docker Compose 的交互式Shell

白鹭 - 2022-08-08 2410 0 2

一、概述

在本教程中,我们将学习如何使用交互式shell 运行多个Docker 容器。首先,我们将使用简单的docker run命令运行Docker 容器。稍后,我们将使用docker-compose命令运行相同的Docker 容器。

2. Docker 和Docker Compose

Docker 容器允许开发人员打包跨不同环境无缝工作的应用程序。事实上,在生产环境中典型的Web 应用程序部署可能需要几个服务:

  • 数据库服务器

  • 负载均衡

  • 网络服务器

在这种情况下,Docker Compose 是一个非常方便的工具。

Docker Compose 主要用于将多个容器作为单个服务运行,同时保持容器之间的平滑连接。

3. 了解Docker Compose

要使用docker-compose命令运行Docker 容器,我们需要将所有配置添加到单个docker-compose.yml配置文件中。重要的是,与普通docker run命令相比,使用docker-compose的主要好处之一是将配置整合到一个文件中,机器和人类都可以阅读。

让我们创建一个简单docker-compose.yml来展示如何使用dockerdocker-compose up命令运行Docker 容器:

version: "3"  services:  server:  image: tomcat:jre11-openjdk  ports:  - 8080:8080

在这里,我们使用tomcat作为基础镜像,并在主机上暴露了8080端口。要查看它的实际效果,让我们使用docker-compose up命令构建并运行此映像:

$ docker-compose up  Pulling server (tomcat:jre11-openjdk)...  jre11-openjdk: Pulling from library/tomcat  001c52e26ad5: Pull complete  ...  704b1ae41f0e: Pull complete  Digest: sha256:85bfe38b723bc864ed594973a63c04b112e20d6d33eee57cd5303610d8e3dc77  Status: Downloaded newer image for tomcat:jre11-openjdk  Creating dockercontainers_server_1 ... done  Attaching to dockercontainers_server_1  server_1 | NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED  server_1 | 03-Aug-2022 06:22:17.259 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name: Apache Tomcat/10.0.23

至关重要的是,我们应该从包含docker-compose.yml文件的目录中运行上述命令。

在上面的输出中,我们可以看到dockercontainers_server_1已启动并正在运行。但是,这种方法的一个问题是,一旦我们退出上述shell,容器也会停止

要长期运行Docker 容器,我们需要使用交互式shell 运行它。

4. Docker 中的交互式Shell

Docker 中的交互模式允许我们在容器处于running状态时执行命令。要以交互模式运行Docker 容器,我们使用-it选项。此外,我们使用-it标志将STDIN 和STDOUT 通道附加到我们的终端。

Docker Compose 使用具有多个优点的单主机部署:

  • 快速且易于配置

  • 实现快速部署

  • 减少完成多项任务所需的时间

  • 所有容器独立运行,从而降低了违规风险

现在让我们使用带有交互式shell 的docker-compose运行之前的tomcat容器:

version: "3"  services:  server:  image: tomcat:jre11-openjdk  ports:  - 8080:8080  stdin_open: true  tty: true

在这种情况下,我们**在dockerdocker-compose.yml文件中添加了stdin_opentty选项,以便我们可以使用docker docker-composesetup 拥有一个交互式shell** 。

当然,要访问Docker 容器,我们首先需要使用以下命令运行容器:

$ docker-compose up --d

现在,我们可以获得正在运行的docker-compose服务的交互式shell:

$ docker-compose exec server bash

请注意我们如何使用服务名称而不是容器名称

最后,我们使用上面的命令成功登录到容器中。

5. 结论

在本文中,我们演示了如何使用docker-compose命令获取交互式shell。首先,我们学习了如何使用docker-compose运行Docker 容器。之后,我们使用docker exec命令和docker-composeYAML 配置对交互式shell 进行了同样的探索。


标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *