今回作りたい構成は以下です。L4のロードバランサとしてNGINXを使用し、URLをベースに後ろのサービスを選択する形です。NGINXでSSLも終端します。各サービスはすべてDockerで個別に構築し、将来的に機能を分離しやすくします。
/home/ubuntu配下にすべて集約できるように、フォルダ構成を以下のように構築する予定です。今回はWordPressのみの構築となります。
docker/ ├── app │ └── wp01 │ └── wp02 │ └── dj01 │ └── dj02 ├── db │ └── mysql │ └── pgsql └── lb ├── config └── webroot
一時的にNGINXコンテナを立ち上げてコンフィグファイルをコピーする
一時的にNGINXのコンテナを立ち上げて、コンフィグファイルをコピーします。この手順はDocker hubのNGINXコンテナの立ち上げの中にも書かれている手順です。
$ docker run --name tmp-nginx-container -d nginx $ docker cp tmp-nginx-container:/etc/nginx ./lb/config $ docker rm -f tmp-nginx-container
Docker-Composeファイルを作成する
dockerフォルダ配下にdocker-compose.ymlファイルを作成し以下のように記述します。
version: "2" services: db: image: mysql:5.7 ports: - 3306:3306 environment: MYSQL_ROOT_PASSWORD: rootpassword command: - --table_definition_cache=400 - --performance_schema=0 restart: always volumes: - ./db/mysql/data:/var/lib/mysql lb: image: nginx restart: always ports: 80:80 443:443 volumes: ./lb/config/nginx:/etc/nginx /etc/letsencrypt:/etc/letsencrypt ./lb/webroot:/usr/share/nginx/html wp01: image: wordpress:latest ports: 32701:80 environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_PASSWORD: rootpassword WORDPRESS_DB_NAME: wp01 restart: always depends_on: - db volumes: ./app/wp01/html:/var/www/html
少しだけ解説するとポイントはdbの中でDatabaseを指定せずにwp01の中で指定することと、rootでアクセスさせることです。Create Databese権限のあるユーザーを指定することで、初期スクリプトの作成なしに、DBを自動で作成することができます。Wordpressのコンテナを増やしたい場合は、wp02 を作成することで簡単にサービスを増やすことができます。また、dbの中で指定しているcommandはメモリ消費量を抑えるための設定です。パフォーマンスは後回しにします。dockerの設定は以上です。あとは以下のコマンドで立ち上げることが出来ます。docker ps でSTATUSを確認したら、Wordpressの設定に移りましょう。
$docker-compose up -d $docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8fb30e64aaaa wordpress:latest "docker-entrypoint.s…" 2 days ago Up 34 hours 0.0.0.0:32701->80/tcp docker_wp01_1 b4109ef2aaaa mysql:5.7 "docker-entrypoint.s…" 2 days ago Up 34 hours 0.0.0.0:3306->3306/tcp, 33060/tcp docker_db_1 a2bbb4e4aaaa nginx "nginx -g 'daemon of…" 2 days ago Up 9 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp docker_lb_1