# 【勉強メモ】Docker01
目次
# メモ
- docker swarmを使用したコンテナの構築
- swarmについて
- docker自身が提供しているコンテナオーケストレーションエンジン
- managerがSwarmクラスタを管理、 workerと呼ばれるDockerホストへServiceが保持するコンテナを配置
- registoryはmanagerとworkerコンテナから参照される
- Dockerイメージを登録しておき、manager、workerはregistoryからDockerイメージを取得
- 任意のコンテナをmanagerとして登録
docker swarm init
docker container exec -it [managerのコンテナ名] docker swarm init
- nodeの登録
docker swarm init
実行時にJOINトークンが発行されるdocker container exec -it [workerに登録したいコンテナ名] docker swarm init
- nodeの登録がうまくいかない
- Error response from daemon: rpc error: code = Unavailable desc = grpc: the connection is unavailable
- portの開放ができていない?
- 結局バージョンをあげることで解決
- 関連
- registryにimageをアップ
- host側のport番号をタグにつけて
- docker image push localhost:5000/example/echo:latest
- registory
- docker container execでdocker内に入ってレジストリからpush
- service
- managerで定義される
- node内でコンテナをいくつ起動するかを定義
- よしなに配分される
- docker container exec -it manager docker service create --replicas 1 --publish 8000:8080 --name echo registry:5000/example/echo:latest
- スケールする場合
- docker container exec -it manager docker service scale echo=[スケールする数]
- swarm cluster > node > container(task)
- stack
- serviceをグルーピングした単位
- Swarm上のCompose
docker stack
のコマンドで実行- stackごとにoverlayネットワークが作成されその中にServiceは存在している
- 何もせってしなければoverlayネットワークを跨って通信はできない
- 先にoverlayネットワ^句を作っておいてからそれに所属させれば可能
- 何もせってしなければoverlayネットワークを跨って通信はできない
- ホストからServiceにどうアクセスするべきか
- managerにしか配置されていない場合はアクセス可能だが
- 複数のノードに分散して配置されていserviceに対してはどのようにアクセスするべきなのか
- host > proxyserver > serviceの構成を取る
- swarmによるアプリケーション構築
- overlayの設定
- mysqlのMaster/Slave構成
- 環境変数による制御
- master/slaveでそれぞれ単一のDockerイメージを作成
- バイナリログの設定
- https://purple-jwl.hateblo.jp/entry/2017/11/11/211033
- master/slave間でのレプリケーション設定
hostname -i
でホストのI`アドレスを取得
- データベースの起動前に実行が必要なスクリプトなどは
entrykit
のprehook
を使う
以下は環境構築までのメモ
docker container exec -it manager docker swarm init
docker container exec -it worker01 docker swarm join --token SWMTKN-1-0z27nrhxpqyp7xqyjsxqla21cixbxuz14suu5eqzds1fyahykd-5lbhsq7bkxohrc254fftftlth manager:2377
docker container exec -it worker02 docker swarm join --token SWMTKN-1-0z27nrhxpqyp7xqyjsxqla21cixbxuz14suu5eqzds1fyahykd-5lbhsq7bkxohrc254fftftlth manager:2377
docker container exec -it worker03 docker swarm join --token SWMTKN-1-0z27nrhxpqyp7xqyjsxqla21cixbxuz14suu5eqzds1fyahykd-5lbhsq7bkxohrc254fftftlth manager:2377
docker container exec -it manager docker node ls
docker container exec -it manager docker network create --driver=overlay --attachable todoapp
docker image push localhost:5000/ch04/tododb
docker container exec -it manager docker stack deploy -c /stack/todo-mysql.yml todo_mysql
docker container exec -it manager docker service ps todo_mysql_master --no-trunc --filter "desired-state=running" --format "docker container exec -it {{.Node}} docker container exec -it {{.Name}}.{{.ID}} bash"
docker container exec -it 7fd8a63a8750 docker container exec -it todo_mysql_master.1.xsnwk18yjvltq16d7z8ztquut init-data.sh
docker container exec -it 7fd8a63a8750 docker container exec -it todo_mysql_master.1.xsnwk18yjvltq16d7z8ztquut mysql -u gihyo -pgihyo tododb
mysql> SELECT * FROM LIMIT 1\G
docker container exec -it 4e27b1eaf17e docker container exec -it todo_mysql_slave.1.sxhv1l7fbsxzoz2un1ycogblr
docker container exec -it manager docker stack deploy -c /stack/todo-app.yml todo_app
docker container exec -it manager docker service logs -f todo_app_api
docker image push localhost:5000/ch04/nginx-nuxt:latest
docker container exec -it manager docker stack deploy -c /stack/todo-app.yml todo_app
docker image tag ch04/todoweb:latest localhost:5000/ch04/todoweb:latest
docker image push localhost:5000/ch04/todoweb:latest
docker container exec -it manager docker stack deploy -c /stack/todo-frontend.yml todo_frontend
docker container exec -it manager docker stack deploy -c /stack/todo-ingress.yml todo_ingress
curl http://localhost:8000
curl http://localhost:8000/_nuxt/vendor.02f6d802134b07f9fff1.js
ログの確認
docker exec -it manager docker service logs -f [service名]