LoginSignup
16
9

More than 5 years have passed since last update.

DockerのMakefile(2) ライブラリ

Last updated at Posted at 2015-11-16

Docker Makefileのライブラリ化

以前Makefileの記事を書きましたが、便利は便利なのですがつかっていると困ったことが出てきます。
いくつか環境構築していくとMakefileをコピーしていきます。そして環境単位でMakefileを改善すると機能があったりなかったりと最新もどれだかという事態に。
そういうわけでMakeの機能でinclude文を利用してもうほとんど書き換えない共通部分を切り出します。

共通のdocker.mk

makeにもインクルードパスがあるようで、 /usr/local/include/パスのファイルを探してくれるようです。
root権限があるならばここにパスを指定せずにインクルードできるので置くならここが良いでしょう。
権限がない場合は、ホームディレクトリに場所を決め、インクルード時にパスを指定してあげるようにするといいですね。

/usr/local/include/docker.mk
all_container=`docker ps -a -q`
active_container=`docker ps -q`
images=`docker images | awk '/^<none>/ { print $$3 }'`
attach_cmd?=/bin/bash --login

all:

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

restart: stop start

start:
    docker run -d \
        --name $(NAME) \
        -h $(NAME) \
        $(DOCKER_RUN_OPTIONS) $(NAME):$(VERSION)

stop:
    docker rm -f $(NAME)

logs:
    docker logs $(NAME)

attach:
    docker exec -it $(NAME) $(attach_cmd)

tag:
    docker tag $(NAME):$(VERSION) $(NAME):latest

clean: clean_container clean_images

clean_images:
    @if [ "$(images)" != "" ] ; then \
        docker rmi $(images); \
    fi

clean_container:
    @for a in $(all_container) ; do \
        for b in $(active_container) ; do \
            if [ "$${a}" = "$${b}" ] ; then \
                continue 2; \
            fi; \
        done; \
        docker rm $${a}; \
    done

前回からの改善点

docker run時にbashを指定するのをやめました。DockerfileCMDで指定するようにしました。
cleanの変更、現在動いていないコンテナを削除するようにしました。(ここは今後も改善していく)

呼び出し方

以下Makefileからの呼び出し例です。
NAME:コンテナ、イメージ名に使用されます。
VERSION:イメージのTAGに使用されます。
DOCKER_RUN_OPTIONS:docker runのオプションに追加されます。

ファイルを/usr/local/includeに置いた場合は以下のようにファイル名だけでOKです。
個人の場所に置いたならinclude $(HOME)/.docker/docker.mkのように書きます。

Makefile
NAME=gitlab
VERSION=7.9-20151030
DOCKER_RUN_OPTIONS=\
    --add-host=gitlab:172.17.240.1 \
    --privileged

include docker.mk

使用方法

ファイルDockerfileMakefileを同じパスに置きます。

イメージ構築

$ make build

コンテナ起動

$ make start

コンテナ停止

$ make stop

コンテナ再起動

$ make restart

コンテナ内操作

$ make attach

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

$ make clean

参考サイト

16
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
9