Docker の長い引数が辛い

Docker という人類の叡智の結晶に触れてから(書いる時点で)まだ数日も経っていない。しかし気づいた。Docker の引数は、長い。そして、難しい。叡智とはいうがどこに結実したかというともっと低レイヤーな部分で、コマンドは黒魔術めいている。

喚いてもしょうがないのでどうにかしたかった。ホモサピは三文節以上のコマンドを覚えられない(要出典)ので、引数がたくさんある場合は略するのが適当である。例えば docker run --interactive --tty --detach ...docker run -itd なりと略される。なるほど短い。しかし意味は理解不能になった。というか文字数が減っただけで引数自体は残っている。メインコマンドを除けば2文節だが、人類の無理に近い。またこういった略称は意味がわからなくなり無駄な認知負荷がかかる。どうにかしたい。

古のビルドシステムに立ち返る: GNU Make

Makefile というものがある。C のビルドや最近は Go の各種タスクの利用に使う。Makefile の実態は Make の設定記述書である。一見言語依存のビルドシステムに思われがちだが、もっと単純なことにも使える。

今回の目的は長い引数を滅殺することである。Make は C のややこしいビルドの記述を楽にやれる。その原理はややこしいコマンドをタスク単位にまとめて実行することである。タスクランナーに似ている。

タスクランナーのように動くなら、タスクランナーとして使える。

Docker のコマンドを Makefile にする

ここでは Makefile の仕様を詳説しない。結果だけ示す。

NAME=project
VERSION=latest

.PHONY: build
build:
	docker build --tag $(NAME):$(VERSION) .

.PHONY: start
start:
	docker run --interactive --tty --detach --name $(NAME) $(NAME):$(VERSION) ash

.PHONY: stop
stop:
	docker rm --force $(NAME)

.PHONY: attach
attach:
	docker exec --interactive --tty $(NAME) /bin/ash

.PHONY: clean
clean:
	docker rmi --force $(NAME)

主要なコマンドを make のタスクに詰めている。イメージの作成は make build で済む。コンテナの実行は make start 、コンテナに入るなら make attach などとする。

コマンドの引数もいちいち打たなくてよくなるから、略称でなくきちんと書けば済む。そうすると意味を失うことなく読みやすい Makefile になる。実行はすべて make を介して抽象的に行える。具体的な実行の委細は Makefile に委ね、必要なら Makefile を書き換えればよい。実行するコマンドは同じで挙動を上手に変えられる……。

あ、以上です。

参考文献・参考資料

DockerのMakefile

Makefile の部分は概ねここの受け売りである。先駆者のアイデアと知識があってこそのこの記事である。なお、引数の記述はわたしの方針に合わせて調節している。

とほほのDocker入門

引数の調査にこのサイトを利用した。インターネット上に四散している Docker の情報の中でも特にわかりやすいと思う。思えば HTML を手打ちしている時代からこのサイトにお世話になっている。つ、つまり……すごい、長寿……!

Make for Windows

もし環境が Windows ならこれをいれてパスを通せば動く。

%d人のブロガーが「いいね」をつけました。