dockerの下のマルチコンテナはdnmp環境を迅速に構築し、ワンタッチで自動化された導入を実現
需要
もしこのようなプロジェクトがあれば、家で開発するには環境を構築する必要があり、会社で開発するには環境を構築する必要があり、テストするには環境を構築する必要があり、オンラインでは環境を構築する必要があります.また、環境を構築する際には、さまざまな依存関係をインストールし、ローカルで使用でき、テストが使用できないなど、さまざまな状況が発生する可能性があります.この場合、システムにDockerをインストールし、Dockerfileを書いてdocker-composeを実行するだけです.ymlは自動的に導入を完了し、各プラットフォームでの一貫性を保証し、便利で効率的ではないでしょうか.
複数のコンテナのメリット
PHP環境を構築するには、起動するコンテナ:nginx、phpが必要です.もちろん、これらの容器に加えて、mysql、redis、Memcachedなどの関連拡張にも関与する可能性があります.
単一コンテナ配置(オリジナルインストールlnmp)を採用するよりも、nginxをインストールする際に未知のエラーが発生し、解決できず、再ロードするしかない場合、古いngxinコンテナを削除し、新しいnginxコンテナを起動すればよいなど、phpなどの関連コンテナは、何の影響も受けません.ただし、単一コンテナの導入は、環境全体を削除し、すべてのものを再インストールして導入することに相当します.もちろん、単一のコンテナでも、正常な動作を保証する場合は、このコンテナを新しいミラーに構築することができ、使用するたびに、このミラーでコンテナを起動するだけでよいというメリットがあります.
しげん
今回の構築に関する関連ファイルジャンプについて:リソースdockerのインストールジャンプについて:dockerインストールdockerの使用コマンドジャンプについて:
一、手動構築プルデマンドミラー redisミラーリングによりredisコンテナ を起動mysqlミラーでmysqlコンテナを起動 を設定phpミラーリングによりphpコンテナ を起動ngxinミラーリングによりnginxコンテナを起動 PHP拡張ライブラリインストール 二、自動化構築(docker-compose)
docker-composeは容器を並べたものです.たとえば、phpミラー、mysqlミラー、nginxミラーがあります.docker-composeがない場合は、起動するたびに、各コンテナの起動パラメータ、環境変数、コンテナの名前付け、異なるコンテナのリンクパラメータの指定など、一連の操作を叩く必要があります.かなり煩雑です.docker-composerを使ったら、これらのコマンドをdocker-composerに一度に書くことができます.ymlファイルでは、この環境全体(3つのコンテナを含む)を起動するたびにdocker-composer upコマンドを叩くだけでOKです.
1.docker-composeを作成する.ymlファイル
2.docker-composeを実行する.yml
docker-composeに入ります.ymlファイルディレクトリは、コマンドdocker-compose up-dを実行して対応するコンテナを作成しますが、PHP拡張は手動でインストールする必要があります.
三、完全な構築
上のdocker-composeはワンタッチ操作を実現していますが、問題はPHPの拡張ライブラリは自分でここにインストールするかDockerfileでカスタムコンテナミラーを構築して本当のワンタッチで完成させるかです.
mysql/Dockerfile
redis/Dockerfile
nginx/Dockerfile
php/Dockerfile
docker-compose.yml
docker-compose.ymlファイルの配置と各Dockerfileディレクトリの同級でこのディレクトリに入り、コマンドdocker-compose up-dを実行します.
docker-compose.ymlは、Dockerfileで作成する場合は、公式ミラーイメージを指定する必要はありません.直接build:./ディレクトリは、ディレクトリで構成されているDockerfileを参照して、新しいミラーを作成します.注意:作成すると、次のdocker-composeはbuild作成せずに既存のミラーを直接取り出します.Dockerfile構成を変更した場合は、削除する前にミラーを削除してください.
ホスト上でshellスケジューリングphp実行スクリプトが必要な場合は、次のコマンドを実行できます.
もしこのようなプロジェクトがあれば、家で開発するには環境を構築する必要があり、会社で開発するには環境を構築する必要があり、テストするには環境を構築する必要があり、オンラインでは環境を構築する必要があります.また、環境を構築する際には、さまざまな依存関係をインストールし、ローカルで使用でき、テストが使用できないなど、さまざまな状況が発生する可能性があります.この場合、システムにDockerをインストールし、Dockerfileを書いてdocker-composeを実行するだけです.ymlは自動的に導入を完了し、各プラットフォームでの一貫性を保証し、便利で効率的ではないでしょうか.
複数のコンテナのメリット
PHP環境を構築するには、起動するコンテナ:nginx、phpが必要です.もちろん、これらの容器に加えて、mysql、redis、Memcachedなどの関連拡張にも関与する可能性があります.
単一コンテナ配置(オリジナルインストールlnmp)を採用するよりも、nginxをインストールする際に未知のエラーが発生し、解決できず、再ロードするしかない場合、古いngxinコンテナを削除し、新しいnginxコンテナを起動すればよいなど、phpなどの関連コンテナは、何の影響も受けません.ただし、単一コンテナの導入は、環境全体を削除し、すべてのものを再インストールして導入することに相当します.もちろん、単一のコンテナでも、正常な動作を保証する場合は、このコンテナを新しいミラーに構築することができ、使用するたびに、このミラーでコンテナを起動するだけでよいというメリットがあります.
しげん
今回の構築に関する関連ファイルジャンプについて:リソースdockerのインストールジャンプについて:dockerインストールdockerの使用コマンドジャンプについて:
一、手動構築
docker pull php:7.2-fpm
docker pull nginx
docker pull mysql:5.7
docker pull redis:3.2
#
docker run --name master-redis -p 6379:6379 -d redis:3.2
docker run --name master-db -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
-e MYSQL_ROOT_PASWORDはmysqlに初期パスワードdocker run -d -p 9000:9000 --name master-php -v d:/dnmp/www:/var/www/html -v d:/dnmp/php:/usr/local/etc/php --link master-db:master-db --link master-redis:master-redis --privileged=true php:7.2-fpm
docker run --name master-nginx -d -p 80:80 -v d:/dnmp/www:/usr/share/nginx/html -v d:/dnmp/nginx:/etc/nginx -v d:/dnmp/logs/nginx.logs:/var/log/nginx --link master-php:master-php --privileged=true nginx
パラメータ説明:#--nameコンテナ別名.この名前は、コンテナ間の接続、ngxin構成、PHPコードでの接続構成などを確立するために使用されるため、コンテナ名を変更すると、そのコンテナ名を使用する場所も変更する必要があります.v PHP容器を起動する時、容器内部のいくつかの経路をホストホスト経路にマッピングし、ファイルの同期を保証する必要がある.(空のフォルダをマウントするとコンテナの内容が上書きされるので、プロファイルは事前に準備しておく必要があります.ここでは、現在のプロジェクトのパスに注意し、直接コピーして使用しないでください).linkは、ソースコンテナ(リンクされたコンテナ)と受信コンテナ(アクティブにリンクされたコンテナ)との間で相互通信を可能にし、コンテナ間の通信によるコンテナIPへの依存を解消する.--privileged=trueはコンテナに特権を与え、ディレクトリをマウントした後、コンテナはディレクトリ以下のファイルまたはディレクトリにアクセスできます.–nameコンテナ名を変更した場合は、対応するプロファイルを変更する必要があります.# master-php
docker exec -it master-php /bin/bash
# pdo_mysql
docker-php-ext-install pdo pdo_mysql
# php redis, redis
# redis
curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/4.2.0.tar.gz
#
tar zxvf /tmp/redis.tar.gz
#
rm -r /tmp/redis.tar.gz
#
mkdir -p /usr/src/php/ext
# redis
mv phpredis-4.2.0 /usr/src/php/ext/redis
# redis
docker-php-ext-install redis
#
exit
#
docker restart master-php
docker-composeは容器を並べたものです.たとえば、phpミラー、mysqlミラー、nginxミラーがあります.docker-composeがない場合は、起動するたびに、各コンテナの起動パラメータ、環境変数、コンテナの名前付け、異なるコンテナのリンクパラメータの指定など、一連の操作を叩く必要があります.かなり煩雑です.docker-composerを使ったら、これらのコマンドをdocker-composerに一度に書くことができます.ymlファイルでは、この環境全体(3つのコンテナを含む)を起動するたびにdocker-composer upコマンドを叩くだけでOKです.
1.docker-composeを作成する.ymlファイル
version: "2"
services:
master-db:
container_name: "master-db"
restart: always
ports:
- "3306:3306"
volumes:
- d:/dnmp/mysql/conf.d/:/etc/mysql/conf.d/
environment:
MYSQL_ROOT_PASSWORD: 123456
image: mysql:5.7
master-redis:
container_name: "master-redis"
restart: always
ports:
- "6379:6379"
volumes:
- d:/dnmp/redis:/data
image: redis:3.2
master-php:
container_name: "master-php"
restart: always
ports:
- "9000:9000"
volumes:
- d:/dnmp/www:/var/www/html
- d:/dnmp/php:/usr/local/etc/php
links:
- "master-db"
- "master-redis"
image: php:7.2-fpm
master-nginx:
container_name: "master-nginx"
restart: always
ports:
- "80:80"
links:
- "master-php"
volumes:
- d:/dnmp/www:/usr/share/nginx/html
- d:/dnmp/nginx:/etc/nginx
- d:/dnmp/logs/nginx.logs:/var/log/nginx
image: nginx:latest
#container_name , 。
#restart: always ,always:
#ports:
#volumes: 。 (HOST:CONTAINER) (HOST:CONTAINER:ro), (rw), ro
#environment:
#MYSQL_ROOT_PASSWORD:
#image:
2.docker-composeを実行する.yml
docker-composeに入ります.ymlファイルディレクトリは、コマンドdocker-compose up-dを実行して対応するコンテナを作成しますが、PHP拡張は手動でインストールする必要があります.
三、完全な構築
上のdocker-composeはワンタッチ操作を実現していますが、問題はPHPの拡張ライブラリは自分でここにインストールするかDockerfileでカスタムコンテナミラーを構築して本当のワンタッチで完成させるかです.
mysql/Dockerfile
FROM mysql:5.7
MAINTAINER qyh "[email protected]"
# set timezome
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
redis/Dockerfile
FROM redis:4.2
MAINTAINER qyh "[email protected]"
# set timezome
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
nginx/Dockerfile
FROM nginx
MAINTAINER qyh "[email protected]"
# set timezome
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
php/Dockerfile
FROM php:7.2-fpm
MAINTAINER qyh "[email protected]"
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-install zip \
&& docker-php-ext-install pdo_mysql \
&& docker-php-ext-install opcache \
&& docker-php-ext-install mysqli
RUN pecl install redis && docker-php-ext-enable redis \
&& pecl install xdebug && docker-php-ext-enable xdebug
RUN echo "" >> /usr/local/etc/php/php.ini
RUN usermod -u 1000 www-data
docker-compose.yml
version: "2"
services:
master-db:
build: ./mysql
container_name: "master-db"
restart: always
ports:
- "3306:3306"
volumes:
- d:/dnmp/mysql/conf.d/:/etc/mysql/conf.d/
environment:
MYSQL_ROOT_PASSWORD: 123456
master-redis:
build: ./redis
container_name: "master-redis"
restart: always
ports:
- "6379:6379"
volumes:
- d:/dnmp/redis:/data
master-php:
build: ./php
container_name: "master-php"
restart: always
ports:
- "9000:9000"
volumes:
- d:/dnmp/www:/var/www/html
- d:/dnmp/php:/usr/local/etc/php
links:
- "master-db"
- "master-redis"
master-nginx:
build: ./nginx
container_name: "master-nginx"
restart: always
ports:
- "80:80"
links:
- "master-php"
volumes:
- d:/dnmp/www:/usr/share/nginx/html
- d:/dnmp/nginx:/etc/nginx
- d:/dnmp/logs/nginx.logs:/var/log/nginx
docker-compose.ymlファイルの配置と各Dockerfileディレクトリの同級でこのディレクトリに入り、コマンドdocker-compose up-dを実行します.
docker-compose.ymlは、Dockerfileで作成する場合は、公式ミラーイメージを指定する必要はありません.直接build:./ディレクトリは、ディレクトリで構成されているDockerfileを参照して、新しいミラーを作成します.注意:作成すると、次のdocker-composeはbuild作成せずに既存のミラーを直接取り出します.Dockerfile構成を変更した場合は、削除する前にミラーを削除してください.
ホスト上でshellスケジューリングphp実行スクリプトが必要な場合は、次のコマンドを実行できます.
docker exec -it master /bin/bash -c '/usr/local/bin/php /var/www/html/blog/public/index.php