Linux UbuntuのDockerで「WordPress+mysql」を個人サーバーで運用する方法を紹介します。
WordPressをUbuntuのDocker上で構築する方法
過去の記事で仮想環境プラットフォーム「Docker」をLinux Ubuntuにインストールする方法を紹介しました。
本記事では、既に「Docker」がUbuntu Linuxにインストールされている前提で話を進めていきます。
■「Docker」をUbuntuにインストールする方法を知りたい方は以下の記事をご参照ください。
■WordPressをホスト自身にインストールする方法を知りたい方は以下の記事をご参照下さい。
以下にDockerを利用して「wordpress」をLinux ubuntu上で構築する方法を示します。
- Docker (Ubuntu 18.04 LTS)
バージョン 20.10.21 - WordPress
バージョン 6.1.1 - mySQL
バージョン 5.7
mySQLとWordPressのイメージのダウンロード
以下のコマンドでDocker hubの公式イメージから「mysql」と「wordpress」のイメージをダウンロードします。
Ubuntuのターミナル上から以下のdocker pullコマンドを実行して、Docker用の各イメージをダウンロードします。
% sudo docker pull mysql
% sudo docker pull wordpress
必要なイメージがダウンロードされているか以下のように確認します。
「sdocker images」か「docker image ls」コマンドのどちらかを打てば以下のようにimageリストが見えます。
% sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mariadb 10.5 819fb13996d3 3 days ago 402MB
mariadb latest a748acbaccae 3 days ago 410MB
mysql 5.7 d410f4167eea 5 days ago 495MB
wordpress latest 8b105c533d0c 5 days ago 615MB
mysql latest a3a2968869cf 12 days ago 538MB
nextcloud latest eff70b1472d7 13 days ago 994MB
ここで、必要な「mysql:latest」と「wordpress:latest」が既に表示されている場合には問題にはダウンロード済みです。
次に、「docker ps」コマンドで実行中のコンテナがあるか確認します。
コンテナが実行中であれば「docker stop」コマンドと「dockor rm」コマンドを利用してすべてのコンテナを削除して置いて下さい。mysqlなどのポートの重複があるとエラーがでてしまうためです。ポートの重複については後述します。
% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
次に、doker-compose用の定義ファイルを作成します。
設定内容は以下の基本設計になります。(mySQL:latestの場合の設定です。)
1) mySQL:latest
- images名:mysql
- volume名:db
- コンテナ名:db-container
- port番号:3306→5432 既存のポート番号とのバッティングを防ぐために5432にしておきます。
- ホスト側への保存フォルダ:~/db (コンテナ側のフォルダ/var/lib/mysql)
(2) wordpress:latest
- images名:wordpress
- volume名:wordpress
- コンテナ名:wordpress-app
- port番号:80→8080
- ホスト側への保存フォルダ:~/wordpress (コンテナ側のフォルダ/var/www/html)
version: '3'
volumes:
db:
wordpress:
services:
db:
restart: always
image: mysql
container_name: db-container
ports:
- 5432:3306
expose:
- 5432
volumes:
- ./db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD: rootpass
- MYSQL_PASSWORD: userpass
- MYSQL_DATABASE: wordpress
- MYSQL_USER: wordpress
wordpress:
restart: always
container_name: wordpress-app
image: wordpress
volumes:
- ./wordpress:/var/www/html
ports:
- 8080:80
depends_on:
- db
environment:
- WORDPRESS_DB_PASSWORD: userpass
- WORDPRESS_DB_NAME: wordpress
- WORDPRESS_DB_USER: wordpress
- WORDPRESS_DB_HOST: db
(1)既存のmysqlのポート番号3306は本体サーバー上で使用されている時があるため、上記では別ポート番号5432を使用する設定です。
mysqlのデータベース側「ports: 5432:3306」として、外部通信「expose: 5432」で宣言します。
wordpress側では、ポート番号5432を通してmysqlを使用します。
mySQL:laetstの場合は、環境変数を「MYSQL_HOST=db」とします。
mySQL:l5.7の場合は、環境変数を「MYSQL_HOST=db:5432」とします。
(2) http用のポート番号80も利用されている場合を考慮して、8080とします。
コンテナ化
最終的に、以下のコマンド「docker-compose up -d」を入力してバックグラウンドでスタートして終了です。
ここで、エラーがでないか「docker-compose up 」としてフォアグラウンド処理で確認してみるのも良いかと思います。
$ docker-compose up -d
[+] Running 2/2
? Container db-container Started
? Container nextcloud-app Started
動いているか確認のため、Docker-compose psコマンドでのコンテナ実行状況を確認すると2つのコンテナのSTATUSが「running」状態であることを確認できます。
sudo docker compose ps
NAME COMMAND SERVICE STATUS PORTS
db-container "docker-entrypoint.s…" db running 0.0.0.0:5432->3306/tcp, :::5432->3306/tcp
wordpress-app "docker-entrypoint.s…" wordpress running 0.0.0.0:8080->80/tcp, :::8080->80/tcp
ブラウザ上からアクセスしWordPressを立ち上げる
その後、適当なブラウザ上でURL「http://localhost:8080」を入力すると以下のようにwordpressが起動します。
うまくいくと下記の設定画面が表示される。
言語を「日本語」にして「Continue」ボタンを押します。
「データベース名」と「ユーザー名」と「パスワード」と「データベースのホスト名」を入力し「送信」ボタンを押します。
問題がなければ下記のような画面に移動して、サイトタイトルとユーザー名(webアクセス用)とパスワード、メールアドレスを入力して「WordPessのインストール」ボタンを押して下さい。
これでインストールは終了です。
以下のようにデータベースに問題が起こる場合があります。
(1) データベースの設定に問題がある場合が多いため再度パスワード等を確認してみてください。
必要であれば、コンテナイメージに入って修正もできます。
(2)「error establishing a database connection」と出る場合があります。この場合、過去のデーターフォルダが残っている場合があるため、接続用の設定ファイルがある/dbや/wordpress内を削除して再起動させるとうまく行きます。
詳細なWordPress設定の方法は以下の記事を参照下さい。
Docker composeの停止
Composeの停止は以下のコマンドでできます。このとき、networkと2つのコンテナが停止します。
ファイルを指定してdocker composeを行っているため、終了時も -f (ファイル名)を加えてdownします。すると2つのコンテナと1つのネットワークのコンテナを下ろしてくれます。
sudo docker compose -f docker-compose1.yml down
[+] Running 3/3
? Container wordpress-app Removed 1.4s
? Container db-container Removed 0.2s
? Network user_default Removed
まとめ
本記事のまとめは、
コメント