美文网首页
docker-compose 一键构建LNMP

docker-compose 一键构建LNMP

作者: 噫那里有条咸鱼 | 来源:发表于2019-06-21 14:58 被阅读0次

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)

相关文章

网友评论

      本文标题:docker-compose 一键构建LNMP

      本文链接:https://www.haomeiwen.com/subject/acvyqctx.html