はじまる

適当な事を適当に書く

docker やり直しメモ(5) Stacks

サービスにアプリを追加する。

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 にデータを保存するようになったので、アクセスカウンターが動くようになった。

gyazo.com

gyazo.com