[Docker] イメージの自作

httpdイメージには、PHPをインストールするためのパッケージやビルドするための環境などが含まれていない

### よく使われるベースイメージ
debian: なんでもしたいときはdebianが多い
ubuntu: ubuntuフルセット
alpine: muslとBusyBoxをベース パッケージマネージャが付属しているため、busyboxよりこちらの方が使い勝手が良い
busybox: 組み込み目的で作られた小さいLinux

※2.4-alpineなどはalpineをベースに作られたもの
Linuxカーネルは、その下で動いているUbuntuのものなどが使われる。コンテナの中にカーネルはない

– レイヤーの確認(mysqlのレイヤーを確認する)
$ sudo docker image rm mysql:5.7
$ sudo docker pull mysql:5.7
5.7: Pulling from library/mysql
a4b007099961: Pull complete
e2b610d88fd9: Pull complete
38567843b438: Pull complete
5fc423bf9558: Pull complete
aa8241dfe828: Pull complete
cc662311610e: Pull complete

「a4b007…」「e2b610…」「38567…」がレイヤーに相当するイメージ

– Dockerの流儀に従って作る
Dockerfileのベストプラクティス
https://docs.docker.jp/engine/articles/dockerfile_best-practice.html
– 1つのコンテナは1つの処理しかしない
– 利用するポートを明確にする
– 永続化すべき場所を明確にする
– 設定は環境変数で渡す
– ログは標準出力に書き出す
– メインプログラムが終了するとコンテナが終了

ベースイメージに何を使うべきなのかずっと疑問だったが、ある程度理解できた。
バッチのところがやや課題か…