Docker——9——Docker部署LNMP环境

环境

docker01192.168.1.128

部署LNMP

网络规划:

网段:172.16.10.0/24
Nginx:172.16.10.10
Mysql:172.16.10.20
Php:172.16.10.30
网站的访问主目录(host):/wwwroot
Nginx的配置文件(host):/docker
MySQL持久化的目录(host):/var/lib/mysql

前提准备

拷贝所需文件到本地目录,mysql创建test数据库,用做验证

[root@docker01 ~]# mkdir /wwwroot
[root@docker01 ~]# mkdir /docker
[root@docker01 ~]# docker run -itd --name test nginx			#获取nginx配置文件
[root@docker01 ~]# docker cp test:/etc/nginx /docker
[root@docker01 ~]# ls /docker/
nginx
[root@docker01 ~]# docker cp test:/usr/share/nginx/html /wwwroot/
[root@docker01 ~]# ls /wwwroot/
html
[root@docker01 ~]# docker rm -f test 
test

[root@docker01 ~]# docker pull mysql:5.7			#获取mysql配置文件
[root@docker01 ~]# docker run -itd --name test -e MYSQL_ROOT_PASSWORD=pwd123 mysql:5.7 
[root@docker01 ~]# docker exec -it test bash
root@01ef351e6f11:/# 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
root@01ef351e6f11:/# exit
[root@docker01 ~]# docker cp test:/var/lib/mysql /
[root@docker01 ~]# ls /mysql/
auto.cnf    ca.pem           client-key.pem  ibdata1      ib_logfile1  mysql               private_key.pem  server-cert.pem  sys
ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile0  ibtmp1       performance_schema  public_key.pem   server-key.pem   test
[root@docker01 ~]# docker rm -f test 
test

1、创建一个自定义网络

[root@docker01 ~]# docker network create -d bridge --subnet 172.16.10.0/24 --gateway 172.16.10.1 lnmp

2、运行nginx容器

[root@docker01 ~]# docker run -itd --name nginx -p 80:80 -v /wwwroot/html:/usr/share/nginx/html -v /docker/nginx:/etc/nginx --network lnmp --ip 172.16.10.10 nginx
[root@docker01 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
96f36bcee11b        nginx               "/docker-entrypoint.…"   3 seconds ago       Up 2 seconds        0.0.0.0:80->80/tcp   nginx
[root@docker01 ~]# echo 123456 > /wwwroot/html/index.html 
[root@docker01 ~]# curl 127.0.0.1
123456

3、运行mysql容器

[root@docker01 ~]# docker run -itd --name mysql -p 3306:3306 -v /mysql:/var/lib/mysql --network lnmp --ip 172.16.10.20 mysql:5.7
[root@docker01 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
48bf66ed33e4        mysql:5.7           "docker-entrypoint.s…"   51 seconds ago      Up 51 seconds       0.0.0.0:3306->3306/tcp, 33060/tcp   mysql
96f36bcee11b        nginx               "/docker-entrypoint.…"   13 minutes ago      Up 13 minutes       0.0.0.0:80->80/tcp                  nginx
[root@docker01 ~]# ss -lnt
LISTEN     0      128                  :::3306                       :::*
[root@docker01 ~]# yum -y install mariadb
[root@docker01 ~]# mysql -uroot -ppwd123 -h127.0.0.1
MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)
MySQL [(none)]> Bye

4、运行php容器

[root@docker01 ~]# docker run -itd --name phpfpm -p 9000:9000 -v /wwwroot/html:/usr/share/nginx/html --network lnmp --ip 172.16.10.30 php:7.2-fpm
[root@docker01 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
7f15c778bd42        php:7.2-fpm         "docker-php-entrypoi…"   16 seconds ago      Up 15 seconds       0.0.0.0:9000->9000/tcp              phpfpm
48bf66ed33e4        mysql:5.7           "docker-entrypoint.s…"   10 minutes ago      Up 10 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp   mysql
96f36bcee11b        nginx               "/docker-entrypoint.…"   23 minutes ago      Up 23 minutes       0.0.0.0:80->80/tcp                  nginx

5、nginx和php连接

[root@docker01 ~]# vim /docker/nginx/conf.d/default.conf
  9     location / {
 10         root   /usr/share/nginx/html;
 11         index  index.html index.htm index.php;			#添加PHP解析
 12     }
 
 ……

修改:
 31     location ~ \.php$ {					#开启fastcgi配置
 32         root           /usr/share/nginx/html;
 33         fastcgi_pass   172.16.10.30:9000;
 34         fastcgi_index  index.php;
 35         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
 36         include        fastcgi_params;
 37     }
修改nginx静态的测试界面
[root@docker01 ~]# vim /wwwroot/html/index.html
<h1>Hello LNMP</h1>
添加php测试界面
[root@docker01 ~]# vim /wwwroot/html/index.php
<?php
phpinfo();
?>
[root@docker01 ~]# docker restart nginx			#重启nginx容器,使其重新识别nginx配置文件
nginx
浏览器验证,nginx服务和php服务的界面

PS:在用浏览器访问测试的时候,不要忽略了dockerhost的防火墙和 selinux
验证nginx服务80:
在这里插入图片描述
验证nginx和php的连接9000:
在这里插入图片描述

6、php和mysql的连接验证

能够访问到以上两个界面,说明nginx和php的连接,没有问题,接下来是 php 和 mysql 的连接。在这里使用一个phpMyAdmin的数据库管理工具

[root@docker01 html]# pwd
/wwwroot/html
[root@docker01 html]# rz			#复制phpMyAdmin-4.9.1-all-languages.zip到/wwwroot/html
[root@docker01 html]# ls
50x.html  index.html  index.php  phpMyAdmin-4.9.1-all-languages.zip
[root@docker01 html]# unzip phpMyAdmin-4.9.1-all-languages.zip
[root@docker01 html]# mv phpMyAdmin-4.9.1-all-languages phpmyadmin

修改phpmyadmin的配置文件,指定连接的数据库的IP

[root@docker01 ~]# cd /wwwroot/html/phpmyadmin/
[root@docker01 phpmyadmin]# cp config.sample.inc.php config.inc.php 
[root@docker01 phpmyadmin]# vim config.inc.php
 31 $cfg['Servers'][$i]['host'] = '172.16.10.20';			#修改为mysql的IP地址

更改nginx的配置文件,添加phpmyadmin的索引文件

[root@docker01 ~]# cd /docker/nginx/conf.d/
[root@docker01 conf.d]# vim default.conf
  9     location / {
 10         root   /usr/share/nginx/html;
 11         index  index.html index.htm index.php;
 12     }
 新添加phpmyadmin模块:
 13     location /phpmyadmin {
 14         root   /usr/share/nginx/html;
 15         index  index.html index.htm index.php;
 16     }

 ……

 35     location ~ \.php$ {
 36         root           /usr/share/nginx/html;
 37         fastcgi_pass   172.16.10.30:9000;
 38         fastcgi_index  index.php;
 39         fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
 40         include        fastcgi_params;
 41     }
 42 
 添加:
 43     location ~ /phpmyadmin/(?<after_ali>(.*)\.(php|php5)?$) {
 44         root /usr/share/nginx/html;
 45         fastcgi_pass 172.16.10.30:9000;
 46         fastcgi_index index.php;
 47         fastcgi_param SCRIPT_FILENAME
 48         $document_root$fastcgi_script_name;
 49         include fastcgi_params;
 50     }

重启nginx容器,重新识别nginx配置文件

[root@docker01 conf.d]# docker restart nginx
nginx

浏览器访问phpmyadmin
在这里插入图片描述
PS:能够访问到此目录,说明php——mysql服务的连接时没问题的

需要对php镜像做出更改,添加php和mysql连接的模块写一个dockerfile

[root@docker01 ~]# vim 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@docker01 ~]# docker build -t php_mysql .

删除之前的php容器,并用新制作的php镜像重新运行
[root@docker01 ~]# docker rm -f phpfpm
[root@docker01 ~]# docker run -itd --name phpfpm -p 9000:9000 -v /wwwroot/html:/usr/share/nginx/html --network lnmp --ip 172.16.10.30 php_mysql:latest

—————————————————————————————————或者下边的方法(时间都差不多长)—————————————————————————————————————

[root@docker01 ~]# docker exec -it phpfpm bash
root@7f15c778bd42:/var/www/html# 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@docker01 conf.d]# docker rm -f phpfpm
[root@docker01 ~]# rz			#复制phpmysql.tar到/root/
[root@docker01 ~]# ls
phpmysql.tar
[root@docker01 ~]# docker load < phpmysql.tar 
[root@docker01 ~]# docker run -itd --name phpfpm -p 9000:9000 -v /wwwroot/html:/usr/share/nginx/html --network lnmp --ip 172.16.10.30 php_mysql:latest 
[root@docker01 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
84532a52e7a3        php_mysql:latest    "docker-php-entrypoi…"   5 seconds ago       Up 4 seconds        0.0.0.0:9000->9000/tcp              phpfpm
3175cca7ddbb        mysql:5.7           "docker-entrypoint.s…"   10 minutes ago      Up 10 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp   mysql
1929056be434        nginx               "/docker-entrypoint.…"   14 minutes ago      Up 3 minutes        0.0.0.0:80->80/tcp                  nginx
验证:

在这里插入图片描述
登录成功之后,会看到之前创建的数据库
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值