博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker下部署自己的LNMP工作环境
阅读量:5924 次
发布时间:2019-06-19

本文共 5304 字,大约阅读时间需要 17 分钟。

普通PC环境也可以用以下配置,只是MYSQL那里换回mysql官方版本就可以。

Docker 安装

$ curl -sSL get.docker.com | sudo sh 复制代码

工作目录

/lnmp/conf 存放虚拟主机配置 /lnmp/data/mysql 存放mysql数据库数据 /lnmp/log 存放nginx、mysql日志 /lnmp/workspace 存放各种项目文件

/lnmp/.env 启动docker时的环境变量配置 /lnmp/docker-compose.yml 构建时的配置文件 /lnmp/php/Dockerfile 编译PHP配置文件

构建Nginx

创建项目

先创建一个静态文件index.html /lnmp/workspace/default/index.html

    
Document Hello, Docker!复制代码

添加构建时的环境变量

编辑.env文件

SOURCE_DIR=./workspaceHTTP_HOST=80NGINX_VERSION=alpineNGINX_CONFD_DIR=./conf/conf.dNGINX_CONF_FILE=./conf/nginx.confNGINX_LOG_DIR=./log复制代码

SOURCE_DIR=./workspace workspace文件夹挂载到nginx下的 /var/www/html HTTP_HOST=80 宿主机的80端口映射到nginx下的80端口 NGINX_VERSION=alpine nginx镜像使用alpine版本

NGINX_CONFD_DIR=./conf/conf.d conf.d文件夹挂载到nginx下的/etc/nginx/conf.d NGINX_CONF_FILE=./conf/nginx.conf nginx.conf挂载nginx的 /etc/nginx/nginx.conf NGINX_LOG_DIR=./log

Nginx.conf

创建/lnmp/conf/nginx.conf文件
user  nginx;worker_processes  1;pid        /var/run/nginx.pid;error_log  /var/log/nginx/nginx.error.log warn;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/nginx.access.log  main;    sendfile        on;    #tcp_nopush     on;    keepalive_timeout  65;    #gzip  on;    include /etc/nginx/conf.d/*.conf;}复制代码

配置虚拟主机

创建/lnmp/conf/conf.d/default.conf文件 注意: root下的路径必须是以/var/www/html开头,default是我们本地workspace下的一个文件夹

server {    listen       80;    server_name  localhost default-server;    root   /var/www/html/default;    index  index.php index.html index.htm;    access_log  /var/log/nginx/nginx.localhost.access.log  main;    error_log  /var/log/nginx/nginx.localhost.error.log  warn;    #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;    }}复制代码

构建Nginx配置

编辑 docker-composer.yml 以下的${}都是上面.env文件里配置的变量

version: "3"services:  nginx:    image: nginx:${NGINX_VERSION}    ports:      - ${HTTP_HOST}:80    volumes:      - ${SOURCE_DIR}:/var/www/html/:rw      - ${NGINX_CONFD_DIR}:/etc/nginx/conf.d/:rw      - ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf:ro      - ${NGINX_LOG_DIR}:/var/log/nginx/:rw    restart: always复制代码

启动Nginx

运行命令之后,访问树莓派的IP,正常的话会显示 Hello, Docker!

$ docker-compose up复制代码

构建PHP

编辑/lnmp/.env添加PHP构建变量

PHP_CONFIG_FILE=./conf/php.iniPHP_FPM_CONFIG_FILE=./conf/php-fpm.conf复制代码

因php.ini配置有点长,可以在下面地址复制

添加Dockerfile

/lnmp/php/Dockerfile

ARG PHP_VERSIONFROM php:${PHP_VERSION}-fpmRUN apt updateRUN apt-get install -y \		libfreetype6-dev \		libjpeg62-turbo-dev \		libmcrypt-dev \		libpng-dev \        unixodbc-dev \        gcc g++ make autoconf libc-dev pkg-config复制代码

添加构建PHP

编辑 /lnmp/docker-compose.yml文件

version: "3"services:  nginx:    image: nginx:${NGINX_VERSION}    ports:      - ${HTTP_HOST}:80    volumes:      - ${SOURCE_DIR}:/var/www/html/:rw      - ${NGINX_CONFD_DIR}:/etc/nginx/conf.d/:rw      - ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf:ro      - ${NGINX_LOG_DIR}:/var/log/nginx/:rw    restart: always  php:    build:       context: ./php      args:        PHP_VERSION: 7.2    volumes:      - ${SOURCE_DIR}:/var/www/html/:rw      - ${PHP_CONFIG_FILE}:/usr/local/etc/php/php.ini:ro      - ${PHP_FPM_CONFIG_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw    cap_add:      - SYS_PTRACE    restart: always    networks:      - default复制代码

虚拟主机支持PHP解析

/lnmp/conf/conf.d/default.conf 下面fastcgi_pass php:9000的php,是指上面docker-compose.yml的一个service名称,可以用来针对某个项目指定PHP版本

#...其它代码location ~ \.php$ {    fastcgi_pass   php:9000;    fastcgi_index  index.php;    include        fastcgi_params;    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;}复制代码

添加文件

/lnmp/workspace/default/index.php

启动预览

如果之前没有终止进程的, 可以ctrl + c终止之后再运行下面的命令。 如无意外,访问树莓派的IP会显示 Hello, PHP!.

$ docker-compose up复制代码

添加PHP扩展

/lnmp/.env 添加变量,下面以swoole扩展演示,其它的扩展参考下面的操作就可以

PHP_SWOOLE_VERSION=4.2.10复制代码

/lnmp/docker-compose.yml 添加变量

php:    build:       context: ./php      args:        PHP_VERSION: 7.2        PHP_SWOOLE: ${PHP_SWOOLE_VERSION}复制代码

/lnmp/php/Dockerfile 下载并编译swoole

# ...其它代码ARG PHP_SWOOLE=falseRUN if [ ${PHP_SWOOLE} != false ]; then \    curl -O http://pecl.php.net/get/swoole-${PHP_SWOOLE}.tgz -L \    && pecl install swoole-${PHP_SWOOLE}.tgz \    && docker-php-ext-enable swoole \;fi复制代码

重新编译

注意:Dockerfile有改动的话,必须加--build重新编译一次, 不然docker-compose up的时候不会生效

$ docker-compose up --build复制代码

预览

编辑/lnmp/workspace/default/index.php保存,访问树莓派的IP,不出意外你可以找到swoole的扩展

构建MYSQL

MYSQL持久化

Docker容器服务删除了,保证数据不会丢失 创建/lnmp/data/mysql文件夹

构建时变量

编辑/lnmp/.env文件,添加mysql服务端口、登录密码与数据持久化文件夹。

MYSQL_HOST_PORT=3306MYSQL_PASSWORD=1234MYSQL_DATA_DIR=./data/mysql复制代码

构建配置

version: "3"services:    #... 其它代码    mysql:      image: tobi312/rpi-mysql      ports:        - ${MYSQL_HOST_PORT}:3306      volumes:        - ${MYSQL_DATA_DIR}:/var/lib/mysql:rw      environment:        MYSQL_ROOT_PASSWORD: "${MYSQL_PASSWORD}"复制代码

启动

启动后,用数据连接工具测试,链接地址:树莓派IP 端口:3306 用户名:root 密码:1234

$ docker-compose up复制代码

到此为止,属于你自己的LNMP工作环境已经做好了。

转载地址:http://kmavx.baihongyu.com/

你可能感兴趣的文章
219. 单页应用 会话管理(session、cookie、jwt)
查看>>
java概述
查看>>
【Filecoin源码仓库全解析】第一章:搭建Filecoin测试节点
查看>>
极限编程 (Extreme Programming) - 发布计划 (Release Planning)
查看>>
跨域的四种方式
查看>>
i-i.me:网址导航真的是伪需求吗?
查看>>
Iterator 和 for...of 循环
查看>>
关于vue父子组件之间事件触发及数据传递问题
查看>>
JavaScript数据结构与算法——集合
查看>>
JavaFX 学习笔记——窗口与控件
查看>>
82. Remove Duplicates from Sorted List II
查看>>
受 SQLite 多年青睐,C 语言到底好在哪儿?
查看>>
User Stories - 最佳实践 (Best Practices)
查看>>
纯css实现叉号
查看>>
小程序调用阿里云身份证识别OCR(附带七牛云上传图片)
查看>>
判断字符串出现次数最多的字符 及 次数
查看>>
如何解决高并发,秒杀问题
查看>>
重新学习web后端开发-001-写在前面的话
查看>>
react native 原生模块桥接的简单说明
查看>>
C++回声服务器_4-UDP connect版本客户端
查看>>