docker-compose 一键构建LNMP


lnmp

lnmp的容器编排。

实现对多个容器的编排:nginx、mysql、php-fpm。
支持一键构建启动和销毁。
支持配置的修改和日志的查看。方便开发和测试。
支持快速修改构建中的一些参数,直接修改 .env 文件


目前版本只合适作为日常开发和测试环境。不适用于生产环境。

参考:忘了。。。待会儿找到补上=。=
算了不补了
可以直接使用laradock集成的很好:https://github.com/laradock/laradock


版本的选择

  • 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/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容