這篇文章帶給大家的內容是關於Docker下部署LNMP工作環境的教學(詳細步驟),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
普通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
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> Hello, Docker! </body> </html>
編輯.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_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
<?php echo ‘Hello, 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的擴充
<?php phpinfo();
建構MYSQL
#MYSQL持久化Docker容器服務刪除了,保證資料不會遺失建立/lnmp/data/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}"
$ docker-compose up到此為止,屬於你自己的LNMP工作環境已經做好了。
以上是Docker下部署LNMP工作環境的教學(詳細步驟)的詳細內容。更多資訊請關注PHP中文網其他相關文章!