Docker Swarm を試す – その2

Docker

前回 の続きです。

$ docker info
Containers: 8
 Running: 4
 Paused: 0
 Stopped: 4
Images: 8
Server Version: swarm/1.1.3
Role: primary
Strategy: spread
Filters: health, port, dependency, affinity, constraint
Nodes: 2
 agent1: 192.168.99.101:2376
  └ Status: Healthy
  └ Containers: 3
  └ Reserved CPUs: 0 / 1
  └ Reserved Memory: 0 B / 1.021 GiB
  └ Labels: executiondriver=native-0.2, kernelversion=4.1.19-boot2docker, operatingsystem=Boot2Docker 1.10.3 (TCL 6.4.1); master : 625117e - Thu Mar 10 22:09:02 UTC 2016, provider=virtualbox, storagedriver=aufs
  └ Error: (none)
  └ UpdatedAt: 2016-03-16T15:06:45Z
 agent2: 192.168.99.102:2376
  └ Status: Healthy
  └ Containers: 5
  └ Reserved CPUs: 0 / 1
  └ Reserved Memory: 0 B / 1.021 GiB
  └ Labels: executiondriver=native-0.2, kernelversion=4.1.19-boot2docker, operatingsystem=Boot2Docker 1.10.3 (TCL 6.4.1); master : 625117e - Thu Mar 10 22:09:02 UTC 2016, provider=virtualbox, storagedriver=aufs
  └ Error: (none)
  └ UpdatedAt: 2016-03-16T15:06:39Z
Plugins: 
 Volume: 
 Network: 
Kernel Version: 4.1.19-boot2docker
Operating System: linux
Architecture: amd64
CPUs: 2
Total Memory: 2.043 GiB
Name: f64f0f79da4d

Swarm クラスタができたのでここに docker-compose でなにか起動してみます。

http://www.slideshare.net/zembutsu/introduction-to-docker-compose-and-swarm の zembutsu さん資料にある rocket.chat を実行してみましょう。

RocketChat/Rocket.Chat
Have your own Slack like online chat, built with Meteor. - RocketChat/Rocket.Chat
mongo:
  image: mongo
  command: mongod --smallfiles --oplogSize 128

rocketchat:
  image: rocketchat/rocket.chat:latest
  environment:
    - PORT=3000
    - ROOT_URL=http://localhost:3000
    - MONGO_URL=mongodb://mongo:27017/rocketchat
  links:
    - mongo:mongo
  ports:
    - 3000:3000

これで docker-compose up -d を実行すれば起動するはず…

$ docker-compose up -d
Traceback (most recent call last):
  File "<string>", line 3, in <module>
  File "/code/compose/cli/main.py", line 54, in main
  File "/code/compose/cli/docopt_command.py", line 23, in sys_dispatch
  File "/code/compose/cli/docopt_command.py", line 26, in dispatch
  File "/code/compose/cli/main.py", line 169, in perform_command
  File "/code/compose/cli/command.py", line 53, in project_from_options
  File "/code/compose/cli/command.py", line 89, in get_project
  File "/code/compose/cli/command.py", line 70, in get_client
  File "/code/compose/cli/docker_client.py", line 28, in docker_client
  File "/code/.tox/py27/lib/python2.7/site-packages/docker/client.py", line 50, in __init__
docker.errors.TLSParameterError: If using TLS, the base_url argument must begin with "https://".. TLS configurations should map the Docker CLI client configurations. See http://docs.docker.com/examples/https/ for API details.
docker-compose returned -1

む…

DOCKER_HOST という環境変数を

$ DOCKER_HOST=$(docker-machine ip manager):3376
$ echo $DOCKER_HOST
192.168.99.100:3376

と設定していましたが、docker-compose で使う場合は https:// をつける必要があるようです。(Problem when using the DOCKER_HOST variable in combination with docker-compose and https:// #894)

$ DOCKER_HOST=https://$(docker-machine ip manager):3376
$ echo $DOCKER_HOST
https://192.168.99.100:3376
$ docker-compose up -d
Pulling mongo (mongo:latest)...
agent1: Pulling mongo:latest... : downloaded
agent2: Pulling mongo:latest... : downloaded
Creating rocketchat_mongo_1
Pulling rocketchat (rocketchat/rocket.chat:latest)...
agent1: Pulling rocketchat/rocket.chat:latest... : downloaded
agent2: Pulling rocketchat/rocket.chat:latest... : downloaded
Creating rocketchat_rocketchat_1

今度は起動したようです。が、

$ docker ps
Invalid bind address format: https://192.168.99.100:3376

docker コマンドでは https:// がついているとダメなようです…

$ DOCKER_HOST=$(docker-machine ip manager):3376 docker ps
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                           NAMES
7a057da5bd26        rocketchat/rocket.chat:latest   "node main.js"           32 minutes ago      Up 32 minutes       192.168.99.102:3000->3000/tcp   agent2/rocketchat_rocketchat_1
470f403c7c04        mongo                           "/entrypoint.sh mongo"   33 minutes ago      Up 33 minutes       27017/tcp                       agent2/rocketchat_mongo_1,agent2/rocketchat_rocketchat_1/mongo,agent2/rocketchat_rocketchat_1/mongo_1,agent2/rocketchat_rocketchat_1/rocketchat_mongo_1

nodejs のアプリも mongo DB も agent2 側で起動してますね。docker-compose の塊は同じノードで実行される仕様なのか、たまたまなのかは要確認。

http://192.168.99.102:3000/ にアクセスすると Rocket.chat にアクセスできました。

Rocket.Chat

Rocket.Chat2

$ docker-compose logs
Attaching to rocketchat_rocketchat_1, rocketchat_mongo_1
rocketchat_1 | Updating process.env.MAIL_URL
rocketchat_1 | ufs: store created at 
rocketchat_1 | ufs: temp directory created at /tmp/ufs
rocketchat_1 | Updating process.env.MAIL_URL
rocketchat_1 | configuring push
rocketchat_1 | Using GridFS for Avatar storage
rocketchat_1 | ➔ System ➔ startup
rocketchat_1 | ➔ +---------------------------------------+
rocketchat_1 | ➔ |             SERVER RUNNING            |
rocketchat_1 | ➔ +---------------------------------------+
rocketchat_1 | ➔ |                                       |
rocketchat_1 | ➔ |       Version: 0.22.0                 |
rocketchat_1 | ➔ |  Process Port: 3000                   |
rocketchat_1 | ➔ |      Site URL: http://localhost:3000  |
rocketchat_1 | ➔ |                                       |
rocketchat_1 | ➔ +---------------------------------------+
rocketchat_1 | {"line":"71","file":"percolate_synced-cron.js","message":"SyncedCron: Scheduled \"Generate and save statistics\" next run @Wed Mar 16 2016 14:58:45 GMT+0000 (UTC)","time":{"$date":1458140325979},"level":"info"}
mongo_1      | 2016-03-16T14:57:06.297+0000 I CONTROL  [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=470f403c7c04
mongo_1      | 2016-03-16T14:57:06.298+0000 I CONTROL  [initandlisten] db version v3.2.4
mongo_1      | 2016-03-16T14:57:06.298+0000 I CONTROL  [initandlisten] git version: e2ee9ffcf9f5a94fad76802e28cc978718bb7a30
mongo_1      | 2016-03-16T14:57:06.298+0000 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.1e 11 Feb 2013
mongo_1      | 2016-03-16T14:57:06.298+0000 I CONTROL  [initandlisten] allocator: tcmalloc
mongo_1      | 2016-03-16T14:57:06.298+0000 I CONTROL  [initandlisten] modules: none
mongo_1      | 2016-03-16T14:57:06.298+0000 I CONTROL  [initandlisten] build environment:
mongo_1      | 2016-03-16T14:57:06.298+0000 I CONTROL  [initandlisten]     distmod: debian71
mongo_1      | 2016-03-16T14:57:06.298+0000 I CONTROL  [initandlisten]     distarch: x86_64
mongo_1      | 2016-03-16T14:57:06.298+0000 I CONTROL  [initandlisten]     target_arch: x86_64
...