WordPress:docker-composeでコンテナを一般ユーザーで起動する

WordPress:docker-composeでコンテナを一般ユーザーで起動する

Docker 公式の WordPress イメージで WordPress を立ち上げますと、WordPress や Mysql が root や www-data で稼働します。これですと新しくサイトを開発しようにもいちいち root に入らなくてはならなくなります。これをホストの一般ユーザーで稼働させられないかということです。

01現在うまくいっている方法

現時点では、Docker そのものもあまり理解していない状態で、Docker ドキュメントのクイックスタートで WordPress を立ち上げてなんとかしようとしているという段階です。

コンテナを一般ユーザーで稼働させる

  • docker-compose.yml で WordPress と Mysql コンテナを立ち上げる
  • 通常通り、WordPress をインストールする
  • いったんコンテナを停止する
  • WordPress と Mysql インストールディレクトリの uid と gid をホストと同じ一般ユーザーに書き換える
  • docker-compose.yml に user: 指定を追加し WordPress と Mysql を立ち上げる

現在のところこれでうまくいっています。

02docker-compose.yml

version: '3'


services:
   db:
     image: mysql:5.7
     volumes:
       - ~/Dropbox/Docker/****/mysql:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
     user: "1000:1000"


   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
     volumes:
       - ~/Dropbox/Docker/****/html:/var/www/html
     user: "1000:1000"

docker-compose.yml ファイルはクイックスタートのものから、wordpress と mysql のマウントを Dropbox 内のディレクトリに変えています。これは、作業する場所が複数ですのでデータを共用するためです。

uid と gid はデフォルトで作成されるユーザーを指定しています。id コマンドで調べられます。または、プロジェクトディレクトリに .env ファイルを作成して docker-compose.yml には ${UID}:${GID} を指定しておいても同じことです。

.env ファイル

UID=1000
GID=1000

docker-compose.yml ファイル

user: "${UID}:${GID}"

03実際にやってみる

コンテナを立ち上げる

プロジェクトディレクトリの docker-compose.yml からコンテナを立ち上げます。

php.ini と phpmyadmin-misc.ini は今回は関係ありません。WordPress サイトや Mysql ディレクトリの所有者が www-data や systemd-coredump になっています。

WordPress をインストールする

ブラウザで http://localhost:8000 にアクセスしますと WordPress のインストールページになりますのでインストールします。

ディレクトリの所有者を一般ユーザーに変更する

WordPress と Mysql をいったん停止、マウントしたディレクトリの所有者とグループを一般ユーザーに変更します。そして、docker-compose.yml の user に一般ユーザーを指定して、再度コンテナを立ち上げます。

一般ユーザーで稼働しているか確認する

問題なく立ち上がりました。WordPress の更新がありますので更新してみます。

更新できました。

プラグインの更新もしてみます。

テーマも更新してみます。

これでホストのログインユーザーのままでファイルの変更もできています。