それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Dockerfileを作って試すときのコマンドが長いのでmakefileにした

dockerfile 書いたら負けってのは解る。

でも、dockerfile を書かないと、dockerのボリュームの切り分けタイミングや、entrypoint が理解できないし。

dockerfile を書いたことがないと docker hub から pull してきても使い方がわからない。

dockerfile を書いて実行するのが面倒くさい。

練習がてらに、dockerfileをたくさん書いたけど、コマンドが長くなってしまうので不便だよね。 dockerfile のサンプルをgithub で見ても殆どの人が、Rakefilemakefile を置いているので、やっぱりそうなんだと思った。

Makefile書いた

### dockerfile 単体時の設定

name = takuya-debian
.PHONY: all build run

all: build

build.log: ./Dockerfile
    @docker build -t $(name) .
    date +"%Y-%m-%d %H:%i:%s "> ./build.log

build: build.log

run:
    @docker run -it -d $(name)

## makefile 中での $() は $$() にする
login:
     @docker exec -it $$( docker ps -q  --filter 'ancestor=$(name)' -f 'status=running' )  bash


kill:
     @docker kill $$( docker ps -q  --filter 'ancestor=$(name)' -f 'status=running' ) 

makefile やコマンドを実行するときのポイント

  • 作成中の docker image にはかならず名前をつける
  • 名前を指定して実行する
  • 名前を使って終了する

docker ps の filter オプションを使う。

ubuntu のイメージを全て表示する

docker ps -a  --filter 'ancestor=ubuntu'

ubuntu のイメージで実行中のもの

docker ps -a  --filter 'ancestor=ubuntu' --filter 'status=running'

これらの他にもフィルタが在るのだけど。 docker ps をフィルタで使うことでとても楽に管理ができるようになった。

参考資料

https://docs.docker.com/engine/reference/commandline/ps/#filtering