Docker/K8S実践コンテナ開発入門@9日目

引き続きDockerの勉強をしていきます。
今回はSwarmやDIND(Docker in Docker)を利用して勉強します。

Docker/Kubernetes 実践コンテナ開発入門

Docker/Kubernetes 実践コンテナ開発入門

Dockerを起動

■実行コマンド
コンテナを起動
docker-compose up -d

Conflictのエラーがめっちゃ出る<>

Creating registry ... error

ERROR: for registry  Cannot create container for service registry: Conflict. The container name "/registry" is already in use by container "b611ef6fc0d53768e34da5943e523e25cfa8bfbfc46d47909a4d90bf4f72a5a3". You have to remove (or rename) that container to be able to reuse that name.

ERROR: for registry  Cannot create container for service registry: Conflict. The container name "/registry" is already in use by container "b611ef6fc0d53768e34da5943e523e25cfa8bfbfc46d47909a4d90bf4f72a5a3". You have to remove (or rename) that container to be able to reuse that name.

以下のコマンドを実行してストップ

dcoker stop <コンテナID>

これで解決した。

■コンテナの状態を確認

docker container ls

■Swarmを初期化する

docker container exec -it manager docker swarm init

■workerにJOINトークンを使う

docker container exec -it worker01 docker swarm join --token SWMTKN-1-0wa67vrbb5fqo99bfkzky5gwavpi5110dw47hkudrqf5sb9m4r-9p80y08srxo3rihis9hf2s122 172.26.0.3:2377
docker container exec -it worker02 docker swarm join --token SWMTKN-1-0wa67vrbb5fqo99bfkzky5gwavpi5110dw47hkudrqf5sb9m4r-9p80y08srxo3rihis9hf2s122 172.26.0.3:2377
docker container exec -it worker03 docker swarm join --token SWMTKN-1-0wa67vrbb5fqo99bfkzky5gwavpi5110dw47hkudrqf5sb9m4r-9p80y08srxo3rihis9hf2s122 172.26.0.3:2377

IPアドレスではなく、サービス名「manager」でも利用可能

実効後は以下の通りログが出力されました。
Swarmクラスタに参加したってことですかね。
This node joined a swarm as a worker.

■JOINトークン確認

docker container exec -it manager docker node ls

※managerとworkderが合計4行出力されることを確認してOK


DockerレジストリにイメージをPushする

  • docker image tagを実行
docker image tag example/echo:latest localhost:5000/example/echo:latest


■registrコンテナにイメージをpush

docker image push localhost:5000/example/echo:latest 

Docker imageをPullコマンドを実行

 docker container exec -it worker01 docker image pull registry:5000/example/echo:latest

Service
■Serviceの作成

docker container exec -it manager \
docker service create --replicas 1 --publish 8000:8080 --name echo registry:5000/example/echo:latest


途中起動が全然うまくいかなくて以下のエラーが発生

Error response from daemon: rpc error: code = InvalidArgument desc = port '8000' is already in use by service 'echo' (s3o28xu8obm6xcmxky6wcu0gb) as an ingress port

■削除コマンド

docker container exec -it manager docker service ls
docker container exec -it manager docker service rm s3o28xu8obm6
||>


■起動状態を確認
>||
docker container exec -it manager docker service ls

■scaleコマンドでdockerのコンテナ数を増減させる

docker container exec -it manager docker service scale echo=6

■スケールしたコンテナ確認

docker container exec -it manager docker service ps echo | grep Running

■削除コマンド

docker container exec -it manager docker service rm echo

Stack
Service = 1つのアプリケーション
Stack = 複数Service = 複数アプリケーションを扱える


■overlayネットワーク作成

docker container exec -it manager docker network create --driver=overlay --attachable ch03

■overlayネットワークのStack(ch03-webapi.ym)を作成

Stackをデプロイする

ymlファイルは半角スペースの位置が超重要
ちょっとでも見すると以下のエラーが飛んでしまう。(なんかエディタか何か使えば防げるんでしょうか。誰か教えて欲しい)

networks Additional property networks is not allowed


■コマンド
デプロイ後のStackを確認する

docker container exec -it manager docker stack services echo
docker container exec -it manager docker stack ps echo


Visualizerで配置されているコンテナを可視化する
■dockersamples/visualizerをデプロイ

docker container exec -it manager docker stack deploy -c /stack/visualizer.yml visualizer

■Stackの削除

docker container exec -it manager docker stack rm echo


ServiceをSwarmクラスタ外から利用する
HAProxy(多機能なプロキシサーバ)を利用してnginxに接続するserviceを作成するために、「ch03-ingress.yml」を作成する
また、ch03-webapi.ymlにPORT80の設定を追加


■deploy

docker container exec -it manager docker stack deploy -c /stack/ch03-webapi.yml echo
docker container exec -it manager docker stack deploy -c /stack/ch03-ingress.yml ingress

■表示コマンド

docker container exec -it manager docker service ls
crul http://localhost:8000/

これでDINDなど諸々必要な構成ができました。
今度は実践的なWebアプリケーションの章に移ります。
※Swarmなので最近は使わないかもしれませんが、一応やっておこうかと思います。