docker lnmp環境の構築


dockerベースコマンドimagesについて
  • 検索docker search php
  • ダウンロードdocker pull php:7.3.6-fpm-alpine3.9
  • 表示docker imagesまたはdocker image ls
  • 単一削除docker rmi imageID
  • 複数削除docker rmi -f $(docker image ls -aq)
  • 削除NONEdocker rmi -f $(docker images -f "dangling=true" -q)
  • 表示情報docker inspect imageID
  • 占用docker stats
  • containerについて
  • 表示docker ps -a
  • 再起動docker restart containerID
  • 停止docker stop containerID
  • その他のコマンド
  • ネットワーク関連
  • ネットワークキャッシュのクリアdocker network prune
  • ネットワークリストの表示docker network ls
  • 詳細を表示docker network inspect netwokrNAME
  • マウントディレクトリ
  • パージキャッシュdocker volume prune
  • 表示リストdocker volume ls
  • 詳細を表示docker volume inspect VOLUMENAME
  • システム関連
  • システム情報docker system info
  • 表示占有docker system df
  • すべてのdocker system prune構築に失敗したミラー、使用されていないネットワーク構成、一時停止したコンテナ
  • を含む

    Dockerfileの詳細
    ファイルコマンドの詳細
  • FROMどのミラーをベースミラーとして指定
  • LABELプロジェクトを通じてミラーを組織したり、ライセンス情報を記録したり、自動化を支援したり、その他の理由でミラーにラベルを追加したりすることができます.
  • docker inspect imageIDで表示可能
  • EXPOSEポートがオープンしているが、表示されている宣言だけでこのポートが利用可能であり、呼び出しが容易である.具体的なポートマッピングはdocker runのときに-pで指定する必要がある.-pの後にポート番号が付いていない場合は、EXPOSEで設定された値
  • を使用する.
  • VOLUMEbuildのイメージを指定します.それらのディレクトリが起動可能なときにファイルシステムの起動コンテナにマウントされるときに-vバインドフォーマットVOLUME[「ディレクトリ」
  • を使用します.
  • USERbuildまたは起動時ユーザがRUN CMD ENTRYPONT実行時のユーザを指定
  • ENV環境変数の構成に使用されることが多い
  • COPYレプリケーションは軽量で、より透明で、使用することをお勧めします.ミラー構築には小さな占有スペースが必要なので、wgetを使用してリモートファイルをローカルにダウンロードし、copyをミラーに解凍し、さもなくばADDを使用すると、ダウンロードパッケージ
  • を解凍して削除することをお勧めします.
  • ADDコピーはtarパッケージを解凍したり、リモートネットワークファイル
  • をダウンロードしたりすることができます.
  • RUNコマンドを実行し、新しいImage Layer
  • を作成
  • CMDコンテナ起動後にデフォルトで実行されるコマンドとパラメータを設定
  • ENTRYPOINTコンテナ起動時に実行するコマンドを設定
  • ミラーを構築する上での注意点
  • できるだけ縮小ベースミラー、例えばalpineを選択してミラーの体積を減らす
  • 不要なファイルをミラーにパッケージしないでください
  • 各種のコンパイル、ダウンロード、インストール中に発生したキャッシュファイルをできるだけ削除してミラー体積を減らす
  • できるだけ段階的にミラーを構築する一歩一歩の拡張ミラー機能を使用して、多層ミラーの発生を避ける
  • CMDおよびENTRYPOINT、COPYおよびADDなどのdockerfileのキーワードを正確に使用する
  • ビルドコマンドの詳細
    docker build -f "Dockerfile" -t my-mysql:v1.0 .
    docker build --helpを使用して表示できます.
    docker-compose
    ファイルコマンド
    コマンドドキュメントアドレス
    このファイルは、主な構成ファイルであり、主にversionservicesnetworkを含み、そのうちversionservicesが必要な要素である.
    一般的なコマンド:
  • image購入者のベースミラーを指定
  • buildコンストラクションコンテキストを含むパスを指定するか、contextと指定したdockerfileファイルとargsパラメータ値を持つオブジェクトとして指定します.
  • contextDockerfileファイルが存在するパスを指定
  • dockerfilecontextで指定したディレクトリの下にあるDockerfileの名前を指定します(デフォルトはDockerfile)
  • argsDockerfileがbuild中に必要とするパラメータ(docker container build--build-argの役割と同等)
  • cache_from # v3.2に追加されたパラメータは、キャッシュされたミラーリスト(docker container build--cache_fromの役割と同等)
  • を指定します.
  • labels v3.3に追加されたパラメータで、ミラーのメタデータを設定します(docker container build--labelsの役割と同じです)
  • shm_size v3.5に追加されたパラメータで、コンテナ/dev/shmパーティションのサイズを設定します(docker container build--shm-sizeの役割と同じです)
  • command#コンテナ起動後にデフォルトで実行されるコマンドを上書きし、shell形式と[]形式
  • をサポートします.
  • container_name指定容器名
  • depends_onコンテナ起動の依存関係を指定します.このオプションは、v 3バージョンでswarmデプロイを使用する場合に無視されます
  • linksコンテナ関連、バージョン3は使用を推奨していないが、ネットワークを使用してコンテナ通信を推奨
  • env_file環境変数ファイル
  • environment環境変数を設定し、environmentの値はenv_を上書きできます.fileの値(docker run--envの役割に等しい)
  • exposeポートを露出するが、シンクホストとマッピング関係を確立することはできない.DockerfileのEXPOSE命令
  • と同様である.
  • portsポートマッピング
  • external_links接続はdocker-composeではない.ymlで定義されたコンテナまたはcomposeで管理されていないコンテナ
  • extra_hostshostをコンテナに記録する/etc/hostsに追加
  • loggingログ統一出力、ログ統計
  • networksコンテナネットワーク構成
  • restart容器を自動的に再起動し、容器を取り外した後に自動的に再起動する仕組み
  • volumesデータボリュームマッピングは、ディレクトリ共有
  • と呼ぶこともできる
    CLIコマンド
  • サービス開始docker-compose up -d --build
  • サービス一時停止docker-compose down
  • 再起動サービスdocekr-compose restart
  • アクセスdocekr-compose exec $1 $2
  • $1docker-compose.ymlファイルservicesで定義されたサービス名
  • $2ベースミラーサーバによって決定され、一般的なaplineは/bin/sh、その他は'/bin/bash'
  • 表示docker-compose ps
  • 実操、docker-compose構築プロジェクト
    プロジェクトディレクトリの作成
     mkdir php

    次のプロジェクト構造を作成します.
  • sitesディレクトリ配置プロジェクトファイル
  • servicesディレクトリ配置サービス関連構成
  • script配置カスタムスクリプト
  • ├── Readme.md
    ├── docker-compose.yml
    ├── script
    ├── services
    │   ├── mariadb
    │   │   └── Dockerfile
    │   ├── nginx
    │   │   ├── Dockerfile
    │   │   ├── conf.d
    │   │   │   └── default.conf
    │   │   └── nginx.conf
    │   ├── php
    │   │   └── Dockerfile
    │   └── redis
    │       └── Dockerfile
    └── sites
        ├── index.html
        └── index.php
    
    8 directories, 10 files

    編集docker-composeファイル
    version: "3"
    services: 
      php:
        build: ./services/php
        ports: 
          - "9001:9000"
        container_name: lnmp-php
        restart: always
        volumes: 
          - ./sites:/www
          - ./services/php/etc:/usr/local/etc
        networks:
          lnmp_net:
            ipv4_address: 101.11.11.10
    
      nginx:
        build: ./services/nginx
        ports:
          - "81:80"
          - "444:443"
        container_name: lnmp-nginx
        restart: always
        volumes: 
          - ./sites:/www
          - ./services/nginx/nginx.conf:/etc/nginx/nginx.conf
          - ./services/nginx/conf.d:/etc/nginx/conf.d:rw
        networks:
          lnmp_net:
            ipv4_address: 101.11.11.11
    
      redis:
        build: ./services/redis
        ports: 
          - "6380:6379"
        container_name: lnmp-redis
        networks:
          lnmp_net:
            ipv4_address: 101.11.11.12
    
      mariadb:
        build: ./services/mariadb
        ports: 
          - "3307:3306"
        container_name: lnmp-mariadb
        restart: always
        volumes: 
          - ./data/mariadb:/var/lib/mysql
        environment:
          MYSQL_ROOT_PASSWORD: 123qwe!@#
          MYSQL_USER: demo
          MYSQL_PASSWORD: 123456
        networks:
          lnmp_net:
            ipv4_address: 101.11.11.13
    
    networks:
      lnmp_net:
        driver: bridge
        ipam:
          config:
          - subnet: 101.11.11.0/20

    編集services/nginxファイル
    FROM nginx:1.17.0-alpine
    
    #      
    RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
    
    #        
    RUN apk update && apk add --upgrade \
        && apk add tzdata \
        && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
        && echo "Asia/Shanghai" > /etc/timezone \
        && apk del tzdata

    編集services/phpファイル
    FROM php:7.3.6-fpm-alpine3.9
    
    #      
    RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
    
    #        
    RUN apk update && apk add --no-cache tzdata autoconf gcc g++ make zlib-dev  curl-dev\
        && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
        && echo "Asia/Shanghai" > /etc/timezone \
        && apk del tzdata \
        && docker-php-ext-install mysqli pdo_mysql opcache \
        && pecl install grpc protobuf xdebug yaf yar swoole   \
        && docker-php-ext-enable  xdebug yaf yar swoole grpc protobuf 

    以上、我々のlnmp環境は基本的に構築されました.以下、Php解析に関する構成を行います.
    修正services/nginx/nginx.confは、必要に応じて自分で修正できます.
    
    user  nginx;
    worker_processes  auto;
    
    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;
    }

    変更services/nginx/conf.dディレクトリ下ファイル
    このディレクトリは、各プロジェクトのプロファイルであり、必要に応じて単一または複数のサービスを構成できます.
    server {
        listen       80;
        server_name  localhost;
    
        #charset koi8-r;
        #access_log  /var/log/nginx/host.access.log  main;
    
            #root   /usr/share/nginx/html;
        root   /www;
        index index.php 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           html;
            fastcgi_pass   101.11.11.10:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$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;
        #}
    }

    サービスの開始
    cd php && docker-compose up --build -d 

    上記の手順は、phpで少し拡張をコンパイルしているので、自分のニーズに応じて応答の削除を行うこともできます.
    ブラウザからのアクセスhttp://127.0.0.1:81,見たらphpinfoの出力情報、おめでとうございます.lnmp環境の導入が完了しました.