サイドバーの壁紙
博主头像
tin博主等级

子の曰わく、我れ三人行なえば必ず我が師を得(う)。其の善き者を択びてこれに従う。其の善からざる者にしてこれを改む。

  • 累積執筆 72 記事
  • 累計作成 32 タグ
  • 累計受入 2 コメント

目 次CONTENT

記事目次

Docker実践編その1:DockerでLNMP環境を構築

tin
tin
2023-03-12 / 0 コメント / 4 いいね! / 133 読み / 920 文字

背景

前回は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-fpmfastcgi_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
image-1678548501733

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 ~]# 
4
  • 4

コメント欄