Dockerを利用してWebサイトの開発環境を構築する方法
24922 ワード
準備作業
前の章では、WindowsにDockerをインストールする方法と、一般的なコマンドについて説明しました.
これらの準備ができていない場合は、まず参考にしてください. https://blog.csdn.net/lamp_yang_3533/article/details/77801992 .
以下では、Dockerを使用してWebサイトの開発環境を構築する方法について具体的に説明します.
ThinkPHP 5.1を例に、Windowsでdockerを利用してtp 5プロジェクトの開発環境を構築する方法を紹介します. nginx 1.13.7
php 7.1.12(php-fpm)
mysql 5.7.22
redis 4.0.9
docker-compose.ymlファイルの作成
Windowsのユーザーホームディレクトリ(C:UsersHP、略記~)にフォルダdocker_を作成data,そして~/docker_dataでdocker-compose.ymlファイルを作成します.
内容は次のとおりです.
上記のコードでは、nginxとphp-fpmを同時に含むnginx-php-fpmミラーを使用しています.ミラーを別々に引くこともできます.
スターティングコンテナ
まずdockerを実行する必要があります.デスクトップのショートカットDocker Quickstart Terminalをクリックすると、Linux仮想マシンとdockerが起動します.
開いている端末に、次のコマンドを入力します.
上記のコマンドは、docker-compose.ymlプロファイルに基づいて、リモート・ウェアハウスからミラーを自動的に引き出し、対応するコンテナ・インスタンスを作成および実行します.
次の印刷情報が表示されます.
コンテナの起動に成功したことを示します.
ローカルのすべてのミラーを表示
実行中のコンテナの表示
VMリストの表示
これにより,Linux仮想マシンのIPアドレスが192.168.99.100であることが分かった.
Windowsのブラウザでのアクセス http://192.168.99.100/ ,得られた結果は403 Forbiddenであった.これは、Webサイトのルートディレクトリにファイルがないためです.
WindowsシステムのC:UsersHPdocker_ではDatawwwrootディレクトリでphpinfo.phpファイルを新規作成します.コードは次のとおりです.
Webサーバのルートディレクトリのマッピングを行いました
だから、~/docker_Data/wwwrootディレクトリで変更が発生するとdockerサービスのdr-webコンテナインスタンスの/var/www/htmlディレクトリに自動的に同期します.
注意:このディレクトリのマッピングはコンテナベースで、コンテナに入ってから、対応するファイルを見ることができます.Linux仮想マシンには/var/www/htmlディレクトリがない可能性があります.ディレクトリのマッピングは双方向であることも覚えておいてください.
Windowsの端末から、次のコマンドでコンテナに入ることができます.
ここで私が使っているのは容器の名前で、容器のIDも使えます.
dr-webコンテナに入ると、コマンドプロンプトはbash-4.3#に変わり、コンテナのbash shellでLinuxのコマンドを実行できることを示します.
このコンテナの/var/www/htmlディレクトリにphpinfo.phpファイルが自動的に存在するかどうかを確認します.
検証結果は確かに私たちの予想通りです.
ブラウザからのアクセス http://192.168.99.100/phpinfo.php ,phpinfo()の印刷情報が表示されます.
Windowsシステムでnginxプロセスのプロファイルを変更できるようにします.docker-compose.ymlファイルに、対応するディレクトリマッピングを追加することもできます.
コンテナ内のnginxプロファイルがどこに保存されているのか、フォーマットがどうなっているのか、まだ分かりません.したがって,dr−webコンテナにおけるnginx構成を先に見ることができる.
/etc/nginx/nginx.confプロファイルをよく観察すると、ソフトリンクに役立ち、最終的な仮想ホストプロファイルは/etc/nginx/sites-availableディレクトリにあります.
コンテナからWindowsシステムにコピーする必要があります.
まずexitコマンドを入力し、コンテナのshellを終了してWindowsの端末に戻ります.
次に、コピーを行います.
これにより、dr-webコンテナの/etc/nginx/sites-availableディレクトリの内容が、WindowsのC:UsersHPdocker_にコピーされますDataginxディレクトリにあります.
次にdocker-compose.ymlファイルを変更し、webサービスコードブロックのvolumesを次のように変更します.
そして、変更~/docker_Data/nginxディレクトリのdefault.confプロファイルに、tp 5プロジェクトにアクセスするための仮想ホストserverを追加します.
docker-compose.ymlを変更したので、前のコンテナを削除し、新しいコンテナインスタンスを作成する必要があります.
コンテナを削除する前に、コンテナを閉じる必要があります.
閉じたコンテナを削除します.
次に、コンテナを再作成します.
Webサイトのルートディレクトリには、tp 5のプロジェクトソースコードがまだありません.そのため、tp 5をインストールする必要があります.
前述したように、ディレクトリのマッピングは双方向で、WindowsのC:UsersHPdocker_datawwwrootディレクトリにtp 5をインストールするか、dr-webコンテナの/var/www/htmlディレクトリにインストールすることもできます.
Linux仮想マシンにcomposerがインストールされていないため、私のWindowsにはcomposerがインストールされているので、Windowsでcomposerを使用してtp 5をインストールすることにしました.
そして、ブラウザでアクセス http://192.168.99.100/tp5/public/ ,tp 5のウェルカムインタフェースが見えます.
アクセスする場合 http://tp5.test/ ,ブラウザは、tp 5.testのサーバIPアドレスが見つかりません.
これは、Windowsのhostsファイルをまだ修正していないからです.
次に、C:WindowsSystem 32driversetchostsファイルを編集し、ファイルの最後にコードを1行追加します.
保存後、更新 http://tp5.test/ ,正常にアクセスできます.
これにより、Dockerを利用して、tp 5プロジェクトの開発環境を完全に構築しました.
docker-composeは非常に一般的なツールで、ヘルプコマンドを参照できる他のコマンドとオプションもあります.
前の章では、WindowsにDockerをインストールする方法と、一般的なコマンドについて説明しました.
これらの準備ができていない場合は、まず参考にしてください. https://blog.csdn.net/lamp_yang_3533/article/details/77801992 .
以下では、Dockerを使用してWebサイトの開発環境を構築する方法について具体的に説明します.
ThinkPHP 5.1を例に、Windowsでdockerを利用してtp 5プロジェクトの開発環境を構築する方法を紹介します.
php 7.1.12(php-fpm)
mysql 5.7.22
redis 4.0.9
docker-compose.ymlファイルの作成
Windowsのユーザーホームディレクトリ(C:UsersHP、略記~)にフォルダdocker_を作成data,そして~/docker_dataでdocker-compose.ymlファイルを作成します.
内容は次のとおりです.
version: '3.6'
services:
web:
image: richarvey/nginx-php-fpm:latest
restart: always
container_name: dr-web
ports:
- "80:80"
- "9000:9000"
networks:
- dockerinnernet
depends_on:
- mysql
- redis
volumes:
- ~/docker_data/wwwroot:/var/www/html
mysql:
image: mysql:5.7.22
restart: always
container_name: dr-mysql
ports:
- 3306:3306
networks:
- dockerinnernet
volumes:
- mydata:/var/lib/mysql
- ~/docker_data/dbdump:/root
environment:
- MYSQL_ROOT_PASSWORD=123456
- MYSQL_DATABASE=test_db
redis:
image: redis
container_name: dr-redis
ports:
- "6379:6379"
networks:
- dockerinnernet
volumes:
- ~/docker_data/redis:/data
networks:
dockerinnernet:
volumes:
mydata:
上記のコードでは、nginxとphp-fpmを同時に含むnginx-php-fpmミラーを使用しています.ミラーを別々に引くこともできます.
スターティングコンテナ
まずdockerを実行する必要があります.デスクトップのショートカットDocker Quickstart Terminalをクリックすると、Linux仮想マシンとdockerが起動します.
開いている端末に、次のコマンドを入力します.
# docker_data
$ cd ~/docker_data
#
$ docker-compose up -d
上記のコマンドは、docker-compose.ymlプロファイルに基づいて、リモート・ウェアハウスからミラーを自動的に引き出し、対応するコンテナ・インスタンスを作成および実行します.
次の印刷情報が表示されます.
...
Creating dr-redis ... done
Creating dr-mysql ... done
Creating dr-web ... done
コンテナの起動に成功したことを示します.
ローカルのすべてのミラーを表示
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7.22 0164c13b662c 2 days ago 372MB
redis latest c5355f8853e4 3 weeks ago 107MB
richarvey/nginx-php-fpm latest cea38a28b888 4 months ago 281MB
実行中のコンテナの表示
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
94168b153bcf richarvey/nginx-php-fpm:latest "docker-php-entrypoi…" 47 seconds ago Up 48 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:9000->9000/tcp, 443/tcp dr-web
326d294a80c1 mysql:5.7.22 "docker-entrypoint.s…" 47 seconds ago Up 49 seconds 0.0.0.0:3306->3306/tcp dr-mysql
6ce9fae6c1a2 redis "docker-entrypoint.s…" 47 seconds ago Up 49 seconds 0.0.0.0:6379->6379/tcp dr-redis
VMリストの表示
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * virtualbox Running tcp://192.168.99.100:2376 v18.04.0-ce
これにより,Linux仮想マシンのIPアドレスが192.168.99.100であることが分かった.
Windowsのブラウザでのアクセス http://192.168.99.100/ ,得られた結果は403 Forbiddenであった.これは、Webサイトのルートディレクトリにファイルがないためです.
WindowsシステムのC:UsersHPdocker_ではDatawwwrootディレクトリでphpinfo.phpファイルを新規作成します.コードは次のとおりです.
phpinfo();
Webサーバのルートディレクトリのマッピングを行いました
volumes:
- ~/docker_data/wwwroot:/var/www/html
だから、~/docker_Data/wwwrootディレクトリで変更が発生するとdockerサービスのdr-webコンテナインスタンスの/var/www/htmlディレクトリに自動的に同期します.
注意:このディレクトリのマッピングはコンテナベースで、コンテナに入ってから、対応するファイルを見ることができます.Linux仮想マシンには/var/www/htmlディレクトリがない可能性があります.ディレクトリのマッピングは双方向であることも覚えておいてください.
Windowsの端末から、次のコマンドでコンテナに入ることができます.
$ docker exec -it dr-web /bin/bash
bash-4.3#
ここで私が使っているのは容器の名前で、容器のIDも使えます.
dr-webコンテナに入ると、コマンドプロンプトはbash-4.3#に変わり、コンテナのbash shellでLinuxのコマンドを実行できることを示します.
このコンテナの/var/www/htmlディレクトリにphpinfo.phpファイルが自動的に存在するかどうかを確認します.
bash-4.3# ls -a /var/www/html
. .. phpinfo.php
検証結果は確かに私たちの予想通りです.
ブラウザからのアクセス http://192.168.99.100/phpinfo.php ,phpinfo()の印刷情報が表示されます.
Windowsシステムでnginxプロセスのプロファイルを変更できるようにします.docker-compose.ymlファイルに、対応するディレクトリマッピングを追加することもできます.
コンテナ内のnginxプロファイルがどこに保存されているのか、フォーマットがどうなっているのか、まだ分かりません.したがって,dr−webコンテナにおけるnginx構成を先に見ることができる.
bash-4.3# ls -al /etc/nginx
total 92
drwxr-xr-x 9 root root 4096 Dec 2 18:48 .
drwxr-xr-x 37 root root 4096 Apr 22 14:14 ..
drwxr-xr-x 2 root root 4096 Dec 2 18:39 conf.d
-rw-r--r-- 1 root root 1077 Dec 2 18:39 fastcgi.conf
-rw-r--r-- 1 root root 1077 Dec 2 18:39 fastcgi.conf.default
-rw-r--r-- 1 root root 1007 Dec 2 18:39 fastcgi_params
-rw-r--r-- 1 root root 1007 Dec 2 18:39 fastcgi_params.default
-rw-r--r-- 1 root root 2837 Dec 2 18:39 koi-utf
-rw-r--r-- 1 root root 2223 Dec 2 18:39 koi-win
-rw-r--r-- 1 root root 5170 Dec 2 18:39 mime.types
-rw-r--r-- 1 root root 5170 Dec 2 18:39 mime.types.default
lrwxrwxrwx 1 root root 27 Dec 2 18:39 modules -> ../../usr/lib/nginx/modules
-rw-r--r-- 1 root root 774 Dec 2 18:29 nginx.conf
-rw-r--r-- 1 root root 2656 Dec 2 18:39 nginx.conf.default
-rw-r--r-- 1 root root 636 Dec 2 18:39 scgi_params
-rw-r--r-- 1 root root 636 Dec 2 18:39 scgi_params.default
drwxr-xr-x 2 root root 4096 Dec 2 18:48 sites-available
drwxr-xr-x 2 root root 4096 Dec 2 18:48 sites-enabled
drwxr-xr-x 2 root root 4096 Dec 2 18:48 ssl
-rw-r--r-- 1 root root 664 Dec 2 18:39 uwsgi_params
-rw-r--r-- 1 root root 664 Dec 2 18:39 uwsgi_params.default
-rw-r--r-- 1 root root 3610 Dec 2 18:39 win-utf
/etc/nginx/nginx.confプロファイルをよく観察すると、ソフトリンクに役立ち、最終的な仮想ホストプロファイルは/etc/nginx/sites-availableディレクトリにあります.
コンテナからWindowsシステムにコピーする必要があります.
まずexitコマンドを入力し、コンテナのshellを終了してWindowsの端末に戻ります.
次に、コピーを行います.
HP@LAPTOP-ND0NRET5 MINGW64 ~/docker_data
$ docker cp dr-web:/etc/nginx/sites-available ./nginx
これにより、dr-webコンテナの/etc/nginx/sites-availableディレクトリの内容が、WindowsのC:UsersHPdocker_にコピーされますDataginxディレクトリにあります.
次にdocker-compose.ymlファイルを変更し、webサービスコードブロックのvolumesを次のように変更します.
volumes:
- ~/docker_data/wwwroot:/var/www/html
- ~/docker_data/nginx:/etc/nginx/sites-available
そして、変更~/docker_Data/nginxディレクトリのdefault.confプロファイルに、tp 5プロジェクトにアクセスするための仮想ホストserverを追加します.
server {
listen 80;
root /var/www/html/tp5/public;
index index.php index.html index.htm;
server_name tp5.test;
# Disable sendfile as per https://docs.vagrantup.com/v2/synced-folders/virtualbox.html
sendfile off;
# Add stdout logging
error_log /dev/stdout info;
access_log /dev/stdout;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to index.html
try_files $uri $uri/ =404;
}
error_page 404 /404.html;
location = /404.html {
root /var/www/errors;
internal;
}
location ^~ /ngd-style.css {
alias /var/www/errors/style.css;
access_log off;
}
location ^~ /ngd-sad.svg {
alias /var/www/errors/sad.svg;
access_log off;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
}
location ~* \.(jpg|jpeg|gif|png|css|js|ico|webp|tiff|ttf|svg)$ {
expires 5d;
}
# deny access to . files, for security
#
location ~ /\. {
log_not_found off;
deny all;
}
location ^~ /.well-known {
allow all;
auth_basic off;
}
}
docker-compose.ymlを変更したので、前のコンテナを削除し、新しいコンテナインスタンスを作成する必要があります.
コンテナを削除する前に、コンテナを閉じる必要があります.
#
$ docker-compose stop
Stopping dr-web ... done
Stopping dr-redis ... done
Stopping dr-mysql ... done
閉じたコンテナを削除します.
# , y
$ docker-compose rm
次に、コンテナを再作成します.
$ docker-compose up -d
Webサイトのルートディレクトリには、tp 5のプロジェクトソースコードがまだありません.そのため、tp 5をインストールする必要があります.
前述したように、ディレクトリのマッピングは双方向で、WindowsのC:UsersHPdocker_datawwwrootディレクトリにtp 5をインストールするか、dr-webコンテナの/var/www/htmlディレクトリにインストールすることもできます.
Linux仮想マシンにcomposerがインストールされていないため、私のWindowsにはcomposerがインストールされているので、Windowsでcomposerを使用してtp 5をインストールすることにしました.
# ~/docker_data/wwwroot
$ cd /c/Users/HP/docker_data/wwwroot
#
$ composer create-project topthink/think tp5 --prefer-dist
そして、ブラウザでアクセス http://192.168.99.100/tp5/public/ ,tp 5のウェルカムインタフェースが見えます.
アクセスする場合 http://tp5.test/ ,ブラウザは、tp 5.testのサーバIPアドレスが見つかりません.
これは、Windowsのhostsファイルをまだ修正していないからです.
次に、C:WindowsSystem 32driversetchostsファイルを編集し、ファイルの最後にコードを1行追加します.
192.168.99.100 tp5.test
保存後、更新 http://tp5.test/ ,正常にアクセスできます.
これにより、Dockerを利用して、tp 5プロジェクトの開発環境を完全に構築しました.
docker-composeは非常に一般的なツールで、ヘルプコマンドを参照できる他のコマンドとオプションもあります.
$ docker-compose help