Docker ~ローカルで環境構築~
前回の記事でDockerの概要について書いてみました。今回は実際に自分が作っているLaravelのポートフォリオのローカル環境にDockerを実装していく流れを見ていきたいと思います!
正直Dockerは実装が終了するまで本質的な部分があまり理解が追い付かず、難しくて苦戦しました!しかしっ!!振り返ってみると、とても便利なシステムであり、実装するなかで学びが沢山ありました。
ローカルでDockerを実装する流れ
- コンテナの構成を考える
- docker-compose.ymlをつくる
- docker-composeコマンドを実行
- Laravelのマイグレーションを実行する。
コンテナの構成を考える
アプリケーションを動かすコンテナの構成は以下の3つを用意します。ディレクトリ構成はアプリケーションディレクトリの直下にDockerディレクトリを作り、その中に各コンテナをつくる3つのディレクトリをつくりDockerfileとconfigfile,inifile等の設定ファイルを用意しました。
appコンテナ
Laravel,PHPを動かすコンテナ。php7.4のベースイメージを使用。
webコンテナ
webサーバーとなるコンテナ、HTTPリクエストを受けたら受け取るコンテナ。
nginxベースイメージを使用。
dbコンテナ
データベースのサーバーとなるコンテナ、mysqlベースイメージを使用。
docker-compose.ymlファイルを作る
同じくアプリケーションフォルダの直下にdocker-composeファイルを用意します。
Dockerfileではイメージの作成手順(ベースイメージの指定等)を書いて、docker-composeファイルではDockerfileをベースとして、どのようにコンテナを起動させるのか書きます。
version: "3.8"
volumes:
php-fpm-socket:
db-store:
services:
app:
build:
context: .
dockerfile: ./docker/php/Dockerfile
volumes:
- php-fpm-socket:/var/run/php-fpm
- .:/work/backend
environment:
- DB_CONNECTION=mysql
- DB_HOST=db
- DB_PORT=3306
- DB_DATABASE=ask_form
- DB_USERNAME=XXXXXXXX
- DB_PASSWORD=XXXXXXXX
web:
build:
context: .
dockerfile: ./docker/nginx/Dockerfile
ports:
- 80:80
volumes:
- php-fpm-socket:/var/run/php-fpm
- .:/work/backend
db:
build:
context: .
dockerfile: ./docker/mysql/Dockerfile
ports:
- 3306:3306
volumes:
- db-store:/var/lib/mysql
environment:
- MYSQL_DATABASE=ask_form
- MYSQL_USER=XXXXXX
- MYSQL_PASSWORD=XXXXXX
- MYSQL_ROOT_PASSWORD=${DB_PASS:-secret}
services
構成するコンテナを書きます。今回はapp,web,dbの3つ。
build
イメージのビルド方法を書きます。イメージの詳細を書いたDockerfileの場所を書きます。
ports
ホスト側(自分)とコンテナ側をどの番号で接続するのか。
ホスト:コンテナ
ホスト側のポート番号は自由に指定することができるがデフォルトで指定されている番号を使用するのが良い。
webサーバー(TCP/http) 80番
db(mysql) 3306
volumes
ホスト側のデータをコンテナ側のどのディレクトリに置くのか書きます。
enviroment
環境変数を定義する。環境変数とはそれぞれのコンテナで定義する設定値の総称を指します。
docker-composeコマンドを実行
ここまで来るのも一苦労です。笑
あともう少し!
コマンド画面を開いて、アプリのディレクトリへ移動して
docker-compose build
これでイメージがビルドされます。
docker-compose up
これでコンテナが構築され、起動されます。ブラウザで表示されるか確認します。
Laravelのマイグレーションを実行する。
現状ではdbには接続されていますが、テーブルが作られていない状態なのでマイグレーションコマンドを実行します。
docker-compose exec app php artisan migrate
これでローカルでdockerを使ってアプリを起動させることが出来ます!!
コメントを残す