目的
最近Dockerを自学しました、忘れないようにもの作りをしたい。
やりたいこと
docker-composeで以下のWeb環境を作りたい。
- Webサーバー:
- php+apache2
- 複数のドメイン
- https対応
- DBサーバー:
- mysql
- phpMyadmin
Dockerの勉強
お世話になったサイトを紹介します!
1. https://knowledge.sakura.ad.jp/13265/
いつもお世話になったさくらのナレッジにある記事です。結構簡単に分かりやすく書いている文書です。
入門として最初これを読んで見た方がいいでしょう
-
http://docs.docker.jp/
Docker 公式日本語サイトです。内容が多いですが、ざっくりと読みました。内容としてはちょっと古いところがあるんですが、入門には全然問題ない。 -
https://youtu.be/RppfZGuLsmA
次はYoutubeのビデオです。インド人作られた内容です。英語はなかなか慣れていないため、Youtubeの字幕を見ながら内容を見覗きました。
今回の内容で使うDockerイメージ
SteveLTN/https-portal
https-portalはhttps のリクエストを受け取り、他のコンテナの http へ転送するリバースプロキシとして動作する nginx です。
php:5.6-apache
Webサーバーを構築するイメージですが、php7もあるが、今回試験の目的で一旦php5.6を選択した。
phpmyadmin/phpmyadmin
Mysqlデータベースを管理するため、phpmyadminも入れておきたい。
docker-compose.ymlの設計
さっそくですが、docker-compose.ymlの中身を覗きます。
version: '3'
services:
web:
image: php:5.6-apache
container_name: php56-apache-web
volumes:
- "./html:/var/www/html"
- "./apache.conf:/etc/apache2/sites-enabled"
#ports:
# - "8080:80"
networks:
docker-net-001:
aliases:
- example-site1.jp
- example-site2.jp
https-portal:
image: steveltn/https-portal
ports:
- 80:80
- 443:443
restart: always
environment:
STAGE: local
DOMAINS: 'example-site1.jp -> http://example-site1.jp, example-site2.jp -> http://example-site2.jp'
networks:
- docker-net-001
mysql:
image: mysql:5.7
container_name: php56-apache-mysql
volumes:
- "./.data/mysql:/var/lib/mysql"
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpwd@12345
# MYSQL_DATABASE: wordpress
# MYSQL_USER: wordpress
# MYSQL_PASSWORD: wdpwd@12345
networks:
- docker-net-001
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: php56-apache-phpmyadmin
environment:
- PMA_HOST=php56-apache-mysql
ports:
- "3333:80"
networks:
- docker-net-001
networks:
docker-net-001:
確認ポイント
Webサーバーでは、マルチドメインを運用するので、Apacheでは、ドメイン名でバーチャルサイトを設定しています。
詳しくはapache.conf/example-site1.jp.confを参考してください。
なので、Webサーバにドメインごとにアクセスできるように設定する必要があるので、以下のようにNetworkでaliasでドメイン名ごとに定義します。
web:
....
networks:
docker-net-001:
aliases:
- example-site1.jp
- example-site2.jp
これで、https-portalでドメインごとにWEBのコンテナに設定します。
https-portal:
...
environment:
STAGE: local
DOMAINS: 'example-site1.jp -> http://example-site1.jp, example-site2.jp -> http://example-site2.jp'
mysqlとphpmyadminは特に工夫せずに大体同じサンプルコードを使っていました。
最後
今回作ったサンプルは以下のURLから参考してください。
https://github.com/lzs0627/docker-sample01