Windows
docker
LEMP

俺のDocker - WindowsでLEMP

More than 1 year has passed since last update.

Windows10 ProでDockerでLEMP環境を作ったときの覚え書き。

もっと詳細が知りたい方は → こちら

前回の記事は → こちら


概要


  • ホストマシン


    • Windows10 pro

    • バージョン 1703

    • ビルド 15063.540



  • Dockerバージョン


    • Client 17.06.1

    • Server 17.06.1




ゴール


  • LEMP環境を作る


    • CentOS 7

    • Nginx 1.13

    • MariaDB 10.3

    • PHP 7.1



  • コンテナ同士リンクさせて動かす


    • 1コンテナ1プロセスルールを守る



  • オフィシャルのイメージを使う

  • 理解力を高めるためCLIでコツコツやる


    • Kitematicは使わない

    • Dockerfileは使わない

    • Docker composeは使わない




作業フォルダ

こんな感じを想定。

D:

└─ Docker
└─ project
├─ etc
│ └─ nginx
│ └─ conf.d
└─ var
└─ www


構築開始


イメージを落とす

docker pull php:7.1-fpm

docker pull nginx:1.13
docker pull mariadb:10.3


MariaDBをコンテナ化する


  • MariaDBのrootのパスワードを環境変数に指定してコンテナ化

docker run --name maria -e MYSQL_ROOT_PASSWORD=passwd -p 3306:3306 -d mariadb:10.3

一般ユーザを作る。

ユーザ名パスワードともにdockerにしてみる。

docker exec -it maria bash

# mysql -uroot -p

> grant all privileges on *.* to docker@"%" identified by 'docker' with grant option;

dockerという名前でDBを作っておく。

> create database docker;

コンテナから抜ける。

> exit

# exit


PHP-FPMをコンテナ化する


  • ドキュメントルートを指定してコンテナ化

  • MriaDBをリンクさせる

docker run --name php -d -v //d/Docker/project/var/www/html:/var/www/html --link maria:mariadb php:7.1-fpm

必要なものをインストールするのでコンテナに入る。

docker exec -it php bash

以下のDocker専用コマンドでphpモジュールを入れる。

# docker-php-ext-install pdo pdo_mysql mbstring xml xmlrpc mysqlnd intl

コンテナから抜ける。

# exit

PHP-FPMコンテナを再起動する。

docker restart php


NginXをコンテナ化する


  • 設定ファイルをマウントさせる

  • PHP-FPMをリンクさせる

docker run --name nginx -d -v //d/Docker/project/etc/nginx/conf.d:/etc/nginx/conf.d -p 8000:80 --link php:phpfpm nginx:1.13


仕上げ


Nginxの設定ファイルを作る

D:\Docker\project\etc\nginx\conf.d\virtual.conf

server {

listen 80 default;
server_name _;
root /var/www/html;
index index.php index.html index.htm;
charset utf-8;

access_log off;
error_log off;

location / {
try_files $uri $uri/ /index.php$is_args$args;
}

location ~ \.php$ {
fastcgi_pass phpfpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

NginXコンテナを再起動する。

docker restart nginx


ドキュメントルートにテスト用phpファイルを置く

D:\Docker\project\var\www\html\index.php

<?php phpinfo(); ?>


MariaDBに接続してみる

D:\Docker\project\var\www\html\db.php

$dsn = 'mysql:host=mariadb;dbname=docker';

$username = 'docker';
$password = 'docker';
$options = [];

try {

$dbh = new PDO($dsn, $username, $password, $options);
echo 'Connection Success.';

} catch (PDOException $e) {

echo 'Connection failed: ' . $e->getMessage();

}
die();