[docker]php+mysql+nginx環境構築(mac編)

docker

家のmacbook proにdockerでphp+mysql+nginxを導入してみました。

「phpがnginx経由で動いて、mysqlもテーブル作れるよね🤔」
くらいなレベルで動くところまで確認します。

dockerをインストールする

公式ページにログインして、[Get Standard] => [Download Desktop for Mac and Windows]からインストールします!
ログインしないとダウンロードできないので注意です。

アカウントを持っていない場合は、新規に作成します。

docker-composeを使う

docker-composeコマンドを使うことによって、
dockerイメージを作成して、動かすまでが簡単にできます😀

docker-composeについて、公式のチュートリアル的なものを発見しました!
Overview
Introduction and Overview of Compose

Docker Desktop for Macなどデスクトップ用でインストールしてきたものにはdocker-composeコマンドが一緒に使えます。
下記コマンドが動くか確認しておきましょう。

docker-compose -v

今回のファイル構成

nginx/
  codelike_server.conf => nginxのconfファイル
php/
  Dockerfile => php-fpmビルド用
  php.ini => php設定ファイル
www/
  phpinfo.php => テスト用(いつものw😑)
docker-compose.yml

こんな感じのファイル構成になっています。

docker-compose.ymlを書く

docker-compose.ymlを書いて、使いたいサービスを定義していきます。
今回はこんな感じにしてみました!

version: '3'                                                                                                                                                                                                                                               
services:                      
  nginx:
    image: nginx:latest
    ports:                     
      - 8080:80
    volumes:                   
      - ./nginx/codelike_server.conf:/etc/nginx/conf.d/default.conf
      - ./www:/var/www/html    
    depends_on:                
      - php

  php:
    build: ./php               
    volumes:
      - ./www:/var/www/html
    depends_on:                
      - db

  db:
    image: mysql:5.7
    ports:
      - 13306:3306
    environment:
      MYSQL_ROOT_PASSWORD: password   

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    ports:
      - 8888:80
    depends_on:
      - db

docker-compose.ymlを解説してみる

ちょっと難しいですが書いてみます。
各項目についてのリファレンスはこちらにありました。
Compose specification
Compose file reference

ここでは例で書いてる上記のものだけ、とりあげます。

version

versionのところはdocker-composeの書き方のバージョンです。
現在は3.7が最新のようです。

services

この配下に使いたいサービスを書いて行きます。
nginxとかphpとかdbとか名前はなんでもいいみたいです。

image

ここに使いたいイメージを書きます。

buildが指定されていなくて、イメージがない場合はpullしてイメージを作ってくれます!
たぶんdocker hubにあるイメージを取ってきてくれるんでしょうね😄

ports

サービスが使うポートを指定します(HOST:CONTAINER)で指定できます。
ここの例ではnginxが8080:80になっているので、
ホストのPCからは8080を参照しにいくと、そのサービスにアクセスできるイメージですね。

コンテナポートのみ指定でもいけるようです。

どうなるんだろう…

volumes

指定された場所をマウントできます。
ここの例では ./nginx/codelike_server.conf:/etc/nginx/conf.d/default.conf としているので
ホストにある./nginx/codelike_server.confが、dockerコンテナの/etc/nginx/conf.d/default.confに配置されます。

あと、./www:/var/www/htmlとしてホストのphpinfo.phpをnginxの/var/www/htmlに配置してます!

phpのほうも/www:/var/www/htmlとしているので、
コンテナに入るとnginxコンテナとホストと同じものが見えます。

ホストや片方のコンテナで削除されると同じようにファイルが消えます。
場所が共有される
んですね。

すごいけどどうなってるんやろ…

depends_on

コンテナの依存関係を書いておきます。
起動順序に関係して、ここの例では、
・nginxはphp(fpm)が起動してから起動する
・phpとphpmyadminはdbが起動してから起動する
となります。

environment

環境変数をコンテナに渡すために書いています。
ここの例ではMYSQL_ROOT_PASSWORDでmysqlのルートパスワードを設定しています!
下記に詳しくかいていました。

build

イメージをpullしてくるのではなく、ここで指定したパスのDockerfileを見てくれて
そこからイメージを作成してくれます。
ここの例ではphpコンテナを作るときに、./php配下のDockerfileを元に作ってくれます!

github

ここに今回作ったファイル公開してます。
./php/Dockerfileの中身とか、nginxのconfとかphpのconfとかはこちらを確認!
GitHub - YasuakiHirano/codelike_web_docker: php+mysql+nginxのdocker
php+mysql+nginxのdocker. Contribute to YasuakiHirano/codelike_web_docker development by creating an account on GitHub.

動作確認

次のコマンドでgithubからcloneして

git clone https://github.com/YasuakiHirano/codelike_web_docker.git

docker-compose up -dで起動します。
-dオプションをつけることでバックグラウンド起動してくれます。

1回目はインストールとか出ると思うけど、2回目以降はこんな感じ。。

$docker-compose up -d
Creating network "codelike_web_docker_default" with the default driver
Creating codelike_web_docker_db_1 ... done
Creating codelike_web_docker_phpmyadmin_1 ... done
Creating codelike_web_docker_php_1        ... done
Creating codelike_web_docker_nginx_1      ... done
http://localhost:8080/phpinfo.php

上記URLにアクセス!

phpinfoの情報がつらつらと出ればOK!

dockerでphpinfo()確認!

mysqlの方はコンテナにログインします。
docker psで確認するとcodelike_web_docker_db_1という名前のコンテナが立ち上がってるので

docker exec -it codelike_web_docker_db_1 /bin/bash

でコンテナに入って、設定したpasswordでmysqlにログイン。


dockerでmysql確認

DBができたのでOK!

エラーが出たよ

作業中にphpのコンテナ作成で、onigurumaがない旨のエラー
鬼車って・・・名前インパクトすごいですね(笑)
正規表現のライブラリらしいです。

configure: error: Package requirements (oniguruma) were not met:

No package 'oniguruma' found

Dockerfileに下記を追加して、立ち上げると解決しました!
libonig-devをインストールしとく必要があるようです。ナニソレ…

apt-get install -y libonig-dev 

コメント

タイトルとURLをコピーしました