インフラ構築の自動化
Docker がもたらしてくれるもの
インフラ構築自動化の必要性
重要度とコストの章で、「必要な時だけサーバーを立ち上げる」ことや、「ローカルサーバーの構築が完璧に成されている」ことに、言及しましたが、これらを実現するにあたって、インフラの構築を自動化出来ることは、大変有用です。
そのために使っていきたいのが、Dockerというプラットフォームです。
Dockerってなに?
1台のPC上に複数の仮想実行環境(コンテナ)を作成・実行できるプラットフォームです。
仮想サーバーの新設はもちろん、移転なども、複雑な手順を省いて行うことが出来るよう、整備されています。
プロダクションサーバーの構築内容をDockerコンテナで再現することはもちろんですが。
最近のクラウドサーバーでは、むしろ逆で、Dockerコンテナをそのまま本番環境の構築に使用します。
ちょっと一部から怒られるかもしれませんが(笑)
より自由に、より細かく、よりポータブルになったMAMPであると理解すると分かりやすいかもしれません。
Dockerは、「共有」を前提に作られている
たとえば、Dockerコンテナの設定は、プロジェクトフォルダにymlファイルで定義することになっています。
このファイルが、サーバーの必要要件一式を表現しています。
このファイルが置かれているフォルダで、docker-compose up
とコマンドを打つだけで、ymlで書かれた内容で仮想環境が構築されます。
定石では、ymlファイルは、Gitに乗って、全ての関係者へ配布します。
docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
- ./import-tmp:/import-tmp
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
MYSQL_USER: somewordpress
MYSQL_PASSWORD: somewordpress
wordpress:
depends_on:
- db
image: wordpress:php7.4
ports:
- "8000:80"
restart: always
volumes:
- ./dist/:/var/www/html
- ./dist/themes/:/var/www/html/wp/wp-content/themes
working_dir: /var/www/html/wp
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: root
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DEBUG: true
WORDPRESS_CONFIG_EXTRA: |
define('DB_CHARSET', 'utf8mb4');
define('WPLANG', 'ja');
define('WP_HOME', 'http://localhost:8000');
define('WP_SITEURL', 'http://localhost:8000/wp/');
define('WP_DEFAULT_THEME', 'theme');
define('WP_ENV', 'dist');
define('FORCE_SSL_ADMIN', false);
define('WP_DIR', '/wp/');
define('WP_CONTENT_URL', WP_HOME);
define('WP_CONTENT_DIR', '/var/www/html');
define('WP_POST_REVISIONS' ,false);
define('IMAGE_EDIT_OVERWRITE', true);
define('WP_DEBUG_DISPLAY', false );
define('WP_DEBUG_LOG', true );
define('ABSPATH', '/var/www/html/wp/' );
define('AUTOMATIC_UPDATER_DISABLED', false);
define('WP_AUTO_UPDATE_CORE', true);
define('IMAGE_EDIT_OVERWRITE', true);
define('EWWW_IMAGE_OPTIMIZER_SKIP_BUNDLE', true);
cli:
image: wordpress:cli-2.4-php7.4
container_name: cli
volumes:
- ./dist/:/var/www/html
- ./import-tmp/:/import-tmp
- ./dist/themes/:/var/www/html/wp/wp-content/themes
depends_on:
- db
- wordpress
command: "--info"
user: xfs
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: root
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DEBUG: true
WORDPRESS_CONFIG_EXTRA: |
define('DB_CHARSET', 'utf8mb4');
define('WPLANG', 'ja');
define('WP_HOME', 'http://localhost:8000');
define('WP_SITEURL', 'http://localhost:8000/wp/');
define('WP_DEFAULT_THEME', 'theme');
define('WP_ENV', 'dist');
define('FORCE_SSL_ADMIN', false);
define('WP_DIR', '/wp/');
define('WP_CONTENT_URL', WP_HOME);
define('WP_CONTENT_DIR', '/var/www/html');
define('WP_POST_REVISIONS' ,false);
define('IMAGE_EDIT_OVERWRITE', true);
define('WP_DEBUG_DISPLAY', false );
define('WP_DEBUG_LOG', true );
define('ABSPATH', '/var/www/html/wp/' );
define('AUTOMATIC_UPDATER_DISABLED', false);
define('WP_AUTO_UPDATE_CORE', true);
define('IMAGE_EDIT_OVERWRITE', true);
define('EWWW_IMAGE_OPTIMIZER_SKIP_BUNDLE', true);
volumes:
db_data:
networks:
A_default:
また、GitHub Actionsがそうであったように、Dockerもまた先人たちが作ってくれた「オススメの環境」や公式が推奨する環境などを集めたマーケットプレイス
が存在し、有効活用することができます。
Docker Hub で WordPressのための環境を検索
VSCode でもサポートされている Docker
VSCode上から、コンテナを起動したり、停止させたりすることが可能です。
WP(WordPress)-CLI
かなり上級者向けのテクニックになりますが、WordPressの構造(カスタム投稿・カスタムフィールドの増減や、プラグインのインストール、ユーザー登録など)をプログラムで行い(マイグレーション)、保守していく方法もあります。