tongtong
(拉勾学委-通通)
2020 年9 月 19 日 12:47
1
简单搭建LNMP 服务
前提步骤:
先创建好目录:mkdir -p /root/lnmp
搭建mysql
安装mysql的容器运行:docker run -d --name cs_mysql -e MYSQL_ROOT_PASSWORD=1234 mysql:5.7
进入mysql,赋予权限
docker exec -it cs_mysql bash
grant all privileges on . to ‘root’@‘%’;
flush privileges;
搭建php
安装php的容器运行:docker run -d -v /root/lnmp/var/nginx/www/html:/var/www/html -p 9000:9000 --link cs_mysql:mysql --name cs_phpfpm php:7.2-fpm
安装php插件
docker exec -it cs_phpfpm bash
安装mysqli和pdo_mysql的插件
docker-php-ext-install mysqli
docker-php-ext-install pdo_mysql
安装gd插件
apt update
apt install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev
docker-php-source extract
cd /usr/src/php/ext/gd
docker-php-ext-configure gd --with-webp-dir=/usr/include/webp --with-jpeg-dir=/usr/include --with-png-dir=/usr/include --with-freetype-dir=/usr/include/freetype2
docker-php-ext-install gd
搭建nginx
项目启动
docker-compose搭建lnmp+php项目
大概思路
不自己制作images上传到docker的hub上
只有php需要拓展,安装额外的插件,需要做一个dockerfile
nginx需要把default.conf和项目放到-v的目录里面,使用shell脚本来完成
php的dockerfile
仅仅使用RUN就可以安装mysqli、gd、pdo_mysql三个插件
FROM php:7.2-fpm
RUN apt update && apt install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev
RUN docker-php-source extract
RUN cd /usr/src/php/ext/gd
RUN docker-php-ext-configure gd --with-webp-dir=/usr/include/webp --with-jpeg-dir=/usr/include --with-png-dir=/usr/include --with-freetype-dir=/usr/include/freetype2
RUN docker-php-ext-install gd
RUN docker-php-ext-install mysqli && docker-php-ext-install pdo_mysql
docker-compose的编排
这样做会有几个问题
端口固定死了,php的端口可以不写死9000,nginx也可以不写死80,mysql可以不写死3306
php和mysql甚至都不用端口映射,直接给nginx服务即可
容器卷的位置也可以自己修改
因此端口和容积卷可以作为配置文件来作为配置
额外编写一个配置文件,执行脚本的时候读取配置文件内容,然后修改内容,diy完成啦
version: '3'
services:
mysql:
image: mysql:5.7
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: 1234
php:
build:
context: ./php
dockerfile: dockerfile
links:
- mysql
ports:
- 9000:9000
volumes:
- /root/lnmp/var/nginx/www/html:/var/www/html
nginx:
image: nginx:1.18.0
links:
- mysql
- php
volumes:
- /root/lnmp/var/nginx/www/html:/var/www/html
- /root/lnmp/etc/nginx/conf.d:/etc/nginx/conf.d
ports:
- 80:80
自动运行的脚本文件start.sh
#!/bin/bash
# 定义各种变量
mysql_port=$(cat config | grep mysql_port | awk -F "=" '{print $2}')
php_port=$(cat config | grep php_port | awk -F "=" '{print $2}')
nginx_port=$(cat config | grep nginx_port | awk -F "=" '{print $2}')
directory_conf=$(cat config | grep directory_conf | awk -F "=" '{print $2}')
directory_html=$(cat config | grep directory_html | awk -F "=" '{print $2}')
# 创建directory_conf 文件夹
if [[ -d $directory_conf ]];then
echo "$directory_conf exist,nothing do"
else
echo "$directory_conf not exist,create it"
mkdir -p $directory_conf
fi
# 创建directory_html文件夹
directory_html="/root/lnmp/var/nginx/www/html"
if [[ -d $directory_html ]];then
echo "$directory_html exist,nothing do"
else
echo "$directory_html not exist,create it"
mkdir -p $directory_html
fi
# 复制default.conf 文件到conf文件夹上
# 复制t2文件夹到html文件夹上
cp -f default.conf $directory_conf
cp -rf t2 $directory_html
# 给两个文件夹加入权限
chmod -R 777 $directory_html
# 根据配置文件,修改docker-compose的端口和volumes
sed -i "s#[0-9]*:3306#$mysql_port:3306#g" docker-compose.yml
sed -i "s#[0-9]*:9000#$php_port:9000#g" docker-compose.yml
sed -i "s#[0-9]*:80#$nginx_port:80#g" docker-compose.yml
sed -i "s#\S*:/var/www/html#$directory_html:/var/www/html#g" docker-compose.yml
sed -i "s#\S*:/etc/nginx/conf.d#$directory_conf:/etc/nginx/conf.d#g" docker-compose.yml
# 构建docker-compose
docker-compose build
# 后台运行docker-compose
docker-compose up -d
配置文件
# mysql外部的暴露的端口号
mysql_port=3306
# php外部的暴露的端口号
php_port=9000
# nginx外部的暴露的端口号
nginx_port=80
# nginx配置文件的路径
directory_conf=/root/lnmp/etc/nginx/conf.d/
# nginx项目的路径
directory_html=/root/lnmp/var/nginx/www/html/
文件项目说明
简介
docker-compose 一键搭建LNMP平台,并集成了一个《发货100》的php项目
nginx版本号:1.18.0
mysql版本号:5.7
php版本号:7.2-fpm
项目运行的条件
安装docker
安装docker-compose
centos7,需要拥有root权限
运行项目:bash start.sh
项目会在后台直接运行
config配置文件
修改nginx的配置文件路径,修改nginx的项目路径,修改对外暴露的nginx、mysql、php的端口号
docker-compse的内容
项目会自动生成两个目录:
/root/lnmp/var/nginx/www/html
/root/lnmp/etc/nginx/conf.d
nginx
端口占用了80
volumes有两个:
/root/lnmp/var/nginx/www/html:/var/www/html
/root/lnmp/etc/nginx/conf.d:/etc/nginx/conf.d
php
端口占用了9000
volumes有1个:
/root/lnmp/var/nginx/www/html:/var/www/html
mysql
端口占用了3306
root的密码为1234
mysql的host地址为:mysql
文件结构:
default.conf:存放nginx的配置信息
docker-compose.yml:构建docker-compose的yml文件
php:构建php的dockerfile文件夹
start.sh:自动运行
t2:《发货100》的源码
config:配置文件
template:配置文件和docker-compose的备份和简单的测试脚本
发货100的运行
url:宿主机的ip/t2/install
数据库的host为mysql
其他应该很简单,就不填写了
1 个赞