build.sh
いちばん短ければ docker build . で終わりなので、こういうスクリプトは不要ですが、次の理由で用意しました
- 再現性(何度でも同じ環境を構築できるべき)
- オプションが長いから
- そもそも Unix では、こういったスクリプトや Makefile に実行するコマンドを書いておくのを作法と心得るべき (なんだか Infrastracture as a Code などと言うバズワードが流行していますが、 そんなことは50年来やってるんですってば! 何を今さら… ただ複数のサーバを楽に管理するテクニックまわりはIaaCの最近の成果やね)
- この構築ガイドでスクリプトを配布するため(これは結果論ね:-)
#!/bin/sh
[ -d files/var ] || { tar -C ../../04-04_debian-nginx-web.py-mysql/docker -cpf - files/var | tar -xpf - ; }
docker -D build -f ./Dockerfile -t debian-www.py \
--build-arg IMAGE=debian:10.11 \
--build-arg SANDBOX_UID=0 \
--build-arg SANDBOX_USER=root \
--build-arg SANDBOX_PASSWORD=password \
--build-arg SANDBOX_HOME=/root \
--build-arg LANG=ja_JP.UTF-8 \
--build-arg LANGUAGE=ja_JP:ja \
--build-arg TIMEZONE=Asia/Tokyo \
.
上のスクリプトの3行目(下の行を参照)は、この構築ガイドのファイル編成の都合で入っているコードです。 docker build に本質的ではありません。 (マスターソースにあたる) 04-04_debian-nginx-web.py-mysql/docker/ ディレクトリの files/var 以下を ./files/var へコピーしてきています
[ -d files/var ] || { tar -C ../../04-04_debian-nginx-web.py-mysql/docker -cpf - files/var | tar -xpf - ; }
そのあとのdocker build
以降が本体です。
\
は次の行へ続くという印(C言語の使い方と同じだよ、大丈夫かな?)なので、
実際には長い一行のコマンドです。
オプションをすべて取ると
docker build .
で、このディレクトリ.
にある Dockerfile 定義ファイルをもとにコンテナを生成(build)しろという意味です。
以下、オプションの方を説明しておきます。
本来-f
オプションは不要なのですが、
オプションの紹介をかねて、-f ./Dockerfile
で Dockerfile を明示的に指定しています
-t debian-www.py
で生成されるコンテナイメージの名称(ここでは debian-www.py)を指定しています
そして、たくさんある--build-arg 変数=値
は、Dockerfile内の変数を上書きしています。
IMAGE SANDBOX_UID SANDBOX_USER SANDBOX_PASSWORD SANDBOX_HOME LANG LANGUAGE TIMEZONE
このオプションも、変数はたくさん使えるよ!という紹介もかねて書いておきました。 実のところ、本構築ガイドで、こんなにたくさん変数を使わなくてもよかったのですが、 このファイルの元になった筆者の汎用Dockerfileからそのまま引き継いでみました