docker部署LNMP架构
环境要求:
| 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不要写错


docker部署LNMP架构的更多相关文章
- Docker部署lnmp 实战 (多注意配置文件,不管访问试试换个浏览器)
Docker部署LNMP环境 关闭防火墙,设置自定义网络 systemctl stop firewalld systemctl disable firewalld setenforce 0 docke ...
- 使用 Docker 部署 LNMP 并搭建 wordpress
准备 系统版本:CentOS Linux release 7.4.1708 (Core) 内核版本:3.10.0-693.el7.x86_64 IP:192.168.31.43 可访问 ...
- 部署LNMP架构及其应用
部署企业LNMP架构 (一)首先安装nginx服务,具体请见另一篇关于nginx的博文. (二)安装MySQL数据库 .安装前准备 [root@localhost ~]# rpm -e mysql-s ...
- Centos7搭建Docker部署LNMP
1.首先呢先更新yum源 yum update 2.1.安装docker存储库 yum install -y yum-utils \ device-mapper-persistent-data \ l ...
- Docker部署LNMP完整教程
在Docker中部署LNMP环境可以分为以下几个步骤: 安装Docker 创建镜像 创建Dockerfile build Docerfile 复制/修改配置文件 运行镜像,并映射端口 为了方便分布式部 ...
- CenOS7 docker部署lnmp环境
Step1:下载lnmp镜像 [root@docker html]# docker pull winstonpro/lnmp Step2:启动lnmp镜像的docker实例 [root@docker ...
- 部署LNMP架构Blog博客平台 ---惟净
部署环境:VM虚拟机 操作系统:CentOS-6.8-x64 IP地址:192.168.31.91Mysql数据库版本:5.6.34 Cmake软件包版本:3.5.2Nginx软件包版本:1.10.2 ...
- Ansible自动部署lnmp架构+上线电商
1.首先准备3台机器 ansible机器:192.168.52.34 目标主机:192.168.52.35 目标主机:192.168.52.36 2.关闭防火墙 [root@localhost ~]# ...
- docker部署LAMP架构并部署上线wordpress博客系统
第一步:直接在镜像仓库拉取LAMP镜像 [root@ken-node3 ken]# docker pull tutum/lamp 第二步:查看已经获取到的镜像 [root@ken-node3 ken] ...
随机推荐
- Django Full Coverage
Django(个人推荐, 如果项目较大 需要协同开发, 建议使用django这种重量级框架, 如果类似于纯api的后端应用建议使用 flask, 轻量小巧 , 麻雀虽小五脏俱全) 1.Django是什 ...
- Python+Selenium+Unittest实现PO模式web自动化框架(1)
1.什么是PO模式? PO是Page Object的缩写 PO模式是自动化测试项目开发实践的最佳设计模式之一,讲页面定位和业务操作分开,也就是把对象的定位和测试脚本分开,从而提供可维护性. 主要有以下 ...
- mail Header Injection Exploit
Preventing Email Header Injection - PHundamental PHP Best Practices - http://nyphp.org/phundamentals ...
- 知乎社区核心业务 Golang 化实践 - 知乎 https://zhuanlan.zhihu.com/p/48039838
知乎社区核心业务 Golang 化实践 - 知乎 https://zhuanlan.zhihu.com/p/48039838
- protoc-gen-validate (PGV)
https://github.com/envoyproxy/protoc-gen-validate This project is currently in alpha. The API should ...
- https://stackoverflow.com/questions/3232943/update-value-of-a-nested-dictionary-of-varying-depth
https://stackoverflow.com/questions/3232943/update-value-of-a-nested-dictionary-of-varying-depth p.p ...
- automake的简单使用
https://blog.csdn.net/zhengqijun_/article/details/70105077 xxxxx https://blog.csdn.net/initphp/artic ...
- bzoj 2038(莫队算法)
2038: [2009国家集训队]小Z的袜子(hose) 时间限制: 20 Sec 内存限制: 259 MB 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来 ...
- SpringMVC听课笔记(十:处理JSON: 使用HttpMessageConverter)
1. 处理JSON 2. 原理 流程图 3. 看个应用吧 -- 上传 ①jsp ②handler -- 下载 ① jsp ② handler
- Go - 实现项目内链路追踪
为什么项目内需要链路追踪?当一个请求中,请求了多个服务单元,如果请求出现了错误或异常,很难去定位是哪个服务出了问题,这时就需要链路追踪. 从图中可以清晰的看出他们之间的调用关系,通过一个例子说明下链路 ...