Dockerを久々触ったのでおさらい。
今回作成したいのは以下のLAMP環境。
php 7.2
mysql 5.7 or 8.0
Wordpress 5.3.0
ディレクトリ構成
├── db
│ ├── Dockerfile
│ ├── my.cnf
│ └── mysql_data
├── docker-compose.yml
├── html
│ └── www
└── web
├── Dockerfile
├── base.conf
└── php.ini
各設定ファイルの作成
下準備
プロジェクトのルートに移動し、各ディレクトリを作成。
$ cd ~/Dev/proj/docker
$ mkdir db
$ mkdir web
$ mkdir html
docker-compose.yml
web: volumeで、cachedオプションを付けること。
これがないとMacだとかなりもっさりする。
それとPMA_HOSTはup後に取れるようなので、一旦仮で。
$ vim docker-compose.yml
version: '2'
services:
web:
build: ./web
ports:
- '8080:80'
volumes:
- ./html:/var/www/html:cached
depends_on:
- db
db:
build: ./db
volumes:
- ./db/mysql_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: 'password'
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
- PMA_ARBITRARY=1
- PMA_HOST=mysql
- PMA_USER=root
- PMA_PASSWORD=password
restart: always
links:
- db
ports:
- 8888:80
volumes:
- /sessions
なお、DBをMariaDBにしたい場合はこちら。
version: '2'
services:
web:
build: ./web
ports:
- '8082:80'
volumes:
- ./html:/var/www/html:cached
depends_on:
- db
db:
build: ./db
image: mariadb:10 #10.x latest
volumes:
- ./db/mysql_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
- PMA_ARBITRARY=1
- PMA_HOST=d7c54209ed55
- PMA_USER=root
- PMA_PASSWORD=password
restart: always
links:
- db
ports:
- 8882:80
volumes:
- /sessions
web/Dockerfile
apache のphp 7.2で指定。モジュールは都度追加。
※ついかしたらbuildが必要。多分。
$ vim web/Dockerfile
※追記 apache-phpでのエラーログ出力のため、エラーログをechoする記述を追加
FROM php:7.2-apache
MAINTAINER docker-web
RUN apt-get update \
&& apt-get -y install vim wget lsb-release libicu-dev default-mysql-client libfreetype6-dev libjpeg62-turbo-dev libpng-dev \
&& docker-php-ext-install pdo_mysql mysqli intl gd
RUN ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
RUN ln -s /etc/apache2/mods-available/vhost_alias.load /etc/apache2/mods-enabled
RUN echo ServerName $HOSTNAME > /etc/apache2/conf-available/fqdn.conf && a2enconf fqdn
COPY ./base.conf /etc/apache2/sites-available/base.conf
RUN a2ensite base.conf
COPY ./php.ini /usr/local/etc/php/
RUN echo '\
log_errors = On\n\
error_log = /dev/stderr\n\
error_reporting = E_ALL\n\
' >> /usr/local/etc/php/php.ini
web/base.conf
~/html/配下でディレクトリを切れば、サブドメイン化出来るように。
$ vim web/base.conf
<VirtualHost *:80>
ServerName localhost
ServerAlias *.*.localhost
VirtualDocumentRoot "/var/www/html/%2/%1"
</VirtualHost>
<VirtualHost *:80>
ServerName localhost
ServerAlias *.localhost
VirtualDocumentRoot "/var/www/html/%1"
</VirtualHost>
web/php.ini
$ vim web/php.ini
※追記 apache-phpはエラーログ出力の為、[global]以下を追記必要。
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = UTF-8
mbstring.language = Japanese
[global]
log_errors = On
error_reporting = E_ALL
error_log = "/var/log/php_error.log"
db/Dockerfile
$ vim db/Dockerfile
FROM mysql:5.7
MAINTAINER docker-db
COPY ./my.cnf /etc/mysql/conf.d/my.cnf
db/my.cnf
$ db/my.cnf
[mysqld]
character-set-server=utf8
datadir = /var/lib/mysql
こちらはMariaDB ver.
FROM mariadb:10
MAINTAINER docker-db
COPY ./my.cnf /etc/mysql/conf.d/my.cnf
Build
ここまで出来たらビルドする。
$ docker-compose build
成功したら、up。
$ docker-compose up
$ docker-compose ps
psで確認してみる。
Name Command State Ports
-------------------------------------------------------------------------------------------------
server_upd_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
server_upd_phpmyadmin_1 /run.sh supervisord -n -j ... Up 0.0.0.0:8888->80/tcp, 9000/tcp
server_upd_web_1 docker-php-entrypoint apac ... Up 0.0.0.0:8080->80/tcp
Test
表示されるかテスト。~/html/www/にファイルを作る。
$ mkdir html/www
$ vim html/www/index.html
適当に書いたファイルが、http://www.localhost:8080/ で表示されればOK!
Log in
立ち上げた仮想サーバーへログイン。
$ docker exec -it server_upd_db_1 /bin/sh
ログインして、
※pwはdocker-composeに記載
# mysql -u root -p
ここでホスト名を確認。
mysql> select @@hostname;
ここで得たホスト名を、docker-composeに書きphpmyadminを再ビルド。
$ docker-compose build phpmyadmin
$ docker-compose up -d phpmyadmin
するとphpmyadminへアクセス出来る。
http://localhost:8888/index.php