DockerComposetoOrchestrateContainers显示了怎样使用DockerCompose运行两个链接的Docker容器。使用DockerSwarm集群化展示了怎样配置DockerSwarm集群。

该博客将展示怎样在DockerSwarm集群中运行使用DockerCompose创建的多容器应用程序。

Docker1.7.0发行了更新版本的DockerCompose和DockerSwarm。

Docker1.7.0CLI

获取最新的DockerCLI:

curl https://get.docker.com/builds/Darwin/x86_64/docker-latest > /usr/local/bin/docker

并检测版本为:

docker -v
Docker version 1.7.0, build 0baf609

Docker机器0.3.0

获取最新的Docker机器为:

curl -L https://github.com/docker/machine/releases/download/v0.3.0/docker-machine_darwin-amd64 > /usr/local/bin/docker-machine

并检测版本为:

docker-machine -v
docker-machine version 0.3.0 (0a251fe)

DockerCompose1.3.0

通过以下方法获取最新的DockerCompose:

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

并将版本验证为:

docker-compose -v
docker-compose version: 1.3.0
CPython version: 2.7.9
OpenSSL version: OpenSSL 1.0.1j 15 Oct 2014

DockerSwarm0.3.0

Swarm作为Docker容器运行LINUX 删除目录,可以下载为:

docker pull swarm

您可以在/swarm或使用DockerSwarm的集群中了解DockerSwarm。

创建DockerSwarm集群

DockerSwarm的关键组件如下所示:

docker-swarm-components

在使用DockerSwarm进行集群化中进行了解释。

Swarm入门最简单的方式是使用官方的Docker映像:

docker run swarm create

Docker Swarm cluster configuration_docker compose和swarm_Docker Compose orchestrate containers

命令返回发觉令牌,在本文档中称为,而且是惟一的集群ID。稍后在创建主节点和节点时将使用它。该群集ID由DockerHub上的托管发觉服务返回。

输出显示为:

docker run swarm create
Unable to find image 'swarm:latest' locally
latest: Pulling from swarm
55b38848634f: Pull complete
fd7bc7d11a30: Pull complete
db039e91413f: Pull complete
1e5a49ab6458: Pull complete
5d9ce3cdadc7: Pull complete
1f26e949f933: Pull complete
e08948058bed: Already exists
swarm:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:0e417fe3f7f2c7683599b94852e4308d1f426c82917223fccf4c1c4a4eddb8ef
Status: Downloaded newer image for swarm:latest
1d528bf0568099a452fef5c029f39b85

最后一行是。

请确保立刻记下该群集ID,由于之后未能列举它。这应当用#661修补。

Swarm已与DockerMachine完全集成,因而是最简单的入门技巧。接出来创建一个SwarmMaster:

docker-machine create -d virtualbox --swarm --swarm-master --swarm-discovery token:// swarm-master

将替换为上一步中获得的集群ID。

--swarm使用Swarm配置计算机,—-swarm-master将创建的计算机配置为Swarmmaster。Swarm主服务器创建与DockerHub上的托管服务进行对话,并通知己在集群中创建了主服务器。

联接到这个新创建的母版,并找到有关它的更多信息:

eval "$(docker-machine env swarm-master)"
docker info

这将输出显示为:

> docker info
Containers: 2
Images: 7
Storage Driver: aufs
 Root Dir: /mnt/sda1/var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 11
 Dirperm1 Supported: true

Docker Compose orchestrate containers_docker compose和swarm_Docker Swarm cluster configuration

Execution Driver: native-0.2 Logging Driver: json-file Kernel Version: 4.0.5-boot2docker Operating System: Boot2Docker 1.7.0 (TCL 6.3); master : 7960f90 - Thu Jun 18 18:31:45 UTC 2015 CPUs: 1 Total Memory: 996.2 MiB Name: swarm-master ID: DLFR:OQ3E:B5P6:HFFD:VKLI:IOLU:URNG:HML5:UHJF:6JCL:ITFH:DS6J Debug mode (server): true File Descriptors: 22 Goroutines: 36 System Time: 2015-07-11T00:16:34.29965306Z EventsListeners: 1 Init SHA1: Init Path: /usr/local/bin/docker Docker Root Dir: /mnt/sda1/var/lib/docker Username: arungupta Registry: https://index.docker.io/v1/ Labels: provider=virtualbox

创建一个Swarm节点:

docker-machine create -d virtualbox --swarm --swarm-discovery token:// swarm-node-01

将替换为原本步骤中获得的集群ID。

节点创建与DockerHub上的托管服务进行对话,并加入之前创建的集群。这由--swarm-discoverytoken://…指定,并指定之前获得的集群ID。

为了使其成为一个真正的集群,让我们创建第二个节点:

docker-machine create -d virtualbox --swarm --swarm-discovery token:// swarm-node-02

将替换为上一步中获得的集群ID。

列举到目前为止创建的所有节点:

docker-machine ls

显示的输出类似于以下内容:

docker-machine ls
NAME            ACTIVE   DRIVER       STATE     URL                         SWARM
lab                      virtualbox   Running   tcp://192.168.99.101:2376
summit2015               virtualbox   Running   tcp://192.168.99.100:2376

docker compose和swarm_Docker Compose orchestrate containers_Docker Swarm cluster configuration

swarm-master * virtualbox Running tcp://192.168.99.102:2376 swarm-master (master) swarm-node-01 virtualbox Running tcp://192.168.99.103:2376 swarm-master swarm-node-02 virtualbox Running tcp://192.168.99.104:2376 swarm-master

属于群集的计算机在“群集”列中具有群集的名称,否则为空白。诸如docker compose和swarm,“lab”和“summit2015”是独立的计算机,其中所有其他计算机都是“swarm-master”集群的一部份。Swarm主机也由SWARM列中的(主机)标示。

联接到Swarm集群并找到有关它的一些信息:

eval "$(docker-machine env --swarm swarm-master)"
docker info

输出显示为:

> docker info
Containers: 4
Images: 3
Role: primary
Strategy: spread
Filters: affinity, health, constraint, port, dependency
Nodes: 3
 swarm-master: 192.168.99.102:2376
  └ Containers: 2
  └ Reserved CPUs: 0 / 1
  └ Reserved Memory: 0 B / 1.022 GiB
  └ Labels: executiondriver=native-0.2, kernelversion=4.0.5-boot2docker, operatingsystem=Boot2Docker 1.7.0 (TCL 6.3); master : 7960f90 - Thu Jun 18 18:31:45 UTC 2015, provider=virtualbox, storagedriver=aufs
 swarm-node-01: 192.168.99.103:2376
  └ Containers: 1
  └ Reserved CPUs: 0 / 1
  └ Reserved Memory: 0 B / 1.022 GiB
  └ Labels: executiondriver=native-0.2, kernelversion=4.0.5-boot2docker, operatingsystem=Boot2Docker 1.7.0 (TCL 6.3); master : 7960f90 - Thu Jun 18 18:31:45 UTC 2015, provider=virtualbox, storagedriver=aufs
 swarm-node-02: 192.168.99.104:2376
  └ Containers: 1
  └ Reserved CPUs: 0 / 1
  └ Reserved Memory: 0 B / 1.022 GiB
  └ Labels: executiondriver=native-0.2, kernelversion=4.0.5-boot2docker, operatingsystem=Boot2Docker 1.7.0 (TCL 6.3); master : 7960f90 - Thu Jun 18 18:31:45 UTC 2015, provider=virtualbox, storagedriver=aufs
CPUs: 3
Total Memory: 3.065 GiB

有3个节点-1个Swarm主节点和2个Swarm节点。此群集中总共有4个容器在运行–主节点和每位节点上有一个Swarm代理docker compose和swarm,主节点上还有一个额外的swarm-agent-master。

使用以下命令列举集群中的节点:

docker run swarm list token://

输出显示为:

> docker run swarm list token://1d528bf0568099a452fef5c029f39b85
192.168.99.103:2376
192.168.99.104:2376
192.168.99.102:2376

使用DockerCompose将JavaEE应用程序布署到DockerSwarm集群

DockerComposetoOrchestrateContainers解释了怎样使用DockerCompose轻松启动多容器应用程序。

使用该博客中解释docker-compose.yml文件以如下形式启动容器:

docker-compose up -d
Creating wildflymysqljavaee7_mysqldb_1...
Creating wildflymysqljavaee7_mywildfly_1...

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

检测集群中运行的容器,如下所示:

eval "$(docker-machine env --swarm swarm-master)"
docker info

听到的输出为:

docker info
Containers: 7
Images: 5
Role: primary
Strategy: spread
Filters: affinity, health, constraint, port, dependency
Nodes: 3
 swarm-master: 192.168.99.102:2376
  └ Containers: 2
  └ Reserved CPUs: 0 / 1
  └ Reserved Memory: 0 B / 1.022 GiB
  └ Labels: executiondriver=native-0.2, kernelversion=4.0.5-boot2docker, operatingsystem=Boot2Docker 1.7.0 (TCL 6.3); master : 7960f90 - Thu Jun 18 18:31:45 UTC 2015, provider=virtualbox, storagedriver=aufs
 swarm-node-01: 192.168.99.103:2376
  └ Containers: 2
  └ Reserved CPUs: 0 / 1
  └ Reserved Memory: 0 B / 1.022 GiB
  └ Labels: executiondriver=native-0.2, kernelversion=4.0.5-boot2docker, operatingsystem=Boot2Docker 1.7.0 (TCL 6.3); master : 7960f90 - Thu Jun 18 18:31:45 UTC 2015, provider=virtualbox, storagedriver=aufs
 swarm-node-02: 192.168.99.104:2376
  └ Containers: 3
  └ Reserved CPUs: 0 / 1
  └ Reserved Memory: 0 B / 1.022 GiB
  └ Labels: executiondriver=native-0.2, kernelversion=4.0.5-boot2docker, operatingsystem=Boot2Docker 1.7.0 (TCL 6.3); master : 7960f90 - Thu Jun 18 18:31:45 UTC 2015, provider=virtualbox, storagedriver=aufs
CPUs: 3
Total Memory: 3.065 GiB

“swarm-node-02”正在运​​行三个容器,因而让我们看一下在哪里运行的容器列表:

eval "$(docker-machine env swarm-node-02)"

并查看正在运行的容器的列表linux软件工程师,如下所示:

docker ps -a
CONTAINER ID        IMAGE                             COMMAND                CREATED             STATUS              PORTS                    NAMES
b1e7d9bd2c09        arungupta/wildfly-mysql-javaee7   "/opt/jboss/wildfly/   38 seconds ago      Up 37 seconds       0.0.0.0:8080->8080/tcp   wildflymysqljavaee7_mywildfly_1
ac9c967e4b1d        mysql:latest                      "/entrypoint.sh mysq   38 seconds ago      Up 38 seconds       3306/tcp                 wildflymysqljavaee7_mysqldb_1
45b015bc79f4        swarm:latest                      "/swarm join --addr    20 minutes ago      Up 20 minutes       2375/tcp                 swarm-agent

之后可以使用以下命令再度访问该应用程序:

curl http://$(docker-machine ip swarm-node-02):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>

请享用!

翻译自:

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复