DockerでMySQL環境を構築する③

公開日:2019-04-02
最終更新:2019-04-02

茶番①

前回からの続き
ど:そうでもないかもよ・・・
の:え?
ど:いままではコンテナが2つしかなかったけどもっと増えたらどうなると思う?
の:コンテナの数だけ起動していけばいいんじゃないの?
ど:それだと数が増えるほどめんどくさいし、起動し忘れるものがあるかもしれないよ?
の:たしかに・・・、じゃあどうすればいいの?
ど:そんなときはこれ (=゚ω゚)つ「docker-compose」
の:どっかーこんぽーず? なにそれ?
ど:それはね・・・

解説①

いままでは↓のようにコンテナを都度 docker runで起動する必要があった

# busyboxという軽量なコンテナを使用    
$ docker run -d --name storage -v /var/lib/mysql busybox    
# ↑で作成したコンテナを参照するように--volumes-from で指定する    
$ docker run -d --volumes-from storage -e MYSQL_ROOT_PASSWORD=mysql --name mysql mysql:8.0    

それがdocker-composeを使うと・・・

$ docker-compose up -d  
# 定義した分が一括で起動する  
Starting storage ... done  
Starting mysql   ... done  

# MySQL環境を実行  
$ docker exec -it mysql  bash  
$ mysql -h 127.0.0.1 --port 3306 -u root -p mysql    
Enter password: mysql  

# SQL実行  
mysql>  select * from todo.tasks;  
# この通り同じように実行することができる  
+----+------------+------------+---------------------+---------------------+  
| id | title      | body       | created_at          | updated_at          |  
+----+------------+------------+---------------------+---------------------+  
|  1 | First task | test data1 | 2019-04-01 22:28:34 | 2019-04-01 22:28:34 |  
+----+------------+------------+---------------------+---------------------+  
1 row in set (0.00 sec)  

GUIからでもちゃんと確認できてます!

※関係ないですけどDBeaverは使いやすくておすすめですよ

茶番②

の:すごい便利じゃん、けどどうしてdocker-compose upだけでこんなことができるの?
ど:あらかじめymlファイルに使いたいコンテナの定義づけをしておいたからなんだ
の:ymlファイルっていうのにdocker runで使ってたコマンドを記述すればいいの?
ど:そういうわけでもないんだよ
の:えーせっかくルールを覚えたのに・・・
ど:わりとルールが似てるから覚えたことは無駄にはならないよ
の:ほんとに? どうやって記述すればいいの?
ど:それはね・・・

解説?②

解説①で使ったdocker-compose.ymlが↓

# busybox  
storage:  
  image: busybox  
  container_name: storage  
  volumes:  
    - /home/vagrant/opt/storage:/var/lib/mysql  


# mysql  
mysql:  
  image: mysql:8.0  
  container_name: mysql  
  volumes_from:  
    - storage  
  ports:  
    - "127.0.0.1:3306:3306"  
  environment:  
    MYSQL_ROOT_PASSWORD: mysql  
  • 2行目のstoregeはnameにあたるところでコンテナの名前を定義づけている
  • 3行目のimageはそのものズバリでDockerのイメージ
  • 4行目のcontainer_nameはコンテナ名の定義づけ
  • 5行目のvolumesがディレクトリ指定で-vオプションにあたるもの
  • 13行目のvolumes_fromボリュームのマウント先で--volumes-fromにあたるもの
  • 15行目のportsはポートの指定
  • 17行目のenvironmentは環境変数の定義づけ

その他のオプションはここがとても参考になりました。

茶番③

ど:最低でもimagebuild(Dockerfileを指定)を使って、ほかにオプションを指定する必要があればymlに定義づけていけばいいみたいだね
の:できた!これで今度こそかんぺきだね!(。-`ω-)
ど:きみはそうやってすぐ調子に乗るんだから・・・

次回予告

あるかもしれないしないかもしれないし

記事が少しでもいいなと思ったらクラップを送ってみよう!
11
+1
JakartaEEやらの技術ブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする