#Dockerで開発環境構築
この記事はDockerによる開発環境構築(Mac + Nginx + PHP-FPM + MySQL)Part 1をそのまま実行しています。
その中で、分からなかったコードや概念を備忘録として記事にしています。
##まずDockerって何よ?
Dockerとは
1,Dockerはミドルウェアのインストールや各種環境設定をコード化して管理します。
2,コード化されたファイルを共有することで、どこでも誰でも同じ環境が作れる。
3,作成した環境を配布しやすい。
4,スクラップ&ビルドが容易にできる。
ふむふむ。
そして**コード化されたファイルを共有することで、どこでも誰でも同じ環境が作れる。**このメリットは大きそうだなと思います。
というのも、行きたい企業がDockerを使っていたのでDockerをキャッチアップし出したというだけで、実務というかチーム単位では使用したことがないので、大きなメリットを感じられていないのです。
とりあえず進めます。
Dokerはインストールできている前提で進めます。
###コンテナとイメージって何よ?
イメージ
・・・ファイル
コンテナ
・・・イメージを実行したもの
といったざっくりした認識でございます。
間違っていたら教えてください。
なので、コンテナを実行するにはイメージが必要です。
欲しいイメージがないときはDocker hubからpullしてきましょう。
$ docker pull centos
これでCentosがpullされます。
少し話は飛びますが
$ docker images
と$ brew list
は似ているな〜と感じます。
##さて本題
さて本題に入ります。
###nginxコンテナ作成
お好きなディレクトリに移動して以下のコマンドを入力。
目に見えた方がわかりやすいので僕はDesktop上で行いました。
$ mkdir docker
$ cd docker
$ docker container run -d -p 8000:80 --name web nginx:latest
こちらがコンテナを作成する際のコマンドです。
docker container run -d -p 8000:80 --name web nginx:latest
-d・・・バックグラウンドでDockerコンテナを実行
-p・・・ポート指定
--name・・・コンテナに名前をつける
と言った感じです。
$docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dde74e29d594 nginx:latest "nginx -g 'daemon of…" 9 seconds ago Up 7 seconds 0.0.0.0:8000->80/tcp web
コンテナが作成されプロセスが立ち上がったのが分かります。
http://localhost:8000/
にアクセスしてNginxの画面が表示されていれば成功です。
とりあえず確認できたら止めておきます。
$ docker container stop web
次ーーー。
###docker-composeでnginxサーバーを起動
nginxを起動できましたが、phpを扱うとなるとphp-fpmのコンテナも作成しなくてはいけません。
※立ち上げる順番も気にしないといけないそうな・・・
そこで、コンテナ同士の依存関係をyml形式のファイルで管理できるdocker-compose
というものを使用します。
先ほど作成したディレクトリ内で、docker-compose.yml
を作成します。
$ vi docker-compose.yml
version: '3' #フォーマットのバージョン。現在は3が最新。
services: #アプリケーションを動かせるための記述
web: #コンテナ名
image: nginx:latest #イメージ名
ports: #使用ポート
- "8000:80"
記述後にnginxを起動させます。
$ docker-compose up -d
http://localhost:8000/
アクセスして、nginxの画面が出れば成功。
$一旦ストップさせます。
$ docker-compose stop
###Hello World!!
次はDockerでHello Worldを表示させます。
$ mkdir src
$ cd src
$ vi index.html
<h1>Hello World !!</h1>
次は設定ファイルを記述します。
$ cd ../
$ mkdir web
$ cd web
$ vi default.conf
nginxの設定をdefault.confに記述していきます。
server {
listen 80;
root /var/www/;
index index.html;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
}
その後、docker-compose.ymlの最終行にこちらを追記します。
#version: '3'
#services:
# webserver:
# image: nginx:latest
# ports:
# - "8000:80"
volumes: #以下を追記 [ホストのファイルパス]:[コンテナファイルパス]
- ./webserver/default.conf:/etc/nginx/conf.d/default.conf
- ./src:/var/www/
volumesは、ホストのファイルパスをコンテナのファイルパスへマウントします。
つまり、コンテナ側の/etc/nginx/conf.d/default.conf
はホスト側の./webserver/default.conf
を認識するようなります。
マウントすることによって、コンテナ内で変更した内容を、ホスト側にリアルタイムで同期することができます。
再びdockerを立ち上げます。
$ docker-compose up -d
http://localhost:8000/
アクセスして、Hello Worldが表示されれば成功。
$一旦ストップさせます。
$ docker-compose stop
###PHPを動作させるAPサーバーの設定
phpを扱うためにはAPサーバーが必要です。
docker-compose.ymlを編集します。
#version: '3'
#services:
# web:
# image: nginx:latest
# ports:
# - "8000:80"
depends_on: #追記
- app
# volumes:
# - ./web/default.conf:/etc/nginx/conf.d/default.conf
# - ./src:/var/www/
app: #以下を追記
image: php:7.2.15-fpm
volumes:
- ./src:/var/www/
depends_on
で依存関係を設定します。
これを設定しないとphpは動きません。
次にdefault.confを編集します。
#server {
# listen 80;
# root /var/www/;
# index index.php index.html;
# access_log /var/log/nginx/access.log;
# error_log /var/log/nginx/error.log;
location / { #以下を追記
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
#}
その後srcに移動しindex.phpを作成し中にphpinfo();を記述します。
<?php
phpinfo();
?>
再びdockerを立ち上げます。
$ docker-compose up -d
http://localhost:8000/
アクセスして、PHPの設定情報が表示されればOKです。