Docker Swarmチュートリアルやってみた(overlayネットワーク)


参考

構成図

手順

Consulサーバ作成

仮想ホスト「mh-keystore」作成

仮想ホスト「mh-keystore」作成
docker-machine create -d virtualbox mh-keystore
「mh-keystore」上にconsulサーバコンテナ作成
docker $(docker-machine config mh-keystore) run -d \
    -p "8500:8500" \
    -h "consul" \
    progrium/consul -server -bootstrap
  • 8500portで待ち受け

仮想ホスト「mhs-demo0」作成

docker-machine create \
  -d virtualbox \
  --swarm --swarm-image="swarm" --swarm-master \
  --swarm-discovery="consul://$(docker-machine ip mh-keystore):8500" \
  --engine-opt="cluster-store=consul://$(docker-machine ip mh-keystore):8500" \
  --engine-opt="cluster-advertise=eth1:2376" \
  mhs-demo0

仮想ホスト「mhs-demo1」作成

docker-machine create -d virtualbox \
    --swarm --swarm-image="swarm:1.0.0-rc2" \
    --swarm-discovery="consul://$(docker-machine ip mh-keystore):8500" \
    --engine-opt="cluster-store=consul://$(docker-machine ip mh-keystore):8500" \
    --engine-opt="cluster-advertise=eth1:2376" \
  mhs-demo1

この時点でVirutalboxの状態は以下

docker network

swarm上にoverlay network「my-net」作成

eval $(docker-machine env --swarm mhs-demo0)
docker network create --driver overlay my-net

mhs-demo0上でnginxコンテナ作成、「my-net」に参加

eval $(docker-machine env mhs-demo0)
docker run -itd --name=web --net=my-net --env="constraint:node==mhs-demo0" nginx

別ホストで、「my-net」経由でnginxコンテナにアクセス

eval $(docker-machine env mhs-demo1)
docker run -it --rm --net=my-net --env="constraint:node==mhs-demo1" busybox wget -O- http://web
  • アクセスできたことを確認。

全ホストシャットダウンしてから再度起動の手順

  • my-netが存在しないため mhs-demo0 -> webを起動できない。
    • mh-keystore上の cunsulサーバを起動
  • mhs-demo0 -> webを起動
eval "$(docker-machine env mh-keystore)"
docker ps -a
docker start `コンテナID`

eval $(docker-machine env --swarm mhs-demo0)
docker start web

eval $(docker-machine env --swarm mhs-demo1)
docker run -it --rm --net=my-net --env="constraint:node==mhs-demo1" busybox wget web -O-