dockercompose

author author     2022-09-04     736

关键词:

使用Docker Compose管理多个容器

Docker Compose是一个用来定义和运行复杂应用的Docker工具。使用Compose,你可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用,完成一切准备工作。
- github.com/docker/compose

一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose,不再需要使用shell脚本来启动容器。在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器。完整的命令列表如下:

build 构建或重建服务
help 命令帮助
kill 杀掉容器
logs 显示容器的输出内容
port 打印绑定的开放端口
ps 显示容器
pull 拉取服务镜像
restart 重启服务
rm 删除停止的容器
run 运行一个一次性命令
scale 设置服务的容器数目
start 开启服务
stop 停止服务
up 创建并启动容器

参考 https://docs.docker.com/compose/install/ 。你能运行Compose在OSX和64位Linux。当前不支持Windows操作系统。

8.1. 安装Docker Compose

curl -L https://github.com/docker/compose/releases/download/1.4.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod  x /usr/local/bin/docker-compose

8.2. 配置文件

1.Compose的配置文件是docker-compose.yml。让我们看看下面这个文件:

mysqldb:
image: [classroom.example.com:5000/]mysql
environment:
MYSQL_DATABASE: sample
MYSQL_USER: mysql
MYSQL_PASSWORD: mysql
MYSQL_ROOT_PASSWORD: supersecret
mywildfly:
image: [classroom.example.com:5000|arungupta]/wildfly-mysql-javaee7
links:
- mysqldb:db
ports:
- 8080

这个文件在 https://raw.githubusercontent. ... dees/ ,它表明:
a. 定义了两个服务分别叫做mysqldbmywildfy
b. 使用image定义每个服务的镜像名
c. MySQL容器的环境变量定义在environment
d. MySQL容器使用links和WildFly容器链接
e. 使用ports实现端口转发

8.3. 启动服务

1.如果你从互联网运行,将docker-compose-internet.yml保存为docker-compose.yml

2.如果你使用教师给的镜像,将docker-compose-instructor.yml保存为docker-compose.yml

3.使用下面的命令,所有的服务将使用后台模式被启动

docker-compose up -d


显示的输出如下:
Creating attendees_mysqldb_1... Creating attendees_mywildfly_1...
使用-f指定代替的compose文件。
使用-p指定代替compose文件所在的目录。

4.验证启动的服务

docker-compose ps
    Name                       Command               State                Ports
attendees_mysqldb_1     /entrypoint.sh mysqld            Up      3306/tcp
attendees_mywildfly_1   /opt/jboss/wildfly/customi ...   Up      0.0.0.0:32773->8080/tcp

这里提供了一个整合的列表显示所有启动的服务和容器。

同时,通常使用docker ps命令来验证应用的容器,和在Docker主机上运行的其他容器。

docker ps
CONTAINER ID        IMAGE                                    COMMAND                CREATED             STATUS              PORTS                              NAMES
3598e545bd2f        arungupta/wildfly-mysql-javaee7:latest   "/opt/jboss/wildfly/   59 seconds ago      Up 58 seconds       0.0.0.0:32773->8080/tcp         attendees_mywildfly_1
b8cf6a3d518b        mysql:latest                             "/entrypoint.sh mysq   2 minutes ago       Up 2 minutes        3306/tcp                        attendees_mysqldb_1

5.查询服务日志

taching to attendees_mywildfly_1, attendees_mysqldb_1
mywildfly_1 | => Starting WildFly server
mywildfly_1 | => Waiting for the server to boot
mywildfly_1 | ===========================================================
mywildfly_1 |
mywildfly_1 |   JBoss Bootstrap Environment
mywildfly_1 |
mywildfly_1 |   JBOSS_HOME: /opt/jboss/wildfly
mywildfly_1 |
mywildfly_1 |   JAVA: /usr/lib/jvm/java/bin/java
mywildfly_1 |
mywildfly_1 |   JAVA_OPTS:  -server -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true
mywildfly_1 |
. . .
mywildfly_1 | 15:40:20,866 INFO  [org.jboss.resteasy.spi.ResteasyDeployment] (MSC service thread 1-2) Deploying javax.ws.rs.core.Application: class org.javaee7.samples.employees.MyApplication
mywildfly_1 | 15:40:20,914 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-2) JBAS017534: Registered web context: /employees
mywildfly_1 | 15:40:21,032 INFO  [org.jboss.as.server] (ServerService Thread Pool -- 28) JBAS018559: Deployed "employees.war" (runtime-name : "employees.war")
mywildfly_1 | 15:40:21,077 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://127.0.0.1:9990/management
mywildfly_1 | 15:40:21,077 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:9990
mywildfly_1 | 15:40:21,077 INFO  [org.jboss.as] (Controller Boot Thread) JBAS015874: WildFly 8.2.0.Final "Tweek" started in 9572ms - Started 280 of 334 services (92 services are lazy, passive or on-demand)
mysqldb_1   | Running mysql_install_db
mysqldb_1   | 2015-06-05 15:38:31 0 [Note] /usr/sbin/mysqld (mysqld 5.6.25) starting as process 27 ...
mysqldb_1   | 2015-06-05 15:38:31 27 [Note] InnoDB: Using atomics to ref count buffer pool pages
. . .
mysqldb_1   | 2015-06-05 15:38:40 1 [Note] Event Scheduler: Loaded 0 events
mysqldb_1   | 2015-06-05 15:38:40 1 [Note] mysqld: ready for connections.
mysqldb_1   | Version: ‘5.6.25‘  socket: ‘/var/run/mysqld/mysqld.sock‘  port: 3306  MySQL Community Server (GPL)
mysqldb_1   | 2015-06-05 15:40:18 1 [Warning] IP address ‘172.17.0.24‘ could not be resolved: Name or service not known

8.4. 验证应用

1.通过 http://dockerhost:32773/employ ... yees/ 访问应用。在浏览器里显示如下:

使用docker-compose ps命令显示端口
技术分享

8.5. 扩展服务

你能像这样扩展服务:

docker-compose scale mywildfly=4
Creating and starting 2... done
Creating and starting 3... done
Creating and starting 4... done

检查日志:

docker-compose logs

检查运行的实例:

docker-compose ps

 

Name Command State Ports

rafael_mysqldb_1 /entrypoint.sh mysqld Up 3306/tcp
rafael_mywildfly_1 /opt/jboss/wildfly/customi ... Up 0.0.0.0:32773->8080/tcp
rafael_mywildfly_2 /opt/jboss/wildfly/customi ... Up 0.0.0.0:32777->8080/tcp
rafael_mywildfly_3 /opt/jboss/wildfly/customi ... Up 0.0.0.0:32780->8080/tcp
rafael_mywildfly_4 /opt/jboss/wildfly/customi ... Up 0.0.0.0:32781->8080/tcp

你也能减少运行的实例数目:

docker-compose scale mywildfly=2
Stopping rafael_mywildfly_3... done
Stopping rafael_mywildfly_4... done
Removing rafael_mywildfly_3... done
Removing rafael_mywildfly_4... done

 

8.6. 停止服务

停止服务:

docker-compose stop
Stopping attendees_mywildfly_1...
Stopping attendees_mywildfly_2...
Stopping attendees_mysqldb_1...

 

警告:再次停止和启动将会得到如下错误:
wildfly_1 |
  wildfly_1 | 09:11:07,802 ERROR [org.jboss.as.controller.management-operation] (management-handler-thread - 4) JBAS014613: Operation ("add") failed - address: ([
  wildfly_1 |     ("subsystem" => "datasources"),
  wildfly_1 |     ("jdbc-driver" => "mysql")
  wildfly_1 | ]) - failure description: "JBAS014803: Duplicate resource [
  wildfly_1 |     ("subsystem" => "datasources"),
  wildfly_1 |     ("jdbc-driver" => "mysql")
  wildfly_1 | ]"
  

这是因为JDBC资源在每个运行的容器中创建,在实际情况下,这是已经写在配置中的。

hellodocker——dockercompose(代码片段)

HelloDocker(九)——DockerCompose一、DockerCompose简介1、DockerCompose简介DockerCompose项目是Docker官方的开源项目,用于在单台服务器或主机上对多个Docker容器快速编排。DockerCompose将所管理的容器分为三层,分别是工程(project),服务(... 查看详情

dockercompose编排(写法格式及实验)(代码片段)

目录一、DockerCompose前言二、Dockercompose的文件结构1、dockercompose配置常用字段2、dockercompose常用命令三、使用compose编排1、使用compose编排安装运行tomcat容器2、使用compose编排创建容器(以tomcat为例)一、DockerCompose前言DockerCo... 查看详情

docker------dockercompose编排(代码片段)

目录前言一.Docker-compose简介二.Compose部署1.DockerCompose环境安装2.YAML文件格式及编写注意事项3.DockerCompose配置常用字段4.DockerCompose常用命令5.DockerCompose文件结构三.使用Compose编排创建Nginx容器1.准备依赖文件2.编写配置文件docker-compose... 查看详情

docker------dockercompose编排(代码片段)

目录前言一.Docker-compose简介二.Compose部署1.DockerCompose环境安装2.YAML文件格式及编写注意事项3.DockerCompose配置常用字段4.DockerCompose常用命令5.DockerCompose文件结构三.使用Compose编排创建Nginx容器1.准备依赖文件2.编写配置文件docker-compose... 查看详情

dockercompose安装

DockerCompose  DockerCompose是Docker官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用。你可以也通过执行下面的命令,高速安装DockerCompose。curl-Lhttps://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname-s 查看详情

dockercompose

使用DockerCompose管理多个容器DockerCompose是一个用来定义和运行复杂应用的Docker工具。使用Compose,你可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用,完成一切准备工作。-github.com/docker/compose一个使用Dock... 查看详情

dockercompose

...age要创建多个container要管理这些container(启动停止删除)DOckerCompose"批处理"通过文本的方式,把要处理的容器按照顺序执行,如果是多容器也就是通过一条命令就搞定了  DockerCompose了解它https://docs.docker.com/compose/over 查看详情

dockercompose的简单使用

笔记内容:dockercompose的简单使用笔记日期:2018-02-0825.17安装dockercompose25.18dockercompose示例安装dockercomposedockercompose可以方便我们快捷高效地管理容器的启动、停止以及重启等操作,和批量管理容器,它类似于linux下的shell脚本,基... 查看详情

dockercompose部署服务

1用dockercompose部署服务-需求:假如现在我们手里有很多容器,每个容器对应每个服务,有nginx容器,redis容器,mysql容器等。现在我们需要批量化的去管理,批量启动,停止,重启等操作!当然你会说用shell,可是如何不用shell来... 查看详情

dockercompose一键搭建lnmp开发环境

参考技术Adockercompose是用来配置和运行多容器服务的工具(适用于单机,集群请使用k8s),通过docker-compose命令可轻松对多个容器进行如下操作:安装dockercompose,官方文档:https://docs.docker.com/compose/install/执行dockercompose准备步骤dockerco... 查看详情

二用dockercompose搭建kafka集群

...现。在另一篇两种方式搭建Zookeeper伪集群:纯手工或使用Dockercompose里,尝试了如何用dockercompose来搭建一个zookeeper集群。在此基础上,我们用dockercompose搭建一个kafka集群。 查看详情

dockercompose(项目)

DockerCompose 项目compose项目简介    compose项目来源于之前的Fig项目,使用python代码编写。compose项目主要用于编排部署基于docker的应用。本身与docker/swarm配合度很高。DockerCompose 是Docker编排服务的一部分,可... 查看详情

dockercompose项目

http://hongge.blog.51cto.com/DockerCompose项目compose项目简介compose项目来源于之前的Fig项目,使用python代码编写。compose项目主要用于编排部署基于docker的应用。本身与docker/swarm配合度很高。DockerCompose是Docker编排服务的一部分,可以让用... 查看详情

dockercompose安装部署jenkins

流水线可以让项目发布流程更加清晰,docker可以大大减少Jenkins配置。本篇讲解通过DockerCompose部署Jenkins服务。流水线可以让项目发布流程更加清晰,docker可以大大减少Jenkins配置。本篇讲解通过DockerCompose部署Jenkins服务。 查看详情

docker核心技术之dockercompose

DockerCompose简介DockerCompose是什么?DockerCompose是一个能一次性定义和管理多个Docker容器的工具。详细地说:Compose中定义和启动的每一个容器都相当于一个服务(service)Compose中能定义和启动多个服务,且它们之间通常具有协同关系管... 查看详情

dockercompose,dockerswarm(代码片段)

文章目录DockerCompose安装体验yaml规则开源项目DockerSwarmDockerCompose介绍:使用DockerCompose来高效管理容器,定义启动多个容器批量容器编排Compose是Docker官方的开源项目。需要安装Dockerfile让程序在任何地方运行。Compose.ymlversion... 查看详情

详解dockercompose,consul!!(代码片段)

DockerCompose的前身是Fig,它是一个定义及运行多个Docker容器的工具。使用DockerCompose不再需要使用ShellI脚本来启动容器DockerCompose非常适合组合使用多个容器进行开发的场景。Consul是HashiCor公司推出的开源工具,用于实现分布式系... 查看详情

容器编排dockercompose

...,使用这样的方式会给我们的运维人员带来很大的负担,dockercompose容器编排工具无疑是解决这个一问题的利器。DockerCompose是用来管理多容器应用的工具,我们可以使用composefile文件来配置容器的应用和服务,编写好composefile文件... 查看详情