Server Build Exercises on AWS (Amazon Web Services) 2022 edition

build.sh

いちばん短ければ docker build . で終わりなので、こういうスクリプトは不要ですが、次の理由で用意しました

  1. 再現性(何度でも同じ環境を構築できるべき)
  2. オプションが長いから
  3. そもそも Unix では、こういったスクリプトや Makefile に実行するコマンドを書いておくのを作法と心得るべき (なんだか Infrastracture as a Code などと言うバズワードが流行していますが、 そんなことは50年来やってるんですってば! 何を今さら… ただ複数のサーバを楽に管理するテクニックまわりはIaaCの最近の成果やね)
  4. この構築ガイドでスクリプトを配布するため(これは結果論ね:-)
#!/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からそのまま引き継いでみました

Last updated on 7 Dec 2021
Published on 7 Dec 2021
Copyright (C) 2021-2022 Ken'ichi Fukamachi, All rights reserved. CC BY-NC-SA 4.0
We appreciate AWS Academy Japan for the offer of the learning environment.

Powered by Hugo. Theme by TechDoc. Designed by Thingsym.