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を作成します.



    
    
    
    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ホストにマウントされた80ポートをnginxの80ポートHTTP_HOST=80 nginxミラーにマッピングするNGINX_VERSION=alpineバージョンalpine conf.dフォルダはnginx下のNGINX_CONFD_DIR=./conf/conf.d /etc/nginx/conf.d nginxにマウントする.conf nginxのNGINX_CONF_FILE=./conf/nginx.conf /etc/nginx/nginx.confをマウント
Nginx.conf NGINX_LOG_DIR=./logファイルの作成
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/nginx.confファイルの作成注意:rootの下のパスは/lnmp/conf/conf.d/default.confで始まる必要があります./var/www/htmlはローカルのdefaultの下のフォルダです.
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構成の構築
編集workspace以下のdocker-composer.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

Nginxの起動
コマンドを実行した後、ツリーベリーパイのIPにアクセスし、正常であれば.envと表示されます
$ docker-compose up

PHPの構築
編集Hello, Docker! PHP構築変数の追加
PHP_CONFIG_FILE=./conf/php.ini
PHP_FPM_CONFIG_FILE=./conf/php-fpm.conf

因php.iniの配置は少し長いので、以下のアドレスでphpをコピーすることができます.iniphp-fpm.conf
Dockerfileの追加/lnmp/.env
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/php/Dockerfileファイルの編集
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/docker-compose.ymlの下の/lnmp/conf/conf.d/default.confのphpは、上のfastcgi_pass php:9000のサービス名を指し、ある項目に対してPHPバージョンを指定するために使用することができる.
#...    

location ~ \.php$ {
    fastcgi_pass   php:9000;
    fastcgi_index  index.php;
    include        fastcgi_params;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
}

ファイルの追加docker-compose.yml

プレビューの開始
プロセスが終了していない場合は、/lnmp/workspace/default/index.phpが終了してから次のコマンドを実行できます.アクシデントがなければ、ベリーパイのIPにアクセスするとctrl + cが表示される.
$ docker-compose up

PHP拡張機能の追加Hello, PHP!変数を追加し、/lnmp/.envで拡張します.他の拡張は以下の操作を参照してください.
PHP_SWOOLE_VERSION=4.2.10
swoole変数の追加
php:
    build: 
      context: ./php
      args:
        PHP_VERSION: 7.2
        PHP_SWOOLE: ${PHP_SWOOLE_VERSION}
/lnmp/docker-compose.yml 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に変更がある場合は、/lnmp/php/Dockerfileを追加して再コンパイルしなければなりません.そうしないと、--buildの場合は有効になりません.
$ docker-compose up --build

プレビュー
編集docker-compose up保存して、ベリーパイのIPにアクセスして、意外にもあなたはswooleの拡張を見つけることができます

MYSQLの構築
MYSQL持続化
Dockerコンテナサービスは削除され、データが失われないことを保証します./lnmp/workspace/default/index.phpフォルダを作成します.
ビルド時変数/lnmp/data/mysqlファイルを編集し、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}"

開始
起動後、データ接続ツールでテストし、リンクアドレス:/lnmp/.envポート: IPユーザー名:3306パスワード:root
$ docker-compose up

ここまで、あなた自身のLNMPの作業環境はすでにできています.