(2023-12-08 初稿 - 2024-05-07 修正)
Dockerをしばらく使っていると、いろいろなImageとconteinerが溜まって来るとともに、Dockerfileも溜まってきて、どれがどのDockerfileかわからなくなって来る。
(もちろん、Dockerfileに名前を付けて、呼び出すこともできるけど…)
最近、Dockerのベストプラクティスを見ていたら、Bashスクリプトの中にDockerfileを記述できることを知った。
これならば、起動のスクリプトとDockerfileを一緒にすることができて、混乱することも少なくなりそう…
ということで、さっそく簡単なBashスクリプトを作ってみた。
作ったスクリプトはテスト用なので役には立たないけど、Dockerfileの部分をADDやCOPY等いろいろと変更すれば、実用的なconteinerになると思う。
#!/usr/bin/env bash
# docker exec file
# ver0.01 start 2023-12-07 cp doc-al doc-bb
# contain Dockerfile
WORKDIR="/home/hoge/doc-bb"
DOCNAME="mybb"
DOCIMAGENAME="mybusybox"
HNAME=$HOSTNAME"-bb"
mkdir -p $WORKDIR
cd $WORKDIR
if [[ ! $(docker images | grep $DOCIMAGENAME) ]]; then
docker build -t $DOCIMAGENAME -f- . <<EOF
FROM busybox:latest
#ADD myweb / # ここを色々変更して
EOF
fi
result=$(docker ps -a | grep $DOCNAME)
#echo $result
if [[ $(echo $result | grep "Exited") ]]; then
docker start $DOCNAME >/dev/null
elif [[ ! $result ]]; then
docker run --name $DOCNAME -v $PWD:/work -h $HNAME -itd $DOCIMAGENAME
fi
docker exec -it $DOCNAME sh
ちなみに、上記のスクリプトでは doc-bbディレクトリがconteinerの/workディレクトリになるので、ファイルや実行結果の引き渡しに利用できる。
もうちょっと凝った事例が、以下のリンクにあるので、皆さんの参考になれば…