teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

全体的に手直し

2018/05/08 16:09

投稿

miyabi-sun
miyabi-sun

スコア21465

answer CHANGED
@@ -1,34 +1,41 @@
1
1
  > また、Dockerfileはわかってきたのですが、docker-compose.ymlにはイメージやコンテナ名以外に何を記述するものなのかがわかりません。コンテナを連携させるということを聞いたのですが、掴めません。
2
2
 
3
3
  一言で言ってしまえばdocker-compose.ymlは`docker run`のパラメータを記述するファイルです。
4
- (それ付随する色ん便利な恩恵はありますが、まず`docker run`を別ファイルに逃がすという役割が最も大きいでしょう)
4
+ (も様々な恩恵はありますが、`docker run`を別ファイルに逃がす役割が最も大きいでしょう)
5
- Webサーバを立ち上げる為にDBにMySQLを選択したとしましょう。
6
5
 
6
+ 質問文にMySQLとありますのでMySQLサーバを見ていきましょう。
7
- 起動コマンドは[MySQL - Docker Hub](https://hub.docker.com/_/mysql/)に書いてあります。
7
+ [MySQL - Docker Hub](https://hub.docker.com/_/mysql/)に要件が色々と書いてあります。
8
- これを元に…最初からDBや各種テーブルは作成しておいたほうが良いですよね。
8
+ これを元に`docker run`コマンドを作りましょう…最初からDBや各種テーブルは作成しておいたほうが良いですよね。
9
- 大体こんな感じのコマンドを毎回打ち込んでください。
9
+ できました。大体こんな感じのコマンドを毎回打ち込んでください。
10
10
 
11
11
  `docker run --name mysql -v /my/custom:/etc/mysql/conf.d -v /my/sqlfiles:/docker-entrypoint-initdb.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=testdb -d mysql`
12
12
 
13
+ ……って長っ!!こんな呪文覚えきれないですよ。
14
+
15
+ 続いてWebサーバのコンテナです。
16
+ コンテナ(仮想マシン)が切り離されてしまっているので、vagrantみたいにlocalhost:3306で繋ぎに行けません。
13
- Dockerはrunと同時にネットワークに所属して、nameで繋げるようすることが可能です。
17
+ そこでDocker`docker run`と同時にネットワークに所属して、nameで指定したコンテナアクセスに繋ぐ事が可能です。
14
- (linkというオプションでもいけますが、レガシー扱いになっており、何時削除されるか分からない状態です)
15
18
  基本的にDocker流儀に従う場合はDBへの接続情報等は環境変数で管理するのが良いとされているので、これまた長い呪文を使って立ち上げる事になります。
16
19
 
17
- まぁ、一回っきりなら許せますね。
20
+ 、まぁ、一回っきりなら許せますね。
18
21
 
19
22
  ---
20
23
 
21
- 3ヶ月経過し、開発が中盤に差し掛かった所で別の開発者がこう話しかけてきました。
24
+ 1ヶ月経過し、開発が中盤に差し掛かった所で同僚がこう話しかけてきました。
22
- 「MySQLのカラム更新したから、MySQLの定義ファイル修正した適用しておいてくれ」
25
+ 「MySQLのカラム更新したからよ。定義ファイル修正したから適用しておいてくれ」
23
26
 
24
- まじかよ…折角立ち上げたMySQLのコンテナ削除して立ち上げ直しです。
27
+ まじかよ…折角立ち上げたMySQLのコンテナ削除して立ち上げ直しです。
25
- 3ヶ月前に打ち込んだMySQLコンテナを起動する`docker run`のコマンド、覚えていますか?
28
+ 1ヶ月前に打ち込んだMySQLコンテナを起動する`docker run`のコマンド、覚えていますか?
26
29
 
27
- はい、覚えているわけがありませんね。
30
+ まぁ、覚えていませんね。
31
+ じゃあシェルスクリプトにMySQLの`docker run`コマンドをベタッとコピペして…
28
32
 
33
+ それもいい選択肢ですが少し待って下さい。
29
- 時に役に立つのがdocker-composeなのです。
34
+ んなの為用意されているのがdocker-composeです。
30
- さっきのDockerRunコマンドを元に、こんな感じでdocker-compose.ymlを作って置きます。
31
35
 
36
+ さっきの`docker run`コマンドを元に、こんな感じでdocker-compose.ymlを作っておきましょう。
37
+ 何となく`docker run`で出てきたオプションが盛り込まれてる事が分かります。
38
+
32
39
  ```YAML
33
40
  version: "3"
34
41
  services:
@@ -57,9 +64,7 @@
57
64
  back:
58
65
  ```
59
66
 
60
- docker-composeコマンドを利用します。
67
+ 使う時はdocker-composeコマンドを利用します。
61
- 毎回この長ったらしいコマンド名を入力するのは疲れると思いますのでaliasでも作っておくと捗るかもしれませんね。
62
- docker-composeの旧名はfigらしいので、aliasを作るならfigがオススメです。
63
68
 
64
69
  ```Bash
65
70
  # コマンドの確認
@@ -88,8 +93,14 @@
88
93
  Removing mysql_1 ... done
89
94
  ```
90
95
 
96
+ 毎回この長ったらしいコマンド名を入力するのは疲れると思いますのでaliasでも作っておくと捗るかもしれませんね。
97
+ docker-composeの旧名はfigらしいので、aliasを作るならfigがオススメです。
98
+
91
99
  コマンドの豊富さを見れば何となく分かるかと思いますが、
100
+ 起動パラメータや依存コンテナが分かるということは、コンテナの立ち上げ順番を保証してくれたり、
101
+ 一緒に起動や停止処理までしっかり面倒見てくれるので、様々な恩恵を受ける事ができます。
92
- シェルスクリプトにMySQLの`docker run`コマンドをベタッコピペしたのと比較にならな程の恩恵を受けている事が分かりま
102
+ シェルスクリプトにベタッとrunコマンドを貼り付けるだけとは大違ね)
93
103
 
94
104
  同僚が環境の事を質問してきたとしても、
95
- 「docker-compose.ymlを見れば全部書いてあるよ、そこから追ってみたら?」の一言で終わります。
105
+ 「docker-compose.ymlを見れば全部書いてあるよ、そこから追ってみたら?」の一言で終わります。
106
+ こんな風にDockerfileと併用することでサーバの要件としても使えますので、とても便利です。是非覚えましょう。

1

ちょっとだけ変えたんじゃ

2018/05/08 16:09

投稿

miyabi-sun
miyabi-sun

スコア21465

answer CHANGED
@@ -1,6 +1,7 @@
1
1
  > また、Dockerfileはわかってきたのですが、docker-compose.ymlにはイメージやコンテナ名以外に何を記述するものなのかがわかりません。コンテナを連携させるということを聞いたのですが、掴めません。
2
2
 
3
- 要約するとdocker-compose.ymlは`docker run`のパラメータを記述するファイルです。
3
+ 一言で言ってしまえばdocker-compose.ymlは`docker run`のパラメータを記述するファイルです。
4
+ (それに付随する色んな便利な恩恵はありますが、まず`docker run`を別ファイルに逃がすという役割が最も大きいでしょう)
4
5
  Webサーバを立ち上げる為にDBにMySQLを選択したとしましょう。
5
6
 
6
7
  起動コマンドは[MySQL - Docker Hub](https://hub.docker.com/_/mysql/)に書いてあります。
@@ -74,6 +75,9 @@
74
75
  # mysqlのログを参照、-fはtailと同義(Ctrl+cで抜ける)
75
76
  $ docker-compose logs -f mysql
76
77
 
78
+ # あ、ちょっとコンテナの中に入りたい
79
+ $ docker-compose exec mysql bash
80
+
77
81
  # 終わったら停止
78
82
  $ docker-compose stop
79
83
  Stopping web_1 ... done
@@ -82,4 +86,10 @@
82
86
  $ docker-compose rm -f
83
87
  Removing web_1 ... done
84
88
  Removing mysql_1 ... done
85
- ```
89
+ ```
90
+
91
+ コマンドの豊富さを見れば何となく分かるかと思いますが、
92
+ シェルスクリプトにMySQLの`docker run`コマンドをベタッとコピペしたのとは比較にならない程の恩恵を受けている事が分かります。
93
+
94
+ 同僚が環境の事を質問してきたとしても、
95
+ 「docker-compose.ymlを見れば全部書いてあるよ、そこから追ってみたら?」の一言で終わります。