背景
前回はDockerネットワークを紹介する際、ブリッジネットワークを使って(Linux+Nginx +PHP)LNP環境を構築しました。
今回は全体版(Linux+Nginx +MySQL+PHP)LNMP環境を構築してみます。
1. 準備作業
1-1. ブリッジネットワークを作成
⇒ デフォルトタイプはブリッジです
[root@localhost myflie]# docker network create lnmp
00d581caf44823b566e25dcb4da7e26b67e1f7066216affc87c9e964018e2c73
[root@localhost myflie]#
[root@localhost myflie]# docker network ls
NETWORK ID NAME DRIVER SCOPE
90f98361e6f9 bridge bridge local
84f80231780e host host local
00d581caf448 lnmp bridge local //新規したネットワーク
ca51e547a48d none null local
[root@localhost myflie]#
1-2. 作業ディレクトリを作成
[root@localhost /]# mkdir -p /work/{www,/nginx/conf.d}
[root@localhost /]# mkdir -p /work/mysql/{data,conf.d}
1-3. nginxのconfigファイルを作成
vim /work/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}
location ~ \.php(.*)$ {
root /var/www/html; # php コンテナのワークディレクトリ
fastcgi_pass php-fpm:9000; # ブリッジネットワークを使うため、ここは固定のIPアドレスを記入することなく、相手先のサービス名(コンテナ名)で良い。
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
2. phpコンテナを起動
⇒ --name php-fpm
とfastcgi_pass php-fpm:9000
(1-3. nginxのconfigファイル)中のphp-fpm
が一致すること
docker run -p 9000:9000 --name php-fpm \
-v /work/www:/var/www/html \
--net lnmp \
-d php:7.1-fpm
3. nginxコンテナを起動
docker run -p 80:80 --name nginx \
-v /work/www:/usr/share/nginx/html \
-v /work/nginx/conf.d:/etc/nginx/conf.d \
--net lnmp \
-e TZ=Asia/Tokyo \
--privileged=true \
-d nginx
4. 疎通確認
4-1. テストケースを用意
echo "hello world ! " > /work/www/index.php
4-2. テスト結果
⇒ 疎通確認OK
5. MySQLコンテナを起動
⇒ netstat -tunlp | grep 3306でポートが空き状況を確認
docker run --name mysql -p 3306:3306 \
-v /work/mysql/conf.d:/etc/mysql/conf.d \
-v /work/mysql/data:/var/lib/mysql \
--net lnmp \
-e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7
6. テスト用のデータベース・テーブル・データを用意
docker exec -it mysql /bin/bash
mysql -uroot -p
create database db2023;
use db2023;
CREATE TABLE `t_user` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`username` VARCHAR(50) NOT NULL DEFAULT '' COMMENT 'user',
`password` VARCHAR(50) NOT NULL DEFAULT '' COMMENT 'password',
`sex` TINYINT(4) NOT NULL DEFAULT '0' COMMENT 'sex 0=women 1=men ',
`deleted` TINYINT(4) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'delete flg,Default 0 no delete, 1 delete',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'update time',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'create time',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='user table';
INSERT INTO t_user(id,username,password,sex) values(1,'tin','123',1);
7. MySQL接続ためのphpファイルを編集
vim /work/www/connect.php
<?php
$serve = 'mysql:3306';
$username = 'root';
$password = '123';
$dbname = 'db2023';
$mysqli = new Mysqli($serve,$username,$password,$dbname);
if ($mysqli->connect_error) {
die('connect error:'.$mysqli->connect_errno);
}
$mysqli->set_charset('UTF-8');
$result = $mysqli->query('select * from t_user');
$data = $result->fetch_all();
print_r($data);
?>
8. PHPでMySQLI エクステンションをインストール
docker exec -it php-fpm /bin/bash
docker-php-ext-install pdo_mysql mysqli
docker restart php-fpm
9. アクセス確認
9-1. 確認:
curl http://localhost/connect.php
9-2. 確認結果:
[root@localhost ~]# curl http://localhost/connect.php
Array
(
[0] => Array
(
[0] => 1
[1] => tin
[2] => 123
[3] => 1
[4] => 0
[5] => 2023-03-11 16:06:03
[6] => 2023-03-11 16:06:03
)
)
[root@localhost ~]#
コメント欄