回答編集履歴

1

Dockerを使った方式への誘導

2021/01/22 05:43

投稿

miyabi-sun
miyabi-sun

スコア21203

test CHANGED
@@ -55,3 +55,223 @@
55
55
  con.connect()
56
56
 
57
57
  ```
58
+
59
+
60
+
61
+ ---
62
+
63
+
64
+
65
+ 開発用環境のMacにMySQLを入れるのは構築難易度が高く
66
+
67
+ 権限周りの根深い問題だと思いますので、
68
+
69
+ ここはDockerを使ったMySQLサーバの構築法を案内します。
70
+
71
+ ※最新のM1 MacだとまだDockerが使えないので環境構築を続ける必要がありますが……
72
+
73
+
74
+
75
+ [Docker for Mac](https://hub.docker.com/editions/community/docker-ce-desktop-mac/)を導入していなければ、
76
+
77
+ まず公式からダウンロードします。
78
+
79
+
80
+
81
+ DockerはCLIツールなので、
82
+
83
+ コンソールを開いて操作する必要があります。
84
+
85
+ 端末を開くと`docker`や`docker-compose`のコマンドが追加されて使えるようになっているはずです。
86
+
87
+
88
+
89
+ ```bash
90
+
91
+ $ docker -v
92
+
93
+ Docker version xx.xx.x, build xxxxxxx
94
+
95
+
96
+
97
+ $ docker-compose -v
98
+
99
+ docker-compose version x.xx.x, build xxxxxxx
100
+
101
+ ```
102
+
103
+
104
+
105
+ Dockerの動作原理は
106
+
107
+ Linuxはディストリビューションが異なるOS間でも、
108
+
109
+ コンパイルした実行ファイルのファイルフォーマットが同一なので、
110
+
111
+ 仮想的なHDDをひっつけてディレクトリ構成を同じにしてやれば動くでしょ?を元にしています。
112
+
113
+
114
+
115
+ 因みにMacOSはOSが根本から違うので対象から外れますが、
116
+
117
+ Docker for Macにより仮想Linuxマシンを立ち上げて、
118
+
119
+ その中でDockerを動作させる事で実現しています。
120
+
121
+
122
+
123
+ Docker社はDocker Hubという
124
+
125
+ Dockerのイメージファイルを配布するサイトも運営しています。
126
+
127
+
128
+
129
+ その中には「MySQLサーバーを使える状態に設定済み」のイメージもあり、
130
+
131
+ 無料で配布されているので誰でもダウンロードして使う事が出来ます。
132
+
133
+ 参考リンク: [mysql - Docker Hub](https://hub.docker.com/_/mysql)
134
+
135
+
136
+
137
+ Dockerでは`docker run`コマンドを使う事で、
138
+
139
+ このDockerイメージファイルを元にコンテナを1個起動する事ができます。
140
+
141
+ (これはmysqlの説明書きにあった実行するファイルです)
142
+
143
+
144
+
145
+ ```bash
146
+
147
+ $ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
148
+
149
+ ```
150
+
151
+
152
+
153
+ 例えばこういうコマンドを`--name some-mysql`のオプションを変えつつ3回実行すると、
154
+
155
+ MySQLサーバが3個作られて動作し始めます。
156
+
157
+
158
+
159
+ しかし、このコンテナというのはすぐ壊してまた起動し直すという思想で作られているので、
160
+
161
+ コンテナを作る度に`docker run ....`を「じゅげむ」のように繰り返すわけです。
162
+
163
+ 腱鞘炎になるわ。
164
+
165
+
166
+
167
+ そこで、コマンドをYAMLファイルに記述して保管しようという
168
+
169
+ Docker Composeをセットで利用します。
170
+
171
+ 何も知識が無い所から設定するのは大変だと思うので、
172
+
173
+ 私が最初から使える状態で`docker-compose.yml`ファイルのテンプレートを用意しました。
174
+
175
+
176
+
177
+ 仕様はとりまこんな感じです。
178
+
179
+
180
+
181
+ - イメージはmysql8の最新を利用
182
+
183
+ - ユーザ名`root`、パスワード`password`で接続可能
184
+
185
+ - `localhost:3306`で接続可能(ただし、コンソールから繋ぐ場合はホスト名を`127.0.0.1`にすること)
186
+
187
+ - ファイルの永続化の為に`volumes`に値を設定して、Macマシンからディレクトリを注入してそこにファイルを書かせる仕組みにしている
188
+
189
+ - おまけとしてphpMyAdminも併設、`http://localhost:4000`で閲覧出来る
190
+
191
+
192
+
193
+ ```YAML
194
+
195
+ version: "3.6"
196
+
197
+ services:
198
+
199
+ db:
200
+
201
+ image: mysql:8
202
+
203
+ environment:
204
+
205
+ MYSQL_ROOT_PASSWORD: password
206
+
207
+ ports:
208
+
209
+ - 3306:3306
210
+
211
+ volumes:
212
+
213
+ - mysql-db:/var/lib/mysql
214
+
215
+ myadmin:
216
+
217
+ image: phpmyadmin/phpmyadmin
218
+
219
+ environment:
220
+
221
+ PMA_HOST: db
222
+
223
+ PMA_USER: root
224
+
225
+ PMA_PASSWORD: password
226
+
227
+ ports:
228
+
229
+ - 4000:80
230
+
231
+
232
+
233
+ volumes:
234
+
235
+ mysql-db:
236
+
237
+ driver: local
238
+
239
+ ```
240
+
241
+
242
+
243
+ まずこれを`docker-compose.yml`というファイルにして保存します。
244
+
245
+ 同じディレクトリで`docker-compose`コマンドを実行すると裏でYAMLファイルをロードして準備してくれるでしょう。
246
+
247
+
248
+
249
+ ```bash
250
+
251
+ # 今の状態を確認する
252
+
253
+ # 何も起動していないので何も表示されない
254
+
255
+ $ docker-compose ps
256
+
257
+
258
+
259
+ # バックグランドモードでコンテナ達を起動する
260
+
261
+ # 初回はmysqlイメージのダウンロード等から始まるので時間がかかるはず
262
+
263
+ $ docker-compose up -d
264
+
265
+
266
+
267
+ $ docker-compose ps
268
+
269
+ Name Command State Ports
270
+
271
+ -----------------------------------------------------------------------------------------------
272
+
273
+ database_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
274
+
275
+ database_myadmin_1 /docker-entrypoint.sh apac ... Up 0.0.0.0:4000->80/tcp
276
+
277
+ ```