docker

Docker 勉強メモ①(Dockerfile)

今更ながらDockerとKubernetes勉強しています。

Dockerは触れたことあるのですが、あくまで言語学習用の環境構築のツールとしか考えておらず「python docker」でググって該当したものを拝借する程度でした。
Kubernetesは名前は知っている程度です。

AWS SAA-C02取得でAWSのサービスに触れていくにつれて環境構築周りに興味が湧いてきた次第です。

あくまで自身の勉強したことのアウトプット用の記事のためDockerをインストールしてHelloRunを出力する内容ではありません。

Dockerはイメージありき

Dockerはコンテナという印象が強かったですが、そのコンテナを作るのにはイメージが必要でありイメージをビルドしてからコンテナを作成します。

イメージは自作することも可能で、ベースとなるイメージに自身の環境にカスタマイズした設定を追加して新たにイメージを自作出来ます。

ベースイメージはDockerHubの公式イメージを利用したほうが良さそうです。
例えば、pythonとflaskの環境を構築したい場合はpythonはベースイメージとしてDockerHubから取得
flaskはDockerfile内でインストールするように設定してイメージを作成します。

上記のイメージを作成したあとにコンテナを起動します。
イメージを作成する方法はdockerコマンドとDockerfileを用いる方法があります。(composeは置いときます・・・)

慣れると分かりやすいコマンド

dockerコマンドは結びつきが強いので慣れるとコマンドで悩む回数は減って来ました。

先程書いた、イメージとコンテナ単位のコマンドに差はあれど、前後のコマンドとオプションに違いは殆ど無い印象でした。

「docker image ls」や「docker container ls」です。

イメージ、コンテナの存在を理解出来ればコマンドで悩む場面はコンテナ実行ぐらいですね。

Dockerfileは軽量化を意識する

正確にはDockerfileではなくイメージの方を軽くする、ということです。

Dockerfileを用いてイメージを作成して、その後コンテナ実行する方法が一般的です。
そのDockerfileで指定するベースイメージは容量が軽いものを選択した方が良いと言われています。

pythonやnginx入れたら200MB・300MBとなるのは好ましく無く、可能な限り軽量化を図ることで初回起動時の短縮や携帯性(ポータビリティ)の向上が可能になります。

とはいえ下手に省いて変な動きをするのは論外で、コンテナ実行後にライブラリをインストールするのもdockerの利点を潰しています。
そのため出来るとしたらベースイメージの中で軽いものを選ぶのが最も適切な手段だと思います。

ベースイメージの中で軽いもの、というのは「alpine」や「busybox」を指しています。

先程から例にあげている「python」もDockerHubには「python 3.10.0b4-alpine3.14」というものがあるためこういったものをベースイメージとすれば軽量化が図れます。