普通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=./workspace
HTTP_HOST=80
NGINX_VERSION=alpine
NGINX_CONFD_DIR=./conf/conf.d
NGINX_CONF_FILE=./conf/nginx.conf
NGINX_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.ini
PHP_FPM_CONFIG_FILE=./conf/php-fpm.conf
因php.ini配置有点长,可以在下面地址复制
php.ini
php-fpm.conf
添加Dockerfile
/lnmp/php/Dockerfile
ARG PHP_VERSION
FROM php:${PHP_VERSION}-fpm
RUN apt update
RUN 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=false
RUN 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=3306
MYSQL_PASSWORD=1234
MYSQL_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工作环境已经做好了。