LoginSignup
9
8

More than 5 years have passed since last update.

Dockerのコンテナ間でMySQL通信する方法(と、自動起動設定)

Posted at

暫定設定

よくわからなかったのでこうしていた

  • システム用のコンテナがある(httpd)
  • MySQL用のコンテナがある(mysqld)
  • 2つを普通にdocker startする
  • コンテナにはそれぞれ172.17.0.2(httpd)、172.17.0.3(mysqld)が割り振られる
  • httpd側からmysql -h 172.17.0.3とすれば一応通信はできる

問題点

  • しかし、mysqldのコンテナをdocker restartしたりすると172.17.0.4になってしまい、httpd側からの接続設定が無効になってしまう
  • また、VPSが再起動してしまった際などにhttpdとmysqldが.2.3の順番になる保証がない
  • ぐぐってもコレといったセオリーはなさそう・・・

新しい設定

まだよくわからないけど、とりあえずこうすることにした

ホスト

IPアドレスを確認
(dockerのホストは常に172.17.42.1になる模様)

$ ifconfig
docker0   Link encap:Ethernet  HWaddr AE:BF:F3:9F:68:23
          inet addr:172.17.42.1  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::cc:60ff:fee0:d23f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:13496 errors:0 dropped:0 overruns:0 frame:0
          TX packets:27855 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:645599 (630.4 KiB)  TX bytes:35548124 (33.9 MiB)
eth0
...

システム用コンテナ(httpd)

$ sudo docker run -p 49164:80 -d --name httpd me/centos6_php
$ sudo docker inspect -format="{{ .NetworkSettings.IPAddress }}" httpd
172.17.0.2

MySQL用コンテナ(mysqld)

$ sudo docker run -p 49176:3306 -d --name mysqld me/centos6_php```
$ sudo docker inspect -format="{{ .NetworkSettings.IPAddress }}" mysqld
172.17.0.3
$ mysql -u root -p -e 'GRANT ALL ON *.* to "root"@"172.%";'

システム(httpd側)から接続確認

$ php -r 'new PDO("mysql:host=172.17.42.1;port=49176;dbname=system_dev","root","");'

エラーが出なければOK
めでたしめでたし

自動起動設定

ついでなので、VPSが再起動してもサービスが止まらないように設定

ホスト

dockerの自動起動設定

$ sudo yum install -y supervisor
$ ...(設定省略)
$ cat /etc/supervisord/conf/service.conf
[supervisord]
nodaemon=false

[program:docker_httpd]
command=/usr/bin/docker start -a httpd
autostart=true
autorestart=false

[program:docker_mysqld]
command=/usr/bin/docker start -a mysqld
autostart=true
autorestart=false

nginxの設定

関係ないけどnginx設定もメモ

$ cat /etc/nginx/conf.d/virtual.conf
server {
    listen 80;
    server_name dev.mysystem.jp;

    location / {
      proxy_pass http://127.0.0.1:49164;
    }
}

おわり

これで、動的な設定変更に影響されずにサービスを自動的に再稼働できるはず

9
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8