知らなかった。一般的なユースケースについて、参考アーキテクチャおよびそれをデプロイするための Cloudormation Template が提供されている。
Marcin Losik - Emotional Phrasing
とてもよい
Amazon Music内でMarcin LosikのEmotional Phrasingを見る https://music.amazon.co.jp/albums/B00VZ0STT8?ref=dm_sh_PzWx1lTR3MYiRPpFALBCKzIkI
Kubernates Tutorial 1
Minikube をダウンロード&インストールする
~/H/kubernates-tutorial ❯❯❯ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 && \ cmdand> chmod +x minikube && \ cmdand cmdand> sudo mv minikube /usr/local/bin/ % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 40.5M 100 40.5M 0 0 7278k 0 0:00:05 0:00:05 --:--:-- 9106k Password: ~/H/kubernates-tutorial ❮❮❮
xhyve をインストールする。ここではやくもエラー。既存の docker-machine コマンドと衝突した。
~/H/kubernates-tutorial ❯❯❯ brew install docker-machine-driver-xhyve ==> Installing dependencies for docker-machine-driver-xhyve: docker-machine, libev ==> Installing docker-machine-driver-xhyve dependency: docker-machine ==> Downloading https://homebrew.bintray.com/bottles/docker-machine-0.14.0.high_sierra.bottle.tar.gz ######################################################################## 100.0% ==> Pouring docker-machine-0.14.0.high_sierra.bottle.tar.gz Error: The `brew link` step did not complete successfully The formula built, but is not symlinked into /usr/local Could not symlink bin/docker-machine Target /usr/local/bin/docker-machine already exists. You may want to remove it: rm '/usr/local/bin/docker-machine' To force the link and overwrite all conflicting files: brew link --overwrite docker-machine To list all files that would be deleted: brew link --overwrite --dry-run docker-machine Possible conflicting files are: /usr/local/bin/docker-machine -> /Applications/Docker.app/Contents/Resources/bin/docker-machine ==> Caveats Bash completion has been installed to: /usr/local/etc/bash_completion.d zsh completions have been installed to: /usr/local/share/zsh/site-functions To have launchd start docker-machine now and restart at login: brew services start docker-machine Or, if you don't want/need a background service you can just run: docker-machine start ==> Summary 🍺 /usr/local/Cellar/docker-machine/0.14.0: 11 files, 32.1MB ==> Installing docker-machine-driver-xhyve dependency: libev ==> Downloading https://homebrew.bintray.com/bottles/libev-4.24.high_sierra.bottle.tar.gz ######################################################################## 100.0% ==> Pouring libev-4.24.high_sierra.bottle.tar.gz 🍺 /usr/local/Cellar/libev/4.24: 12 files, 432.8KB ==> Installing docker-machine-driver-xhyve ==> Downloading https://homebrew.bintray.com/bottles/docker-machine-driver-xhyve-0.3.3.high_sierra.bottle.1.tar.gz ######################################################################## 100.0% ==> Pouring docker-machine-driver-xhyve-0.3.3.high_sierra.bottle.1.tar.gz ==> Caveats This driver requires superuser privileges to access the hypervisor. To enable, execute sudo chown root:wheel /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve sudo chmod u+s /usr/local/opt/docker-machine-driver-xhyve/bin/docker-machine-driver-xhyve ==> Summary 🍺 /usr/local/Cellar/docker-machine-driver-xhyve/0.3.3: 3 files, 10.5MB ~/H/kubernates-tutorial ❯❯❯
overwrite するとなにかあるかもなので、中止。
Kubernates Tutorial メモ
はじめに
Docker と Docker Swarm の復習をしたので、今度は Kubernates を調べる。Docker イメージ/コンテナの運用を Swarm でやるの面倒そうだし、Docker イメージ/コンテナの稼働/運用ツールのデファクトスタンダードが Kubernates なので、遅ればせながらやる。
なにをやる
これをやる。
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 にデータを保存するようになったので、アクセスカウンターが動くようになった。
docker やり直しメモ(4) 横道
# マシン再起動の後 ~/H/docker4 ❯❯❯ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS myvm1 - virtualbox Stopped Unknown myvm2 - virtualbox Stopped Unknown # DOCKER* の環境変数は設定されていない状態 ~/H/docker4 ❯❯❯ env|ag DOCKER # 前述の2つのVM(Swarm の node)を起動する ~/H/docker4 ❯❯❯ 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/docker4 ❯❯❯ 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. # docker-machine の起動状態を確認 ~/H/docker4 ❯❯❯ 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/docker4 ❯❯❯ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ~/H/docker4 ❯❯❯ docker stack ls Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again. ~/H/docker4 ❯❯❯ docker-machine env myvm1 ⏎ export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.100:2376" export DOCKER_CERT_PATH="/Users/satoru/.docker/machine/machines/myvm1" export DOCKER_MACHINE_NAME="myvm1" # Run this command to configure your shell: # eval $(docker-machine env myvm1) # 手元から myvm1(swarm manager)の中にはいる ~/H/docker4 ❯❯❯ eval $(docker-machine env myvm1) # myvm1(swarm manager)の中でスタックの確認 ~/H/docker4 ❯❯❯ docker stack ls NAME SERVICES getstartedlab 1 # myvm1(swarm manager)の中でコンテナ稼働中。 ~/H/docker4 ❯❯❯ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b559f4feca31 me/get-started:part2 "python app.py" 2 minutes ago Up 2 minutes 80/tcp getstartedlab_web.1.jibwht3xvh0nccpanxhe0e7f3 2f912f6c0e01 me/get-started:part2 "python app.py" 3 minutes ago Up 3 minutes 80/tcp getstartedlab_web.3.8bk7vrtv5s20l14p9bv03l3x7 0731ecaad1ed me/get-started:part2 "python app.py" 3 minutes ago Up 3 minutes 80/tcp getstartedlab_web.2.tr8aftd3w451d4twq8s39rndr ~/H/docker4 ❯❯❯
アプリが稼働している。 host が myvm1 gyazo.com
host が myvm2 gyazo.com
~/H/docker4 ❯❯❯ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b559f4feca31 me/get-started:part2 "python app.py" 2 minutes ago Up 2 minutes 80/tcp getstartedlab_web.1.jibwht3xvh0nccpanxhe0e7f3 2f912f6c0e01 me/get-started:part2 "python app.py" 3 minutes ago Up 3 minutes 80/tcp getstartedlab_web.3.8bk7vrtv5s20l14p9bv03l3x7 0731ecaad1ed me/get-started:part2 "python app.py" 3 minutes ago Up 3 minutes 80/tcp getstartedlab_web.2.tr8aftd3w451d4twq8s39rndr
停止する
~/H/docker4 ❯❯❯ docker-machine stop myvm2 Stopping "myvm2"... Machine "myvm2" was stopped. ~/H/docker4 ❯❯❯ docker-machine stop myvm1 Stopping "myvm1"... Machine "myvm1" was stopped.
docker やり直しメモ(4)
パート4:群(Swarm)
Get Started, Part 4: Swarms | Docker Documentation の内容をやります。
1. スウォームとは
Dockerを実行していてクラスタに参加しているマシンのグループです。クラスタは swarm manager
によって管理されます。
スウォームに参加しているマシンは、物理マシン・仮想マシン両方の場合で、ノードとよばれます。スウォームマネージャーは、スウォーム内であなたのコマンドを実行できる唯一のマシンです。スウォームマネージャーは、他のマシンがスウォームにワーカーとして参加することも許可できます。ワーカーは、能力を提供するためだけに存在し、他のマシンに何ができるかできないかを伝える権限を持っていません。
~/H/docker2 ❯❯❯ docker swarm --help Usage: docker swarm COMMAND Manage Swarm Options: Commands: ca Display and rotate the root CA init Initialize a swarm join Join a swarm as a node and/or manager join-token Manage join tokens leave Leave the swarm unlock Unlock swarm unlock-key Manage the unlock key update Update the swarm Run 'docker swarm COMMAND --help' for more information on a command.
2. スウォームを作成する
VMを作成する。
docker-machine コマンドを利用して、仮想マシンを2つ作成してみます。この動作には virtualbox が必要です。
docker-machine create --driver virtualbox myvm1 docker-machine create --driver virtualbox myvm2
こんな感じになります。
~/H/docker4 ❯❯❯ docker-machine create --driver virtualbox myvm1 Running pre-create checks... (myvm1) Default Boot2Docker ISO is out-of-date, downloading the latest release... (myvm1) Latest release for github.com/boot2docker/boot2docker is v18.05.0-ce (myvm1) Downloading /Users/satoru/.docker/machine/cache/boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v18.05.0-ce/boot2docker.iso... (myvm1) 0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100% Creating machine... (myvm1) Copying /Users/satoru/.docker/machine/cache/boot2docker.iso to /Users/satoru/.docker/machine/machines/myvm1/boot2docker.iso... (myvm1) Creating VirtualBox VM... (myvm1) Creating SSH key... (myvm1) Starting the VM... (myvm1) Check network to re-create if needed... (myvm1) Waiting for an IP... Waiting for machine to be running, this may take a few minutes... Detecting operating system of created instance... Waiting for SSH to be available... Detecting the provisioner... Provisioning with boot2docker... Copying certs to the local machine directory... Copying certs to the remote machine... Setting Docker configuration on the remote daemon... Checking connection to Docker... Docker is up and running! To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env myvm1
Virtualbox の画面でも仮想マシンが作成されていますね。
VMのIPアドレスを確認する
~/H/docker4 ❯❯❯ 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
Swarm を初期化する
myvm1を swarm manager に指定します。
~/H/docker4 ❯❯❯ docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100" Swarm initialized: current node (ph13skaro0wq0010iau1jt5i5) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-2vquyyieen6whiz3pmtidp7a7q9mxzaxeiz4q7wszz0dgmiste-cnxryi4ktbxro2jzt68t9wb3o 192.168.99.100:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
myvm2 を ノードとして swarm に追加します。
~/H/docker4 ❯❯❯ docker-machine ssh myvm2 "docker swarm join --token SWMTKN-1-2vquyyieen6whiz3pmtidp7a7q9mxzaxeiz4q7wszz0dgmiste-cnxryi4ktbxro2jzt68t9wb3o 192.168.99.100:2377" This node joined a swarm as a worker. ~/H/docker4 ❯❯❯ docker-machine ssh myvm1 "docker node ls" ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION ph13skaro0wq0010iau1jt5i5 * myvm1 Ready Active Leader 18.05.0-ce xyqexicll5f17le0n4w5e6epu myvm2 Ready Active 18.05.0-ce
環境変数を確認します。
自分のローカルにmyvm1の環境変数を設定します。
~/H/docker4 ❯❯❯ eval $(docker-machine env myvm1) ~/H/docker4 ❯❯❯ env|ag DOCKER DOCKER_TLS_VERIFY=1 DOCKER_HOST=tcp://192.168.99.100:2376 DOCKER_CERT_PATH=/Users/me/.docker/machine/machines/myvm1 DOCKER_MACHINE_NAME=myvm1