70
71

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

docker-composeを詠唱する黒魔術「Makefile」入門

Last updated at Posted at 2023-02-27

はじめに

dockerの研修をやってた時に、「うーん、docker-composeって毎回打つのめんどくさい。なにかいい方法ないかな~」で見つけたMakefileを紹介したいと思います。

Makefileとは?

Makeというプログラムのビルド作業を自動化するツールのルールを記述したテキストファイルのことです。

魔導書(Makefile)の作成

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ファイルを用意しました。

docker-compose.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コマンド楽すぎて手放さなくなってしまいました。
とっても便利なので、いろいろコマンドを定義して使ってみてくださいね。おしまい。

70
71
4

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
70
71

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?