使用Fig的Docker Orchestration展示了如何使用Fig定义和控制多容器服务。从那时起,Fig被重命名为Docker Compose或简称Compose。
最近宣布了Compose的第一个版本:
宣布@docker由@aanand @bfirsh和社区撰写https://t.co/jJNvzbYCyk !
— Docker(@docker) 2015年2月26日
Compose是用于使用Docker定义和运行复杂应用程序的工具。 使用Compose,您可以在一个文件中定义一个多容器应用程序,然后在一个命令中旋转应用程序,该命令完成了运行该应用程序所需的一切。
Docker Compose使用与其他Docker命令和工具相同的API。
该技术提示将使用Fig博客重写Docker Orchestration,以使用Docker Compose。 换句话说,它将显示如何运行使用MySQL和WildFly部署的Java EE 7应用程序。
让我们开始吧!
安装Docker Compose
将Compose安装为:
curl -L https://github.com/docker/compose/releases/download/1.1.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
Docker撰写配置文件
Compose的入口点是docker-compose.yml
。 首先, fig.yml
docker-compose
工具还可以识别fig.yml
文件名,但显示以下消息:
fig.yml is deprecated and will not be supported in future. Please rename your config file to docker-compose.yml
如果目录中同时提供了fig.yml
和fig.yml
docker-compose.yml
则会显示以下消息:
Found multiple config files with supported names: docker-compose.yml, fig.yml
Using docker-compose.yml
使用上一个博客中的相同配置文件,然后重命名为docker-compose.yml
:
mysqldb:
image: mysql:latest
environment:
MYSQL_DATABASE: sample
MYSQL_USER: mysql
MYSQL_PASSWORD: mysql
MYSQL_ROOT_PASSWORD: supersecret
mywildfly:
image: arungupta/wildfly-mysql-javaee7
links:
- mysqldb:db
ports:
- 8080:8080
此基于YML的配置文件具有:
- 由名称“ mysqldb”和“ mywildfly”定义的两个容器
- 图像名称使用“图像”定义
- MySQL容器的环境变量在“环境”中定义
- MySQL容器通过“链接”与WildFly容器链接
- 使用“端口”实现端口转发
启动,验证,停止Docker容器
- 可以通过以下命令以分离模式启动所有容器:
docker-compose up -d
并将输出显示为:
Creating wildflymysqljavaee7_mysqldb_1... Creating wildflymysqljavaee7_mywildfly_1...
- 验证容器为:
docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------------- wildflymysqljavaee7_mysqldb_1 /entrypoint.sh mysqld --da ... Up 3306/tcp wildflymysqljavaee7_mywildfly_1 /opt/jboss/wildfly/customi ... Up 0.0.0.0:8080->8080/tcp, 9990/tcp
- 容器的日志可以视为:
docker-compose logs
并将输出显示为:
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 | 18:43:38,449 INFO [stdout] (ServerService Thread Pool -- 50) Hibernate: INSERT INTO EMPLOYEE_SCHEMA(ID, NAME) VALUES (6, 'Raj') mywildfly_1 | 18:43:38,452 INFO [stdout] (ServerService Thread Pool -- 50) Hibernate: INSERT INTO EMPLOYEE_SCHEMA(ID, NAME) VALUES (7, 'Howard') mywildfly_1 | 18:43:38,455 INFO [stdout] (ServerService Thread Pool -- 50) Hibernate: INSERT INTO EMPLOYEE_SCHEMA(ID, NAME) VALUES (8, 'Priya') mywildfly_1 | 18:43:39,714 INFO [org.jboss.resteasy.spi.ResteasyDeployment] (MSC service thread 1-9) Deploying javax.ws.rs.core.Application: class org.javaee7.samples.employees.MyApplication mywildfly_1 | 18:43:39,751 INFO [org.wildfly.extension.undertow] (MSC service thread 1-9) JBAS017534: Registered web context: /employees mywildfly_1 | 18:43:39,805 INFO [org.jboss.as.server] (ServerService Thread Pool -- 28) JBAS018559: Deployed "employees.war" (runtime-name : "employees.war") mywildfly_1 | 18:43:39,828 INFO [org.jboss.as] (Controller Boot Thread) JBAS015961: Http management interface listening on http://127.0.0.1:9990/management mywildfly_1 | 18:43:39,828 INFO [org.jboss.as] (Controller Boot Thread) JBAS015951: Admin console listening on http://127.0.0.1:9990 mywildfly_1 | 18:43:39,829 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: WildFly 8.2.0.Final "Tweek" started in 8393ms - Started 280 of 334 services (92 services are lazy, passive or on-demand)
- 查找主机的IP地址,如下所示:
boot2docker ip
并以以下方式访问该应用程序:
curl http://192.168.59.103:8080/employees/resources/employees/
要将输出视为:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><collection><employee><id>1</id><name>Penny</name></employee><employee><id>2</id><name>Sheldon</name></employee><employee><id>3</id><name>Amy</name></employee><employee><id>4</id><name>Leonard</name></employee><employee><id>5</id><name>Bernadette</name></employee><employee><id>6</id><name>Raj</name></employee><employee><id>7</id><name>Howard</name></employee><employee><id>8</id><name>Priya</name></employee></collection>
或在浏览器中为:
- 将容器停止为:
docker-compose stop
看到的输出为:
Stopping wildflymysqljavaee7_mywildfly_1... Stopping wildflymysqljavaee7_mysqldb_1...
Docker撰写命令
可以通过键入docker-compose
查看Docker Compose命令的完整列表,并将输出显示为:
velopment environments using Docker.
Usage:
docker-compose [options] [COMMAND] [ARGS...]
docker-compose -h|--help
Options:
--verbose Show more output
--version Print version and exit
-f, --file FILE Specify an alternate compose file (default: docker-compose.yml)
-p, --project-name NAME Specify an alternate project name (default: directory name)
Commands:
build Build or rebuild services
help Get help on a command
kill Kill containers
logs View output from containers
port Print the public port for a port binding
ps List containers
pull Pulls service images
rm Remove stopped containers
run Run a one-off command
scale Set number of containers for a service
start Start services
stop Stop services
restart Restart services
up Create and start containers
随后的博客可能会使用scale
命令。
通过在命令名称后键入-h
来显示每个命令的帮助。 例如,运行命令的帮助显示为:
docker-compose run -h
Run a one-off command on a service.
For example:
$ docker-compose run web python manage.py shell
By default, linked services will be started, unless they are already
running. If you do not want to start linked services, use
`docker-compose run --no-deps SERVICE COMMAND [ARGS...]`.
Usage: run [options] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]
Options:
--allow-insecure-ssl Allow insecure connections to the docker
registry
-d Detached mode: Run container in the background, print
new container name.
--entrypoint CMD Override the entrypoint of the image.
-e KEY=VAL Set an environment variable (can be used multiple times)
--no-deps Don't start linked services.
--rm Remove container after run. Ignored in detached mode.
--service-ports Run command with the service's ports enabled and mapped
to the host.
-T Disable pseudo-tty allocation. By default `docker-compose run`
allocates a TTY.
请享用!
翻译自: https://www.javacodegeeks.com/2015/03/docker-compose-to-orchestrate-containers.html