dockerの特徴はなんといっても、ものの数時間で環境構築ができる!ということです。ですがdockerの知識がない人・プログラミング初心者はなかなか手こずると思います。
実際、私もdockerの環境構築に10日間もかかりました笑
今回は初心者向けにdocker環境構築の方法を書きます。
とにかく、ポートフォリオを作ってみたい!という人は参考にしてください。
参考にしたサイト
https://maasaablog.com/development/backend/php/laravel/758/#toc7
docker コンテナ、イメージ等を知りたい方は以下の動画を一通り見てもらえば理解できます。
環境構築手順
①docker desktopをインストール!
①docker desktopをインストール!
https://www.docker.com/products/docker-desktop
上のURLから、自身のosに合わせたものをダウンロードしてください。
②docker desktopを起動
③VScodeで以下のディレクトリ構造でファイルを作成。
④それぞれのファイルにコードを記入していく
/nginx/default.conf
server {
listen 8000;
root /var/www/my-app/public;
error_log /var/log/nginx/error.log warn;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app-dl:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
/php/Dockerfile
# https://hub.docker.com/_/phpにあるイメージファイルを指定
FROM php:8.0-fpm
# RUNコマンドは、buildしたときに元となるdockerイメージに対して実行する処理を記述する。
# \(バックスラッシュ)を用いて、複数行に分けることが可能。
# パッケージ一覧を更新
RUN apt update \
# zlibはデータの圧縮に関するアルゴリズムをライブラリ化したもの
# vimをインストール
# MariaDBデータベースのクライアントアプリケーションである「mysql」を使えるように「mariadb-client」をインストール
# libzip-devはzip圧縮時に必要となるライブラリ(libzip は、zlib を使用する)
&& apt install -y zlib1g-dev mariadb-client vim libzip-dev \
# docker-php-ext-installはPHPに標準で備わっている拡張パッケージのインストール&有効化ができるコマンド
# PDO_MYSQL は、PHP から MySQL データベースへのアクセスを可能にするための PHP Data Objects (PDO) インターフェイス を実装したドライバ。
&& docker-php-ext-install zip pdo_mysql \
# gitのインストール
&& apt install -y git \
# xdebugのインストール
&& pecl install xdebug \
&& docker-php-ext-enable xdebug
# Composerのインストール & パス通す
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# nodeインストール(aptだとNodejsは古いため、パッケージマネージャの n を使用してインストール)
RUN apt install -y npm \
&& npm install n -g \
&& n stable
# RUN , CMD , ENTRYPOINT , COPY , ADD を実行する時のワーキングディレクトリを指定
WORKDIR /var/www
/php/php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
[PHP]
display_errors = On
memory_limit = 500M
upload_max_filesize = 500M
post_max_size = 500M
[xdebug]
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.client_host = "host.docker.internal"
xdebug.client_port = 9012
xdebug.log = "/var/log/xdebug.log"
.env
IP=127.0.0.1
WEB=80
DB=3306
docker-compose.yml
このファイルは、インテンドも重要なので間違えないようにコピーしてください。
参考サイト
{
"version": "3.8",
"services": {
"app-dl": {
"container_name": "app-dl",
"build": "./docker/php",
"volumes": [
"./:/var/www",
"./docker/php/php.ini:/usr/local/etc/php/php.ini",
"./log:/var/log"
]
},
"web-dl": {
"container_name": "nginx-dl",
"image": "nginx"
,
"ports": [
"${WEB:-80}:8000"
],
"volumes": [
"./:/var/www",
"./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf"
]
},
"db-dl": {
"image": "mysql:latest",
"container_name": "db-dl",
"environment": {
"MYSQL_ROOT_PASSWORD": "root",
"MYSQL_DATABASE": "sample_db",
"TZ": "Asia/Tokyo"
},
"command": "mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci",
"volumes": [
"./docker/db/data:/var/lib/mysql",
"./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf",
".R/docker/db/sql:/docker-entrypoint-initdb.d"
],
"ports": [
"${DB:-3306}:3306"
]
},
"phpmyadmin-dl": {
"image": "phpmyadmin/phpmyadmin",
"container_name": "phpmyadmin-dl",
"environment": [
"PMA_ARBITRARY=1",
"PMA_HOST=db-dl",
"PMA_USER=root",
"PMA_PASSWORD=root"
],
"links": [
"db-dl"
],
"ports": [
"8580:80"
],
"volumes": [
"/sessions"
]
},
"mailcatcher-dl": {
"image": "schickling/mailcatcher",
"ports": [
"1080:1080"
]
}
}
}
④docker imageをビルド
docker-compose.ymlファイルがあるディレクトリと同じ階層に行き、ターミナルにてビルドコマンドを実行します。
ディレクトリの移動には、LINUXのコマンドを使用します。今後も使用するのでぜひ覚えてください。
ディレクトリの移動
cd docker-laravel
docker imageのビルド
docker-compose build
⑤dockerコンテナの起動
docker-compose up -build
⑥laravelプロジェクトの作成
docker-compose up -build
⑥laravelプロジェクトの作成
laravelプロジェクトは、MVCモデルのアプリを作るのに必要なファイルがあるフォルダのことです。それを作成することによって、スムーズにアプリを作成することができます。
laravelプロジェクトについて参考サイト
https://nebikatsu.com/7452.html/
laravelプロジェクトを作るには、まずphpコンテナに入る必要があります。
docker-compose exec app-dl bash
コンテナに入ることができれば、ターミナルが以下のように変わります
root@~:/var/www#
ターミナルが変わったら、laravelのプロジェクトを作成するために以下のコマンドを入力します。
composer create-project laravel/laravel my-app
なかなか時間がかかるので、プロジェクトができるまで待ってください。
プロジェクトができたら、ブラウザからhttp://localhost:8000/or
http://localhost:80/ にアクセスをしてください。
laravelプロジェクトが正常にできた場合は以下のような画面になります。
この画面が表示されたら、作成が完了しています。続いて、DBの接続を行います。
DBとの接続
①ワーキングディレクトリに移行
cd my-app
②.envファイルを修正
DB_CONNECTION=mysql
# mysqlコンテナのサービス名(✖︎container_name)
DB_HOST=db
DB_PORT=3306
# ymlファイルのMYSQL_DATABASEと合わせる
DB_DATABASE=test_db
DB_USERNAME=root
DB_PASSWORD=root
cd my-app
②.envファイルを修正
DB_CONNECTION=mysql
# mysqlコンテナのサービス名(✖︎container_name)
DB_HOST=db
DB_PORT=3306
# ymlファイルのMYSQL_DATABASEと合わせる
DB_DATABASE=test_db
DB_USERNAME=root
DB_PASSWORD=root
DB_CONNECTION=mysql
# mysqlコンテナのサービス名(✖︎container_name)
DB_HOST=db
DB_PORT=3306
# ymlファイルのMYSQL_DATABASEと合わせる
DB_DATABASE=test_db
DB_USERNAME=root
DB_PASSWORD=root
dockerで環境構築できたでしょうか?
ぜひ、手短にdockerで環境を作り、コードを書いていきましょう!