docker swarm を(今さら)試す
docker swarm
- cruster-id 作成
$ docker run --rm swarm create 9b9bc80f30bfbf9d16142fcc031ad7a7
- master (swarm-master) 作成
$ docker-machine create \ --driver google \ --google-project myproject-1198 \ --google-zone asia-east1-a \ --google-machine-type f1-micro \ --swarm \ --swarm-master \ --swarm-discovery token://9b9bc80f30bfbf9d16142fcc031ad7a7 \ swarm-master
- node (swarm-agent) 作成
$ docker-machine create \ --driver google \ --google-project myproject-1198 \ --google-zone asia-east1-a \ --google-machine-type f1-micro \ --swarm \ --swarm-discovery token://9b9bc80f30bfbf9d16142fcc031ad7a7 \ swarm-agent
- firewall-rule作成
docker-machine createでinstanceを作成すると
docker-machine
tag が付与されるので、http通信できるようにfirewall-ruleを作成する。
$ gcloud compute firewall-rules create docker-http \ --source-ranges 0.0.0.0/0 \ --target-tags docker-machine \ --allow tcp:80
$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM swarm-agent - google Running tcp://104.155.224.60:2376 swarm-master swarm-master * google Running tcp://104.155.223.102:2376 swarm-master (master)
- 環境変数の設定
$ docker-machine env --swarm swarm-master export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://104.155.223.102:3376" export DOCKER_CERT_PATH="/Users/setoguchi/.docker/machine/machines/swarm-master" export DOCKER_MACHINE_NAME="swarm-master" # Run this command to configure your shell: # eval "$(docker-machine env --swarm swarm-master)"
$ eval "$(docker-machine env --swarm swarm-master)"
docker info
でclusterの状態を確認できる
$ docker info Containers: 6 Images: 7 Role: primary Strategy: spread Filters: health, port, dependency, affinity, constraint Nodes: 2 swarm-agent: 104.155.224.60:2376 └ Status: Healthy └ Containers: 2 └ Reserved CPUs: 0 / 1 └ Reserved Memory: 0 B / 618.7 MiB └ Labels: executiondriver=native-0.2, kernelversion=3.19.0-28-generic, operatingsystem=Ubuntu 14.04.3 LTS, provider=google, storagedriver=aufs swarm-master: 104.155.223.102:2376 └ Status: Healthy └ Containers: 4 └ Reserved CPUs: 0 / 1 └ Reserved Memory: 0 B / 618.7 MiB └ Labels: executiondriver=native-0.2, kernelversion=3.19.0-28-generic, operatingsystem=Ubuntu 14.04.3 LTS, provider=google, storagedriver=aufs CPUs: 2 Total Memory: 1.208 GiB Name: 16a45c9e82db
- databaseを作成
$ docker build -t postgres ./postgres
- databaseを起動
$ docker run --rm --name mydb postgres
- web app 作成
$ docker build -t web ./web
- web app 起動(コンテナリンクを使う)
$ docker run --rm -p 80:8080 --name myapp --link mydb:db web
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0c6fd7fe6288 web "java -jar /admission" 13 minutes ago Up 13 minutes 104.155.223.102:80->8080/tcp swarm-master/myapp 364cca700777 postgres "/usr/lib/postgresql/" 15 minutes ago Up 15 minutes 5432/tcp swarm-master/myapp/db,swarm-master/mydb
同じノードで動いてる。 コンテナリンクを使うとclusterを組んでいても同じノードで実行される。
linkをやめて再度トライ。
$ docker run --rm -p 80:8080 --name myapp web
$ docker run --rm --name mydb postgres
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 890d7dbe56e5 postgres "/docker-entrypoint.s" 20 seconds ago Up 20 seconds 5432/tcp swarm-agent/mydb b412bd500dc6 web "java -jar /admission" 48 seconds ago Up 47 seconds 104.155.223.102:80->8080/tcp swarm-master/myapp
別のノードで動いている。 が、これだと、コンテナ間の通信はできない。
マルチホストのコンテナ間での通信は
link
ではなく network
を使えば可能。