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

回答編集履歴

1

Dockerを使った方式への誘導

2021/01/22 05:43

投稿

miyabi-sun
miyabi-sun

スコア21445

answer CHANGED
@@ -26,4 +26,114 @@
26
26
  });
27
27
 
28
28
  con.connect()
29
+ ```
30
+
31
+ ---
32
+
33
+ 開発用環境のMacにMySQLを入れるのは構築難易度が高く
34
+ 権限周りの根深い問題だと思いますので、
35
+ ここはDockerを使ったMySQLサーバの構築法を案内します。
36
+ ※最新のM1 MacだとまだDockerが使えないので環境構築を続ける必要がありますが……
37
+
38
+ [Docker for Mac](https://hub.docker.com/editions/community/docker-ce-desktop-mac/)を導入していなければ、
39
+ まず公式からダウンロードします。
40
+
41
+ DockerはCLIツールなので、
42
+ コンソールを開いて操作する必要があります。
43
+ 端末を開くと`docker`や`docker-compose`のコマンドが追加されて使えるようになっているはずです。
44
+
45
+ ```bash
46
+ $ docker -v
47
+ Docker version xx.xx.x, build xxxxxxx
48
+
49
+ $ docker-compose -v
50
+ docker-compose version x.xx.x, build xxxxxxx
51
+ ```
52
+
53
+ Dockerの動作原理は
54
+ Linuxはディストリビューションが異なるOS間でも、
55
+ コンパイルした実行ファイルのファイルフォーマットが同一なので、
56
+ 仮想的なHDDをひっつけてディレクトリ構成を同じにしてやれば動くでしょ?を元にしています。
57
+
58
+ 因みにMacOSはOSが根本から違うので対象から外れますが、
59
+ Docker for Macにより仮想Linuxマシンを立ち上げて、
60
+ その中でDockerを動作させる事で実現しています。
61
+
62
+ Docker社はDocker Hubという
63
+ Dockerのイメージファイルを配布するサイトも運営しています。
64
+
65
+ その中には「MySQLサーバーを使える状態に設定済み」のイメージもあり、
66
+ 無料で配布されているので誰でもダウンロードして使う事が出来ます。
67
+ 参考リンク: [mysql - Docker Hub](https://hub.docker.com/_/mysql)
68
+
69
+ Dockerでは`docker run`コマンドを使う事で、
70
+ このDockerイメージファイルを元にコンテナを1個起動する事ができます。
71
+ (これはmysqlの説明書きにあった実行するファイルです)
72
+
73
+ ```bash
74
+ $ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
75
+ ```
76
+
77
+ 例えばこういうコマンドを`--name some-mysql`のオプションを変えつつ3回実行すると、
78
+ MySQLサーバが3個作られて動作し始めます。
79
+
80
+ しかし、このコンテナというのはすぐ壊してまた起動し直すという思想で作られているので、
81
+ コンテナを作る度に`docker run ....`を「じゅげむ」のように繰り返すわけです。
82
+ 腱鞘炎になるわ。
83
+
84
+ そこで、コマンドをYAMLファイルに記述して保管しようという
85
+ Docker Composeをセットで利用します。
86
+ 何も知識が無い所から設定するのは大変だと思うので、
87
+ 私が最初から使える状態で`docker-compose.yml`ファイルのテンプレートを用意しました。
88
+
89
+ 仕様はとりまこんな感じです。
90
+
91
+ - イメージはmysql8の最新を利用
92
+ - ユーザ名`root`、パスワード`password`で接続可能
93
+ - `localhost:3306`で接続可能(ただし、コンソールから繋ぐ場合はホスト名を`127.0.0.1`にすること)
94
+ - ファイルの永続化の為に`volumes`に値を設定して、Macマシンからディレクトリを注入してそこにファイルを書かせる仕組みにしている
95
+ - おまけとしてphpMyAdminも併設、`http://localhost:4000`で閲覧出来る
96
+
97
+ ```YAML
98
+ version: "3.6"
99
+ services:
100
+ db:
101
+ image: mysql:8
102
+ environment:
103
+ MYSQL_ROOT_PASSWORD: password
104
+ ports:
105
+ - 3306:3306
106
+ volumes:
107
+ - mysql-db:/var/lib/mysql
108
+ myadmin:
109
+ image: phpmyadmin/phpmyadmin
110
+ environment:
111
+ PMA_HOST: db
112
+ PMA_USER: root
113
+ PMA_PASSWORD: password
114
+ ports:
115
+ - 4000:80
116
+
117
+ volumes:
118
+ mysql-db:
119
+ driver: local
120
+ ```
121
+
122
+ まずこれを`docker-compose.yml`というファイルにして保存します。
123
+ 同じディレクトリで`docker-compose`コマンドを実行すると裏でYAMLファイルをロードして準備してくれるでしょう。
124
+
125
+ ```bash
126
+ # 今の状態を確認する
127
+ # 何も起動していないので何も表示されない
128
+ $ docker-compose ps
129
+
130
+ # バックグランドモードでコンテナ達を起動する
131
+ # 初回はmysqlイメージのダウンロード等から始まるので時間がかかるはず
132
+ $ docker-compose up -d
133
+
134
+ $ docker-compose ps
135
+ Name Command State Ports
136
+ -----------------------------------------------------------------------------------------------
137
+ database_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
138
+ database_myadmin_1 /docker-entrypoint.sh apac ... Up 0.0.0.0:4000->80/tcp
29
139
  ```