lnmp
lnmp的容器编排。
实现对多个容器的编排:nginx、mysql、php-fpm。
支持一键构建启动和销毁。
支持配置的修改和日志的查看。方便开发和测试。
支持快速修改构建中的一些参数,直接修改 .env 文件
目前版本只合适作为日常开发和测试环境。不适用于生产环境。
参考:忘了。。。待会儿找到补上=。=
版本的选择
- centos latest
- nginx latest
- mysql latest //mysql 8.0
- php latest
安装使用说明
1、安装 docker 百度三连.jpg
2、安装 docker-compose 百度三连.jpg
3、构建环境:在当前文件文件目录执行:docker-compose up --build
根据个人网络情况一般20分钟内
4、开始使用
完整资源下载:https://pan.baidu.com/s/1WLVSOFgTvLkWcgN-MAqY8w 提取码:vmxv
ps:
1、因为数据库使用的是mysql 8.0.16,mysql8和之前的版本密码加密方式不一样,从 mysql_native_password 改为了 caching_sha2_password ,连接数据库时可能会报错。
解决方式:方法1、使用 navcat mysql 12 等支持 caching_sha2_password 加密的高版本连接工具
方法2、docker 内部用root登录数据后,依次执行下面3条命令:
select Host,User,plugin,authentication_string from mysql.user;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
FLUSH PRIVILEGES;
readme.md说明:
##目录说明
docker20190621
|- db_data //mysql数据存放目录
|- log //日志存放目录
|- mysql //mysql日志
|- nginx //nginx日志
|- php //php日志
|- php-fpm //php-fpm日志
|- mysql
|- mysql.conf.d
|- mysqld.cnf //mysql 配置文件
|- Dockerfile //mysql 构建dockerfile
|- nginx
|- conf //nginx vhost配置文件目录
|- default.conf //nginx 默认配置
|- Dockerfile //nginx 构建dockerfile
|- nginx.conf //nginx 配置
|- php-fpm
|- Dockerfile //php 构建dockerfile
|- php.ini //php.ini
|- sources.list //资源列表
|- www //web项目存放路径
|- .env //docker-compose构建镜像时加载的配置
|- docker-compose.yml //yml文件没啥好说的
|- README.md //说明
## 相关命令
开发中常用的命令。
- 拷贝nginx的配置文件到 宿主电脑桌面。
docker cp 容器id:/etc/nginx/nginx.conf /Users/Win用户名/Desktop
- 拷贝php-fpm的配置文件到 宿主电脑桌面。
docker cp 容器id:/usr/local/etc/php-fpm.d/www.conf /Users/Win用户名/Desktop
- php 安装扩展。目前只安装了一个mysqli的扩展。其他扩展参考下面的地址。后续本版本也不断丰富。
https://store.docker.com/images/php
- 拷贝mysql的配置文件到宿主电脑桌面。
docker cp 容器id:/etc/mysql/mysql.conf.d/ /Users/Win用户名/Desktop
- 以下命令都需要在 .yml 文件所在目录执行
启动所有容器
docker-compose up
重新编译并启动所有容器
docker-compose up --build
停止所有容器
docker-compose stop
销毁所有容器
docker-compose down
- 重新编译服务镜像
docker-compose build --force-rm --no-cache
- 重新启动服务
docker-compose up -d --force-recreate
- 进入容器内.例如进入容器内
docker exec 容器id -it /bin/bash
- 查看某个容器的日志。查看容器运行的日志。
docker logs 容器id
## 数据库
- 外部工具连接容器数据库的默认配置是:
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=root
下面上配置 :
- /.env
#存放项目的文件夹
SOURCE_DIR=./www
# http地址
HTTP_HOST=80
# NGINX配置
NGINX_VERSION=alpine
NGINX_CONFD_DIR=./nginx/conf
NGINX_CONF_FILE=./nginx/conf
NGINX_LOG_DIR=./log/nginx
# PHP配置
PHP_VERSION=7.2
PHP_CONFIG_FILE=./php/conf/php.ini
PHP_FPM_CONFIG_FILE=./php/conf/php-fpm.conf
PHP_FPM_LOG=./log/php-fpm
PHP_LOG=./log/php
# MYSQL配置
MYSQL_PORT=3306
MYSQL_ROOT_USER=root
MYSQL_ROOT_PASSWORD=root
MYSQL_TEST_USER=test
MYSQL_TEST_PASSWORD=test
MYSQL_DATA_DIR=./db_data
MYSQL_LOG=./log/mysql
# MYSQL_CONF=./mysql/conf
# MYSQL_MY_CNF=./mysql/my.cnf
- /docker-compose.yml
#版本号
version: "3"
#服务
services:
#mysql服务
db:
#使用mysql目录下的Dockerfile构建镜像
#image: mysql:5.7
build: ./mysql
command: --default-authentication-plugin=mysql_native_password
#磁盘映射。./db_data 是宿主的目录。后者是容器里的目录。
volumes:
- ${MYSQL_DATA_DIR}:/var/lib/mysql
- ${MYSQL_LOG}:/var/log/mysql
restart: always
# 端口映射。前者是宿主的。后者是容器里端口
ports:
- "${MYSQL_PORT}:3306"
#环境变量
environment:
#mysql的root密码
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
#容器会创建的数据库
MYSQL_DATABASE: dockerdb
#test用户
MYSQL_USER: ${MYSQL_TEST_USER}
#test用户的密码
MYSQL_PASS: ${MYSQL_TEST_PASSWORD}
#=======================================================
#php-fpm服务
php:
#服务器镜像构建的目录。会在该目录下寻找dockerfile构建镜像。
build: ./php-fpm
#依赖的服务。会在容器里的host文件里添加 一条记录。访问db,即可访问mysql的服务。
depends_on:
- db
#目录映射
volumes:
- ${SOURCE_DIR}:/www
- ${PHP_FPM_LOG}:/var/log/php-fpm
- ${PHP_LOG}:/var/log/php
restart: always
#=======================================================
#nginx服务
nginx:
#使用nginx目录下的Dockerfile构建镜像
build: ./nginx
depends_on:
- php
#目录映射
volumes:
- ${SOURCE_DIR}:/www
- ${NGINX_LOG_DIR}:/var/log/nginx
- ${NGINX_CONFD_DIR}:/etc/nginx/conf.d
#端口映射
ports:
- "${HTTP_HOST}:80"
restart: always
- /mysql/Dockerfile:
# 基础镜像
FROM mysql:latest
# 设置时区
RUN echo "Asia/shanghai" > /etc/timezone;
RUN rm -rf /etc/localtime;
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 将本地mysql.conf.d下的文件复制到镜像中
ADD ./mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/
- /mysql/mysql.conf.d
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
# 时区
default-time_zone = '+8:00'
log_timestamps = SYSTEM
# 是否启用通用查询日志
general-log = on
general_log_file = /var/log/mysql/mysql.log
# 错误日志地址
log-error = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# 慢查询日志
slow_query_log = 1
long-query-time = 1 #慢查询时间 超过1秒则为慢查询
slow_query_log_file = /var/log/mysql/slow.log
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
#default_authentication_plugin=caching_sha2_password
- /nginx/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
- /nginx/Dockerfile
# 基础镜像
FROM nginx:latest
# 设置时区
RUN echo "Asia/shanghai" > /etc/timezone;
RUN rm -rf /etc/localtime;
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#修改配置。站点目录配置和php 请求。
ADD nginx.conf /etc/nginx/
ADD /conf/default.conf /etc/nginx/conf.d/
- /nginx/conf/default.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
access_log /var/log/nginx/log/host.access.log main;
location / {
root /www;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root /www;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /www$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
- /php-fpm/Dockerfile
#基础镜像
FROM php:7.2-fpm
# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
# 将本地源文件复制到镜像
ADD sources.list /etc/apt/sources.list
# 更新系统 && 安装依赖库
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-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-install bcmath zip opcache iconv pdo pdo_mysql mysqli
# apt-get安装扩展
RUN apt-get install -y libmcrypt-dev \
&& pecl install mcrypt-1.0.1 \
&& docker-php-ext-enable mcrypt
# pecl安装扩展
RUN pecl install redis-4.0.1 \
&& pecl install xdebug-2.6.0 \
&& docker-php-ext-enable redis xdebug
# 将本地php.ini复制到镜像中
ADD php.ini /usr/local/etc/php/php.ini
- /php-fpm/sources.list
# 默认第一个方案可能会报zlib1g-dev依赖的错误
# deb http://mirrors.ustc.edu.cn/debian/ stretch main non-free contrib
# deb http://mirrors.ustc.edu.cn/debian/ stretch-updates main non-free contrib
# deb http://mirrors.ustc.edu.cn/debian/ stretch-backports main non-free contrib
# deb-src http://mirrors.ustc.edu.cn/debian/ stretch main non-free contrib
# deb-src http://mirrors.ustc.edu.cn/debian/ stretch-updates main non-free contrib
# deb-src http://mirrors.ustc.edu.cn/debian/ stretch-backports main non-free contrib
# deb http://mirrors.ustc.edu.cn/debian-security/ stretch/updates main non-free contrib
# deb-src http://mirrors.ustc.edu.cn/debian-security/ stretch/updates main non-free contrib
#=================================================
# 方案二:使用中科大源处理zlib1g-dev依赖的错误
deb http://mirrors.ustc.edu.cn/debian stable main contrib non-free
deb-src http://mirrors.ustc.edu.cn/debian stable main contrib non-free
deb http://mirrors.ustc.edu.cn/debian stable-proposed-updates main contrib non-free
deb-src http://mirrors.ustc.edu.cn/debian stable-proposed-updates main contrib non-free
#=================================================
# 镜像源
# 163源 http://mirrors.163.com/
# 阿里源 http://mirrors.aliyun.com/
# 中科大源 http://mirrors.ustc.edu.cn/
施工ing:2020-03-03
预计加入:
1、PHP多版本支持
2、前端环境支持(nvm | node | npm)
网友评论