docker部署LNMP架構

林奮鬥的成長之路發表於2021-02-17

環境要求:

IP  hostname
192.168.1.1 node1

專案規劃:

容器網段:172.16.10.0/24

NGINX:172.16.10.10

MySQL:172.16.10.20

PHP:172.16.10.20

網站根目錄:/www

nginx配置檔案:/conf

mysql持久化目錄:/var/lib/mysql

提前準備服務配置檔案:

nginx

docker run -itd --name  test nginx             #執行test容器     
docker cp test:/etc/nginx /conf      #copy主配置檔案
ls /conf/
conf.d          koi-win     nginx.conf    win-utf
fastcgi_params  mime.types  scgi_params
koi-utf         modules     uwsgi_params
docker cp test:/usr/share/nginx/html /www     #copy網站目錄
ls /www/
50x.html  index.html          

 mysql

[root@node1 ~]# docker rm -f test 
test
[root@node1 ~]#  docker run -itd --name test -e MYSQL_ROOT_PASSWORD=pwd123 mysql:5.7 
6b8d73ecd541d454f121302963a85d53131286d3118a968525a24ad2315b047b
[root@node1 ~]# docker exec  -it test sh
# mysql -uroot -ppwd123 -h127.0.0.1
..........
mysql> create database test;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)

mysql> exit
Bye
# exit
[root@node1 ~]# docker cp test:/var/lib/mysql /var/lib/mysql

  1、配置lnmp虛擬網路卡,網段172.16.10.0/24,閘道器172.16.10.254

docker network  create  -d bridge  --subnet  172.16.10.0/24 --gateway 172.16.10.254 lnmp

 2、建立nginx容器測試訪問 

[root@node1 ~]#  docker run -itd --name nginx -p 80:80 -v /www/:/usr/share/nginx/html -v /conf:/etc/nginx --network lnmp --ip 172.16.10.10  nginx:latest 
e6e8824abd10ec4f8cb610fdd3bb77bd5919cce94c50a86732e8fd2138b8091b
[root@node1 ~]#  echo  hello > /www/index.html 
[root@node1 ~]# curl  192.168.1.1
hello

 3、執行MySQL容器 

#建立mysql掛載資料目錄、開發埠、指定IP
[root@node1 ~]# docker run -itd --name mysql -p 3306:3306 -v /var/lib/mysql:/var/lib/mysql --network lnmp --ip 172.16.10.20 mysql:5.7
448227483a9c3141c2155d2c7b027aec263bfcfe4ebc49371b6817c17565ff81
#檢視執行狀態
[root@node1 ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS         PORTS                               NAMES
448227483a9c   mysql:5.7      "docker-entrypoint.s…"   10 seconds ago   Up 9 seconds   0.0.0.0:3306->3306/tcp, 33060/tcp   mysql
4d1e99a06972   nginx:latest   "/docker-entrypoint.…"   3 minutes ago    Up 3 minutes   0.0.0.0:80->80/tcp                  nginx
6b8d73ecd541   mysql:5.7      "docker-entrypoint.s…"   9 minutes ago    Up 9 minutes   3306/tcp, 33060/tcp                 test
#測試登入
[root@node1 ~]# yum -y install  mariadb
[root@node1 ~]# mysql -uroot -ppwd123 -h127.0.0.1
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.33 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> Bye

 4、建立php-fpm容器

[root@node1 www]# docker run -itd --name  php-fpm -p 9000:9000 -v /www:/usr/share/nginx/html --network lnmp --ip 172.16.10.30 php:7.2-fpm  
ae09213d7c8c84299b1522ca474fccf7f26e27973cd02563891c37d51799b766
[root@node1 www]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                               NAMES
ae09213d7c8c   php:7.2-fpm    "docker-php-entrypoi…"   7 seconds ago    Up 6 seconds    0.0.0.0:9000->9000/tcp              php-fpm

 5、nginx和PHP的連線 

[root@node1 ~]# vim /conf/conf.d/default.conf 

 

 

 

 5.1、新增nginx靜態的測試介面

[root@node1 ~]# echo  Hello LNMP! > /www/index.html 
[root@node1 ~]# cat /www/index.html 
Hello LNMP!
[root@node1 ~]# curl  192.168.1.1
Hello LNMP!

5.2、新增PHP測試頁面 

[root@node1 ~]# cd /www
[root@node1 www]# vim test.php
[root@node1 www]# cat test.php 
<?php
phpinfo();
?>
[root@node1 www]#  docker restart nginx 
nginx
[root@node1 www]# pwd
/www
[root@node1 www]# ls
50x.html  index.html  test.php

 

能夠訪問到以上兩個介面,說明nginx和php的連線,沒有問題,接下來是 php和mysql的連線。在這裡我們使用一個phpMyAdmin的資料庫管理工 具。

 6、測試PHP容器與Mysql容器的協調性、工具phpMyadmin

[root@node1 www]# pwd
/www
[root@node1 www]# unzip phpMyAdmin-4.9.0.1-all-languages.zip
[root@node1 www]# mv phpMyAdmin-4.9.0.1-all-languages phpMyAdmin
[root@node1 www]# rm -rf phpMyAdmin  

6.1、更新nginx配置檔案 

[root@node1 www]# cd /conf/conf.d/
[root@node1 conf.d]# vim default.conf 

 

 

 

 內容如下:

 location /phpmyadmin {
     root   /usr/share/nginx/html;
     index  index.php index.html index.htm;
 }
 location ~ /phpmyadmin/(?<after_ali>(.*)\.(php|php5)?$) {
     root           /usr/share/nginx/html;
     fastcgi_pass   172.16.10.30:9000;
     fastcgi_index  index.php;
     fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
     include        fastcgi_params;
 }  

測試訪問:

 

 

 其實這主要是php映象不支援連線mysql,我們要重新寫一個。

7、解決php不關聯mysql

[root@node1 /]# cd /file/
[root@node1 file]# ls
Dockerfile
[root@node1 file]# cat Dockerfile 
FROM php:7.2-fpm
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
&& docker-php-ext-install -j$(nproc) iconv \
&& docker-php-ext-configure gd --with-freetypedir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-install mysqli pdo pdo_mysql
[root@node1 file]# docker build -t php_mysql .
#刪除php容器
[root@node1 /]# docker rm php-fpm -f
php-fpm
#執行phpmysql容器
[root@node1 /]# docker run -itd --name phpfpm -p 9000:9000 -v /www:/usr/share/nginx/html --network lnmp --ip 172.16.10.30 phpmysql:latest 
c4e943880fd51f947cba64ba0006abd26a923439a3e39a0350ca2561b42b8026
[root@node1 /]# docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                               NAMES
c4e943880fd5   phpmysql:latest   "docker-php-entrypoi…"   14 seconds ago   Up 13 seconds   0.0.0.0:9000->9000/tcp              phpfpm

7.1、phpmysql配置指向mysql地址

[root@node1 www]# cd /www/phpmyadmin/
[root@node1 phpmyadmin]# mv config.sample.inc.php config.inc.php 
[root@node1 phpmyadmin]# vim config.inc.php
[root@node1 phpmyadmin]# docker restart phpfpm 
phpfpm

8、訪問測試  

 

 

 9、趁熱打鐵,在釋出一個dz論壇

dz論壇連結地址:http://down.chinaz.com/soft/41403.htm

 

#上傳
[root@node1 /]# ls
bin       Discuz_X3.4_SC_UTF8_20210119.zip
#移動到/www網頁目錄下
mv upload/ /www/dz
chmod  777 /www/dz
#保證資料庫有dz庫
#授權一個dz庫的管理員
#注意安裝是IP為資料庫的IP不要寫錯

 

 

 

  

 

相關文章