ひゃまだのblog

ひゃまだ(id:hymd3a)の趣味のブログ

BashスクリプトのみでDockerを管理する

(2023-12-08 初稿 - )

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- . <lt;<lt;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 >gt;/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ディレクトリになるので、ファイルや実行結果の引き渡しに利用できる。

もうちょっと凝った事例が、以下のリンクにあるので、皆さんの参考になれば…

関連ページ