Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
61
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

DockerのMakefile

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 してしまうことがあるのでこっちかなぁ
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
61
Help us understand the problem. What are the problem?