サービスにアプリを追加する。
docker-compose.txt を更新する
version: "3" services: web: # replace username/repo:tag with your name and image details image: username/repo:tag deploy: replicas: 5 restart_policy: condition: on-failure resources: limits: cpus: "0.1" memory: 50M ports: - "80:80" networks: - webnet visualizer: image: dockersamples/visualizer:stable ports: - "8080:8080" volumes: - "/var/run/docker.sock:/var/run/docker.sock" deploy: placement: constraints: [node.role == manager] networks: - webnet networks: webnet:
更新した docker-compose を service に反映する。
~/H/docker5 ❯❯❯ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS myvm1 - virtualbox Stopped Unknown myvm2 - virtualbox Stopped Unknown ~/H/docker5 ❯❯❯ docker-machine env myvm1 Error checking TLS connection: Host is not running ~/H/docker5 ❯❯❯ docker-machine restart myvm1 ⏎ Restarting "myvm1"... Starting "myvm1"... (myvm1) Check network to re-create if needed... (myvm1) Waiting for an IP... Machine "myvm1" was started. Waiting for SSH to be available... Detecting the provisioner... Waiting for SSH to be available... Detecting the provisioner... Restarted machines may have new IP addresses. You may need to re-run the `docker-machine env` command. ~/H/docker5 ❯❯❯ docker-machine restart myvm2 Restarting "myvm2"... Starting "myvm2"... (myvm2) Check network to re-create if needed... (myvm2) Waiting for an IP... Machine "myvm2" was started. Waiting for SSH to be available... Detecting the provisioner... Waiting for SSH to be available... Detecting the provisioner... Restarted machines may have new IP addresses. You may need to re-run the `docker-machine env` command. ~/H/docker5 ❯❯❯ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS myvm1 * virtualbox Running tcp://192.168.99.100:2376 v18.05.0-ce myvm2 - virtualbox Running tcp://192.168.99.101:2376 v18.05.0-ce ~/H/docker5 ❯❯❯ eval $(docker-machine env myvm1) ~/H/docker5 ❯❯❯ docker stack deploy -c docker-compose.yml getstartedlab Updating service getstartedlab_web (id: nuigb1fokw9ryei8v9ygyppfw) Creating service getstartedlab_visualizer ~/H/docker5 ❯❯❯
新しく追加した visualizer のプロセス(コンテナ)が稼働している。
~/H/docker5 ❯❯❯ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cabd5ef4f45a dockersamples/visualizer:stable "npm start" About a minute ago Up About a minute 8080/tcp getstartedlab_visualizer.1.2ijfurtaxb4p6k88wyxv2gq1i 00c32794b3f2 me/get-started:part2 "python app.py" About a minute ago Up About a minute 80/tcp getstartedlab_web.3.bhvt6rtjp6xevxfpheo5m98x0 a8491d81ad2e me/get-started:part2 "python app.py" About a minute ago Up About a minute 80/tcp getstartedlab_web.1.rsm3ejgwtz50fqavmfyh4fx8t
Webブラウザで 8080ポートに接続すると visualizer, 80ポートに接続すると従来のWebアプリを表示できるように変更された。
http://192.168.99.100:8080
gyazo.com
http://192.168.99.100:80
gyazo.com
サービスにDB(Redis)を追加する
docker-compose.txt に redis を追記。
version: "3" services: web: # replace username/repo:tag with your name and image details image: username/repo:tag deploy: replicas: 5 restart_policy: condition: on-failure resources: limits: cpus: "0.1" memory: 50M ports: - "80:80" networks: - webnet visualizer: image: dockersamples/visualizer:stable ports: - "8080:8080" volumes: - "/var/run/docker.sock:/var/run/docker.sock" deploy: placement: constraints: [node.role == manager] networks: - webnet redis: image: redis ports: - "6379:6379" volumes: - "/home/docker/data:/data" deploy: placement: constraints: [node.role == manager] command: redis-server --appendonly yes networks: - webnet networks: webnet:
swarm manager のなかに data ディレクトリをつくる
docker-machine ssh myvm1 "mkdir ./data"
新しい docker-compose.txt をデプロイする
~/H/docker5 ❯❯❯ eval $(docker-machine env myvm1) ~/H/docker5 ❯❯❯ docker stack deploy -c docker-compose.yml getstartedlab Updating service getstartedlab_visualizer (id: r2qmkaa6o5slmt8jhzwmcr4ti) Creating service getstartedlab_redis Updating service getstartedlab_web (id: nuigb1fokw9ryei8v9ygyppfw)
redis のプロセスが追加されて稼働を開始した。
~/H/docker5 ❯❯❯ docker service ls ID NAME MODE REPLICAS IMAGE PORTS lvucco4osp67 getstartedlab_redis replicated 1/1 redis:latest *:6379->6379/tcp r2qmkaa6o5sl getstartedlab_visualizer replicated 1/1 dockersamples/visualizer:stable *:8080->8080/tcp nuigb1fokw9r getstartedlab_web replicated 5/5 me/get-started:part2 *:80->80/tcp
Redis にデータを保存するようになったので、アクセスカウンターが動くようになった。