回答編集履歴
2
全体的に手直し
answer
CHANGED
@@ -1,34 +1,41 @@
|
|
1
1
|
> また、Dockerfileはわかってきたのですが、docker-compose.ymlにはイメージやコンテナ名以外に何を記述するものなのかがわかりません。コンテナを連携させるということを聞いたのですが、掴めません。
|
2
2
|
|
3
3
|
一言で言ってしまえばdocker-compose.ymlは`docker run`のパラメータを記述するファイルです。
|
4
|
-
(
|
4
|
+
(他にも様々な恩恵はありますが、`docker run`を別ファイルに逃がす役割が最も大きいでしょう)
|
5
|
-
Webサーバを立ち上げる為にDBにMySQLを選択したとしましょう。
|
6
5
|
|
6
|
+
質問文にMySQLとありますのでMySQLサーバを見ていきましょう。
|
7
|
-
|
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
|
-
|
24
|
+
1ヶ月経過し、開発が中盤に差し掛かった所で同僚がこう話しかけてきました。
|
22
|
-
「MySQLのカラム更新したから
|
25
|
+
「MySQLのカラム更新したからよ。定義ファイル修正したから適用しておいてくれ」
|
23
26
|
|
24
|
-
まじかよ…折角立ち上げたMySQLのコンテナ
|
27
|
+
まじかよ…折角立ち上げたMySQLのコンテナを削除して立ち上げ直しです。
|
25
|
-
|
28
|
+
1ヶ月前に打ち込んだMySQLコンテナを起動する`docker run`のコマンド、覚えていますか?
|
26
29
|
|
27
|
-
|
30
|
+
まぁ、覚えていませんよね。
|
31
|
+
じゃあシェルスクリプトにMySQLの`docker run`コマンドをベタッとコピペして…
|
28
32
|
|
33
|
+
それもいい選択肢ですが少し待って下さい。
|
29
|
-
こ
|
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
|
-
シェルスクリプトに
|
102
|
+
(シェルスクリプトにベタッとrunコマンドを貼り付けるだけとは大違いですね)
|
93
103
|
|
94
104
|
同僚が環境の事を質問してきたとしても、
|
95
|
-
「docker-compose.ymlを見れば全部書いてあるよ、そこから追ってみたら?」の一言で終わります。
|
105
|
+
「docker-compose.ymlを見れば全部書いてあるよ、そこから追ってみたら?」の一言で終わります。
|
106
|
+
こんな風にDockerfileと併用することでサーバの要件としても使えますので、とても便利です。是非覚えましょう。
|
1
ちょっとだけ変えたんじゃ
answer
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
> また、Dockerfileはわかってきたのですが、docker-compose.ymlにはイメージやコンテナ名以外に何を記述するものなのかがわかりません。コンテナを連携させるということを聞いたのですが、掴めません。
|
2
2
|
|
3
|
-
|
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を見れば全部書いてあるよ、そこから追ってみたら?」の一言で終わります。
|