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

Swarmによる実践的なアプリケーション構築の章を行っていきます。

 

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

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

  • 作者:山田 明憲
  • 発売日: 2018/08/25
  • メディア: 単行本(ソフトカバー)
 

 

最近ではSwarmが廃止されてKubernetesを利用することが一般的のようですが、

「一応古い技術であったとしても抑えておいた方が良い。」

というポリシーの元やってみます。

※本書の中でも「オーケストレーションシステムは多数存在しており、執筆時現在ではKubernetesデファクトの地位を確立しています。」

と注釈されています。

 

Webアプリケーションの構成について

この章で対応することはToDoアプリの扱えるように構成するようです。

RESTful APIを利用できそうなのでちょっとワクワク

第3章で利用したSwarm環境を利用します。

 

実行コマンド

■Swarmクラスタが実行されているか確認

docker container exec -it manager docker node ls

■Overlayネットワークを構築

docker container exec -it manager \

docker network create --driver=overlay --attachable todoapp

 

本章でまとめられている手順は大きく以下の通りです。

  1. データストアとなるMaster/Slave構成のMySQL Serviceの構築
  2. MySQLとデータのやり取りをするためのAPI実装
  3. webアプリケーションとAPI間にリバースプロキシとなるNginxを通じてアクセスできるように設定
  4. APIを利用してサーバサイドレンダリングをするWebアプリケーションを実装
  5. フロント側にリバースプロキシ(Nginx)を置く

上記1に関しては、次のgitクローン処理でほぼ設定済みのものが引っ張って来れます。 

 

MySQLServiceの構築

gitクローンによってtododb処理用の設定済みmysqlを持って来れます。

MySQLのgitをクローン

git clone https://github.com/gihyodocker/tododb

 

MySQLの構成で気になった点としては以下の通りです。

MySQLの構成では、replicasを増加させること(スケールアウト)で対応するとあります。

また、その際にMaster/Slave共に一時停止、ダウンタイムは許容します。」

アプリによると思いますが、昨今だとあまりダウンタイムは許容しないことが多いように思うのでそちらの設定も覚えておいた方が良いのでしょうね。

 

認証情報など諸々確認する章が続きますがコマンド実行系はないので読み進めるのみとします。※gitクローンで取得した各ファイルについての説明が記載されているのでよく理解しておくことが重要です。

 

レプリケーションの設定

■コマンド

docker image build -t ch04/tododb:latest .

実行中に赤字でログが出力されているのでびっくりしました。

別にエラーとかではないと思うのですが、なんでやろ?

f:id:lawrence-twin:20200502193103p:plain

■imageタグ付与

docker image tag ch04/tododb:latest localhost:5000/ch04/tododb:latest

■push

docker image push localhost:5000/ch04/tododb:latest

 

 

Swarm上でMaster/Slaveサービスを実行する

stack/todo-mysql.ymlを作成します。こちらは資料通りに従って作成してください。

 

その後Swarmによるデプロイを試します。

docker container exec -it manager docker stack deploy -c /stack/todo-mysql.yml todo_mysql

open /stack/todo-mysql.yml: no such file or directory

ここでエラーが発生

 

managerコンテナにymlファイルがないのが原因でしょうか。

それとも参照しているmanagerコンテナのディレクトリが誤っているのでしょうか。

前章で作成したディレクトリの下にあるstackディレクトリ配下に配置すればうまくいくかもしれません。明日以降はそこから検証しなおします。