【Docker】クラウドサーバーでLAMP環境構築してみたpart3

前回から続きをやっていきます

前回はPHPとMySQLの連携を行うため、手順の一つ目としてDockerfileによるPHPイメージのカスタマイズをしました

今回は手順の2つ目としてMySQLイメージの設定変更をしていきます

・MySQLイメージの設定を変更する

MySQLイメージがあるか確認

[root@dev381 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
php custom 25565093dc47 17 hours ago 388.6 MB
docker.io/php 5.6-apache 2d4c03fc6240 6 days ago 376.8 MB
docker.io/mysql 5.7 e799c7f9ae9c 4 weeks ago 407.3 MB
docker.io/centos centos6 30365b2e827c 9 weeks ago 194.7 MB

作成しているコンテナがあったら削除しておく
[root@dev381 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@dev381 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d745badfd3f 2d4c03fc6240 “/bin/sh -c ‘apt-get ” 17 hours ago Exited (1) 17 hours ago romantic_northcutt
[root@dev381 ~]# docker rm -f 4d745badfd3f
4d745badfd3f
[root@dev381 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Docker HubのMySQLイメージはcharacter setがlatin1になっている部分があるので設定ファイルを追加
/docker/mysql/custom.cnf (場所とファイル名は任意です)を以下の内容で作成します。

[mysqld]
character-set-server=utf8

[root@dev381 ~]# mkdir /docker/mysql
[root@dev381 ~]# vi /docker/mysql/custom.cnf

この設定ファイルを読み込んでMySQLコンテナを起動

docker run --name mysql -v /docker/mysql:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=pass -d mysql:5.7

-vオプションでホスト側の /docker/mysql ディレクトリとコンテナ側の /etc/mysql/conf.d ディレクトリを結びつけています。
MySQLコンテナの設定ファイルは /etc/mysql/my.cnf ですが、その中で /etc/mysql/conf.d にある設定ファイルをすべて読み込むようになっているので、作成した custom.cnf が読み込まれる仕組みです。

[root@dev381 ~]# docker run –name mysql -v /docker/mysql:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=自分で設定 -d mysql:5.7
3ae6a9f605ce8819a9f4e0da67303426b8a7fe164a53a162cdc89ecdcc0ab453

[root@dev381 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3ae6a9f605ce mysql:5.7 “docker-entrypoint.sh” 44 seconds ago Up 42 seconds 3306/tcp mysql

・PHPコンテナをMySQLコンテナとリンクして起動する

いよいよPHPコンテナとMySQLコンテナを連携します。

docker run -p 80:80 -v /docker/www:/var/www/html --link mysql:mysql --name php -d php:custom

--linkオプションでコンテナmysqlを連携します。コロンの右側で連携する名前を指定します。

[root@dev381 ~]# docker run -p 80:80 -v /docker/www:/var/www/html –link mysql:mysql –name php -d php:custom
fc6ff76aea10ef3a13df5221bebbe62fe12069d8442af7129b4e1cbdbb4c3e3d

連携が取れているか確認してみましょう。

docker exec -ti php bash

でPHPコンテナに入り、envコマンドや /etc/hosts を開きMySQLコンテナの情報が入っているか確認します。

[root@dev381 ~]# docker exec -ti php bash
root@fc6ff76aea10:/var/www/html# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 mysql 3ae6a9f605ce
172.17.0.3 fc6ff76aea10

このように先ほど--linkで指定した名前でホスト名にアクセスできます。

root@fc6ff76aea10:/var/www/html# [root@dev381 ~]#

終わったらコンテナから抜けておく(Ctr + P,Ctr + Q)

以上でPHPとMySQLの連携は完了です

次回はphpMyAdminを導入してみます

シェアする

  • このエントリーをはてなブックマークに追加

フォローする