Docker-Composeでnginx,php,mysqlの3コンテナを連携する

今回はDocker-Composeを使用して本格的なWebサーバ環境を構築する準備をします。前回のnginxとphpコンテナ連携に加えてmysqlコンテナを追加して3コンテナを連携します。さらに永続データ用にWeb用とMysql用に2つのデータボリュームコンテナをBysyBoxで用意します。バージョンアップに迅速に対応できるようになるべく公式イメージをそのまま使用し不足分だけ追加インストールするようにしています。3コンテナの連携確認と今後の環境カスタマイズ用にphpmyadminをインストールして動作設定を行います。常駐コンテナ3つとデータボリュームコンテナ2つの5つの連携ですがDocker-Composeを使用すれば思ったよりも簡単に環境を構築できます。失敗してもコンテナなら簡単に破棄できて起動も瞬時ですので何度もやり直しが利きます。Docker-Composeはなかなか良さそうです。

1.全体コンテナ設計

連携したコンテナ内のデータと設定を永続化させるために以下の設計でフォルダと設定ファイルを作成します。

(1)データボリューム

data/mysqlディレクトリをmysqlコンテナにマウント

data/wwwディレクトリをnginxとphpコンテナにマウント

(2)設定ファイル

nginxコンテナでserver.confをコンテナ内にマウント

phpコンテナでphp.iniをコンテナ内にマウント

・フォルダ構成

2.Docker-Composeの設計
(1)docker-compose.yml

【コンテナサービス一覧】

コンテナサービス名 役割 関連サービス
sqldata データボリュームコンテナ(mysqlの永続データ用) dB(マウント)
wwwdata データボリュームコンテナ(nginxの永続データ用) nginx(マウント)
php (マウント)
nginx nginxタスク php(リンク)
php php-fpmタスク  dB(リンク)
db mysqlタスク

【Docker-Compose YML形式キー値差分説明】

キー 意味 値の意味
volumes コンテナ内の永続データエリアの設定。:で区切ると左がホストと右がコンテナのフォルダ対応になる。 例)

./php7/php.ini:/usr/local/etc/php/php.ini

php.iniをコンテナ内にマウント。永続化。
volumes_from FROM先のサービスのボリュームを同一構造でマウント 例)

– wwwdata

nginxとphp でwwwdataをマウント
 depends_on コンテナはdepends_onのコンテナが起動してから起動します db dbコンテナが起動してから自コンテナを起動
environment: 環境設定 MYSQL_ROOT_PASSWORD mysqlのrootパスワードを指定します。
TZ mysqlのタイムゾーンを指定します。

・前回からの差分説明

≪追加分≫

sqldataとwwdataサービスをデータボリュームコンテナとして登録しました。このコンテナは起動してもすぐに停止します。dbサービスを公式イメージメージから起動します。

≪変更分≫

nginxサービスはVolumesとしてServer.confをコンテナにマウント。Volume-fromとしてwwwdataサービスのボリュームをマウントします。php7サービスはVolumesとしphp.iniをコンテナにマウント。Volume-fromとしてwwdataサービスのボリュームをマウントします。

(2)各種設定ファイル

・php7/Dockerfile

【DockerFile使用命令一覧差分】

命令 意味
Run
コンテナでプロセスを実行します apt-get update && docker-php-ext-install pdo_mysql mysqli

phpコンテナからmysqlへ接続をする際に必要となるモジュールをインストールします。インストールが済んだらイメージをBuildします。

・php7/php.ini

タイムゾーンをAsia/Tokyoに変更。エンコードをUTF-8に言語設定を日本語にしています。

・nginx/Dockerfile

前回記事にあったserver.confのAdd命令はマウントに変更したので削除します。

・nginx/server.conf

前回と同様の設定です。後程使用するphpmyadmin用の設定を追加しておきます。

3.Docker-Composeの起動と確認

Docker-Compose.ymlファイルのあるディレクトリに移動し以下のコマンドでコンテナを起動します。

・コンテナイメージの起動確認

mysqlのイメージが「phpsql_db_1」のコンテナ名で起動しています。

・非常駐も含めたコンテナイメージの確認

上記3コンテナイメージに加えてデータボリュームコンテナの「phpsql_sqldata_1」と「phpsql_wwdata_1」コンテナイメージが存在しているのがわかります。

・Webブラウザからの確認

data/www に置いたindex.phpが参照されphpinfo()の結果が表示されます。

4.phpmyadminのインストール

php7コンテナイメージにphpmyadminをインストールします。といってもphp7コンテナに接続するのではなくphp7コンテナがマウントしているデータボリュームdata/www(ホストディレクトリ)にモジュールを配置します。

(1)phpmyadminモジュールの取得

当サイト記事「CentOS7にphpMyAdminをインストール」を参考にインストールします。

Wgetでモジュールを取得しunzip解凍します。Centosのminimal版にunzipがインストールされていないようなので、yumでインストールします。

(2)Webディレクトリへ配置

解凍したディレクトリ「phpMyAdmin-4.6.6-all-languages」をWeb公開用ディレクトリに移動します。カレントディレクトリは/home/docker/test/phpsqlの前提。

(3)phpmyadmin用設定ファイル変更

data/www/phpmyadmin/config.sample.inc.phpをコピーしてconfig.inc.phpを作成します。以下の設定を変更します。

5.phpmyadminの動作確認
(1)接続確認

webブラウザからhttp://192.168.1.9/phpmyadminで接続します。

接続できました。

(2)ログイン確認

docker-compose.ymlのenvironment:で指定したRootパスワードでログインします。

上記のように接続できたら成功です。サーバに接続できないエラーが出ることがあります。

その場合は、$cfg[‘Servers’][$i][‘host’] の値を再確認してください。

これでnginx+php+mysqlのDockerコンテナ連携環境が構築できました。

この環境設定手順をベースにDockerコンテナにwordpressインストールもできそうです。

6.参考にさせて頂いたサイト

Docker Hubのオフィシャルイメージを使ったLAMP環境(Apache+PHP+MySQL)構築

Docker Compose で PHP 7.0 の開発環境を構築する

備忘録:DockerのPHP公式のfpmイメージでどハマりしたこと

ありがとうございます。

スポンサーリンク
レクタングル大広告




レクタングル大広告




シェアする

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

フォローする

スポンサーリンク
レクタングル大広告