はじめに
dockerの研修をやってた時に、「うーん、docker-composeって毎回打つのめんどくさい。なにかいい方法ないかな~」で見つけたMakefileを紹介したいと思います。
Makefileとは?
Makeというプログラムのビルド作業を自動化するツールのルールを記述したテキストファイルのことです。
魔導書(Makefile)の作成
Makefileという名前のファイルを作成して以下の内容を保存します。
.PHONY: setup up d b ps node
setup:
@make up
@make ps
d:
docker compose down
up:
docker compose up -d
ps:
docker compose ps
node:
docker compose exec node bash
makefileの中身ですが
.PHONY
を記載しないとコマンドと同じ名前のファイルがある場合衝突してしまいコマンドが実行できません。(ハマりました。)
@make コマンド
を使うことでコマンドをまとめて扱うことができます。
@
はエコーしないって意味だそうです(コメント頂きましたありがとうございます。)
コマンド内容のインデントはTabを使ってください。半角スペースだと動きません。
魔術の詠唱(makeコマンドの実行)
make コマンド
で使用することができます。
コマンドを使ってみるためにymlファイルを用意しました。
version: '3.9'
services:
node:
image: node:18-slim
tty: true
init: true
ports:
- '4000:4000'
volumes:
- ./node:/node
実際にwslで使ってみましょう。
make setup
でコンテナを立ち上げて、コンテナ状態を見てみます。
root@sun33 /home/sun33/qiita/makefil # make setup
make[1]: Entering directory '/home/sun33/qiita/makefile'
docker compose up -d
[+] Running 2/2
⠿ Network makefile_default Created 0.0s
⠿ Container makefile-node-1 Started 0.5s
make[1]: Leaving directory '/home/sun33/qiita/makefile'
make[1]: Entering directory '/home/sun33/qiita/makefile'
docker compose ps
NAME COMMAND SERVICE STATUS PORTS
makefile-node-1 "docker-entrypoint.s…" node running 0.0.0.0:4000->4000/tcp, :::4000->4000/tcp
make[1]: Leaving directory '/home/sun33/qiita/makefile'
root@sun33 /home/sun33/qiita/makefile #
2つのコマンドを実行できましたね。
make node
でnodeコンテナ内に入ってみます。
root@sun33 /home/sun33/qiita/makefile # make node
docker compose exec node bash
root@333c33c333c:/#
もし同じファイルがあって.PHONY
を記載していないとコマンドが実行できません
root@sun33 /home/sun33/qiita/makefile # make node
make: 'node' is up to date.
ctrl + D または exit
コマンドでコンテナ内から出て、コンテナを破壊して見ます。
root@sun33 /home/sun33/qiita/makefile # make d
docker compose down
[+] Running 2/2
⠿ Container makefile-node-1 Removed 0.4s
⠿ Network makefile_default Removed 0.2s
root@sun33 /home/sun33/qiita/makefile #
makeコマンドを使うことでdocker-composeの長いコマンドを打たずに楽にコマンド操作ができるようになりました。
windowsの場合
windowsの場合デフォルトでmakeコマンドが使えません。
makeをinstallして設定してあげてください。
まとめ
もうmakeコマンド楽すぎて手放さなくなってしまいました。
とっても便利なので、いろいろコマンドを定義して使ってみてくださいね。おしまい。