Edited at

DockerのMakefile

More than 3 years have passed since last update.


dockerのコマンド

dockerのコマンドは繰り返し作業する割にはオプションが長いです。

コンテナ名など決めないとどんどん知らない名前が作られますし・・・

どこかで見たコードに Makefile でやっているのを見て自分も見よう見真似でどんどん追加して、現在の形になりました。


実行コマンド

中身はすべて docker のコマンドで書かれていますがパラメタをほとんど指定しなくて良いですし、違うイメージでもコマンドが統一されるのも良いですね。

特に docker runのコマンドは長いパラメタになるので短く打てて便利です。


イメージ構築

$ make build


コンテナ起動

長いパラメタを入力しなくて便利。

$ make start


コンテナ再起動

現在残っているコンテナを強制削除して新しく起動します。

コンテナを構築しているときは buildrestart の繰り返しになります。

$ make restart


不要イメージ、コンテナ削除

不要なイメージ、コンテナを削除、コンテナは -f オプションをしていないので現在動いているコンテナがある場合は削除でエラーになります。すべてのコンテナが止まっているときがいいでしょう。

$ make clean


その他

その他に stop logs attach がありますが $(NAME) を指定している以外はほとんどそのままです。


Makefileのテンプレート


Makefile

NAME=xxx

VERSION=xxx

build:
docker build -t $(NAME):$(VERSION) .

restart: stop start

start:
docker run -itd \
-p xxx:xxx \
-v xxx:xxx \
--name $(NAME) \
$(NAME):$(VERSION) bash

contener=`docker ps -a -q`
image=`docker images | awk '/^<none>/ { print $$3 }'`

clean:
@if [ "$(image)" != "" ] ; then \
docker rmi $(image); \
fi
@if [ "$(contener)" != "" ] ; then \
docker rm $(contener); \
fi

stop:
docker rm -f $(NAME)

attach:
docker exec -it $(NAME) /bin/bash

logs:
docker logs $(NAME)



更新


  • attachを本当のattachから exec に変更。<ctrl+p> <ctrl+q> で抜けるのはいいけど、間違えて exit してしまうことがあるのでこっちかなぁ