Makefileで楽してdockerコマンドを使おう!


*大阪市本町にあるとあるラーメン屋

こんにちは!
株式会社ビヨンド大阪オフィスのラーメン王、とくはらです。
今回が初投稿なので絶賛緊張しております(汗)

この記事を書くきっかけは、就職活動時にありました。
就職活動時、ポートフォリオを作るためにVagrantで開発環境を用意していたのですが、
PCスペックも悪く....非常に動作が重く....環境としては最悪でした。
ネットやSNSで今はやりのdockerの存在を知り、用意してみたのですが...,
その時にすごく感じたことが.....『dockerコマンドマジで長くてめんどくさい…』です( TДT)
非常に動作がスムーズなのにとても惜しい...

色んなオプションを入れると20文字以上になったりとそれを毎回打ち続けるのが非常にめんどくさい
そして、これだけコマンドが長いとタイプミスもしてほんと...イライラが二倍になりました。
これを読んでるみなさんもおそらくそういう経験があるはず( ・`ω・´)キリッ

ということでたった数文字でdockerコマンドを実行できるやり方を一緒に見ていきましょう!

 

dockerとは?

 

そもそもみなさんはdockerとは何かご存知でしょうか?

 

『コンテナ技術のやつでしょう!』
『クジラのやつね!』
『とても軽量に動作するんでしょう?』

上記全て正解ですね。

 

dockerとは、コンテナ型仮想化技術を使用し、
非常に軽量で素早くプログラムを実行できるプラットフォームを指します。
これだけだとわからないと思うので少し詳しく見ていきましょうm9(´∀`●)イッテミヨーーー!!

 

 

ハイパーバイザー型仮想化とコンテナ型仮想化の違い

 

 

dockerを説明する上でよく比較される二つの仮想化技術があります。
それがハイパーバイザー型仮想化とコンテナ型仮想化でdockerは後者の仮想化が使用されています。

 

まず、二つの違いを説明する上で必要なのがハイパーバイザーとdocker Engineです。

 

 

ハイパーバイザー

 

 

ハイパーバイザーは、ホストOSとVM(仮想マシン)との間で、
VMが使用するCPUやメモリなどハードウェアをエミュレーションや制御したりしています。

これがあることで、ホストOS上に好きなゲストOSを複数作ることができ、
ホストOSとゲストOSが隔離された作りになります。

 

しかし、複数のOSを使うということは、複数カーネルを使うことになり、
オーバーヘッドが起こって処理が重くなり、VMの起動や作成に時間がかかってしまいます。

 

 

Docker Engine

 

docker Engineは、dockerの作成・起動・停止・削除など制御を行っています。
docker Desktopなどの常駐型のdockerクライアントをインストールすれば使えるようになります。

 

docker Engineには、ハイパーバイザーと違ってゲストOSを作成することはなく、
カーネルもホストOSと共有するので、オーバーヘッドが起きにくくなり、非常に高速で軽量に動作します。

 

メリットばかりに見えるdockerですが、コマンドが非常に長いことがデメリットの一つです。
具体的には以下のような長いコマンドを打つこともあります....。

docker-compose exec db bash -c 'mysql -u root -psecret'

 

 

Makeツールとは?

 

この長いコマンドを打つこともあるdockerコマンドから開放してくれるのが、
このMakeツールですヤッタァー!\(`∇\)(/`∇)/ヤッタァー!

 

どのくらい楽かというと.......

docker-compose exec db bash -c 'mysql -u root -psecret'

このコマンドが

 

 

make mysql

このコマンドだけで実行することができますヽ(´∀`*)ノ

 

このmakeツールは元々は
C言語やC++などコンパイル型のプログラミング言語で書かれたプログラムを簡単にビルドできるツールです。
でも、上記の様にコマンドを省略するために使うこともできます!!

 

それでは、インストールしていきましょう!!

 

 

 

Makeツールをインストール

⚠macの方は、標準でターミナルにインストールされているのでWindowsの方はご覧ください。

 

 

 

 

 

公式のインストーラーからインストール

 

 

 

 

 

【Complete package, except sources】のSetupをクリックしてインストーラーをインストール。

 

 

 

 

 

 

 

【Next】を押してインストーラーの指示通りにインストールしてください。

 

Makeがどこでも使えるようにWindowsで環境設定

 

 

 

 

コントロールパネル⇛システムとセキュリティ⇛システムに移動して【システム詳細設定】をクリック

 

 

 

 

 

 

 

 

 

 

【環境変数(N)..】をクリック。

設定をユーザー環境変数かシステム環境変数するかは、ご自身でお選びください。
すでに変数一覧に“Path”と設定がある場合は①を、設定がない場合は②をご覧ください。

 

①“Path”変数に追加

 

 

 

 

 

 

 

 

変数一覧から“Path”を選択して、編集をクリック。

 

 

 

 

 

 

 

 

 

空白欄をダブルクリックして以下の絶対パスを貼り付けて【OK】ボタンを押したら設定終了です!

C:\Program Files (x86)\GnuWin32\bin

 

②”Path”変数を新規追加

 

 

 

【新規】をクリックして、画像のように以下の変数名と変数値を入力して、
【OK】ボタンを押したら設定終了です!

 

 

 

Power shellで"make"と入力した後に、下記のようになっていたら設定完了です!

PS C:\Users\beyond_tokuhara>make
make: *** ターゲットが指定されておらず, makefile も見つかりません. 中止.

 

 

 

Makefileとは?

これでMakeがインストールできましたヤタ━ヽ(≧▽≦★)
でも、インストールしただけではdockerコマンドを省略することはできません...。
それを省略するためにMakefileを作成する必要があります。

Makfileとは、コンパイルや依存関係の管理などの実行するために
ルールを記述しておくファイルでmakeコマンドがそのファイルを読み込み、
そのルールに基づいて処理を実行します。
それでは、記述方法を見ていきましょう!

 

記述方法はとても簡単です。
以下の4つステップで記述できます!!

①makeコマンドに設定する引数を入力。
②windiowsユーザーはtabキーを、macユーザーは→|キーを押す。
③改行を行い、②をもう一度する。
④docker コマンドを記述する。

 

mysql:	
	docker-compose exec db bash -c 'mysql -u root -psecret'

 

 

⚠UTF-8でBOMありの場合でスペースを開けて実行すると以下のエラーが発生します。
vscodeやサクラエディタで作る場合はスペースキーではなく、
Tabキーを押してスペースを作ってください。

 

make mysql
makefile:5: *** 分離記号を欠いています.  中止.

 

 

Makeコマンドを入力

それでは、すべての準備が整ったのでコマンドを入力してみましょう!

以下のようになれば、成功ですヽ(*·ᗜ·)ノヽ(·ᗜ·* )ノ ハイタッチ!

PS C:\Users\beyond_tokuhara>make mysql   
docker-compose exec db bash -c 'mysql -u root -psecret'
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.21 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

 

⚠注意点
・dockerコマンドの省略は、カレントディレクトリにMakfileがない場合、実行できません。

・make -fで指定すれば、どこでも指定したMakfileを使うことができますが、
docker-compose.ymlとdocker-compose.yamlがあるディレクトリよりも上の階層にあるディレクトリで
Makeコマンドを実行してしまうと以下のエラーが発生するので注意してください。

PS C:\Users>make -f \Users\beyond_tokuhara\Makefile sql
docker-compose exec db bash -c 'mysql -u root -psecret'
ERROR: 
        Can't find a suitable configuration file in this directory or any
        parent. Are you in the right directory?

        Supported filenames: docker-compose.yml, docker-compose.yaml
        
make: ***  Error 1

 

まとめ

いかがでしたでしょうか?
とても簡単に!
そして、たった数文字でdockerコマンドが実行できたと思います ( -`ω-)どや!
あと、以下のようにすることでartisanコマンドもいじることもできます!

seed:
	docker-compose exec app php artisan db:seed

Makefileはエイリアスと比べて、環境に依存しにくく、
すぐにファイルを共有するだけで使えることからとても便利です。
ぜひ、みなさんもMakefileで快適なdockerライフを味わってくださいね。
記事を読んで頂き、ありがとうございました!


この記事をかいた人

About the author

徳原 秀光

新卒で内定をもらっていたが辞退してビヨンドに中途入社した人。
大阪のシステムソリューション部に所属しています。
実はラーメンが大好きで
大阪では60店舗以上潜入調査済み(。-∀-) ニヒ
ビヨンドのラーメン王とグルメ王を目指し奮闘中!!