環境構築、コンテナについて調べてみた
目的
ELT処理の構築環境、管理方法の話はインフラ的な話で難しいため敬遠していたが、1度はちゃんと勉強しておく。例えばローカル環境にELTを構築していると自分が退職したらELT止まるし、もしELT処理が失敗していたらどこで失敗しているのかを特定できる必要がある。重視する観点は他メンバーへの引継ぎと全体工程の監視。
結論
コンテナ技術を使うと煩雑な環境構築作業や障害時の復旧作業から解放されそう。
これからはアプリを作り際はなるべくコンテナ化していこうと思った。
(Kubernetesは実際にやってみないと分からない部分が多そう。)
調べた内容
-
コンテナとは?
アプリケーションの依存関係をひとまとめにする技術である[1]。
仮想マシンを準備する方式と異なり、OS起動が必要ないので非常に高速に動く。
またアプリケーションの起動に必要な依存関係のみをまとめているので、
別の環境でも準備なしに動かすことができる。ただし、OSは共通である必要がある。
(dockerfileのFROMで指定する環境が動作する必要があるという理解です。)
コンテナ内に脆弱性のあるソフトが入っていると沢山のメンバーに配布した場合、
セキュリティーリスクが高まるというデメリットもある。 -
docker[1:1]
アプリケーションを簡単にコンテナ化するツールのこと- アプリケーションとは具体的に何を指すのか?
dockerfileのCMDで起動するものを指していると理解しています。そのために必要な環境をFROMからCMDまでの間に記載する必要があります。例えば公式のイメージの環境だけでアプリが動くならFROMとCMDのみで大丈夫ですが、別途何かinstallする必要があるなら、間にRUNを挟む必要があります。 - pythonのvenvとは何が違うのか?
venvはpythonライブラリのインストール状況しか管理しない。pythonライブラリ以外にも共有するべきインストールソフトがあるならdockerが必要になる。
- アプリケーションとは具体的に何を指すのか?
-
dokercompose[2]
複数のコンテナを実行するファイルのこと
dockerfileは単一アプリを実行するが、他にもDBやdbtなどを同時に起動する場合はdockercomposeファイルで実行する必要がある。
(引用サイトが分かりやすく書き方を解説してくれていてとても助かりました。) -
Kubernetes[3][4]
コンテナ管理を効率化するサービスのこと。
必要な処理量に合わせたコンテナのスケーリング(※)、トラフィックの各コンテナへのロードバランシング、障害発生時の自己修復という機能を持つ。
※ポッドに割り当てるcpu、メモリを増やしたり、ノード自体をパワーアップすること。 -
terraform
インフラ構成をコードとして管理するツール(IaCツール)のこと。クラウドサービスの構成や認証情報をコードとして管理できるため、インフラ管理が効率化できる。
Discussion