
ディレクトリの作成
まず初めに作業用のディレクトリを用意しましょう。
完全コピペで使用可能ですので是非ご参考ください。
Laravelプロジェクトがインストールされる場所はsrc
直下になります。
ディレクトリ一覧は下記になります。
laravel_project
├── docker-compose.yml
├── apache
│ └── sites-available
├── env
│ └── .env.mysql
├── php
│ └── Dockerfile
└── src
docker-compose.ymlの作成
ここではそれぞれのコンテナへの設定を行なっていきます。
また、各ブロックごとの解説も記載していますのでご参考下さい。
version: "3.9"
services:
web:
build:
context: .
dockerfile: ./php/Dockerfile
container_name: local_web
volumes:
- ./src:/var/www/html
ports:
- 8080:80
env_file: env/.env.mysql
db:
platform: linux/x86_64
image: mysql:8.0.26
container_name: local_db
environment:
MYSQL_HOST: db
MYSQL_DATABASE: local_db
MYSQL_USER: local_user
MYSQL_PASSWORD: local_password
MYSQL_ROOT_PASSWORD: local_password
volumes:
- db-data:/var/lib/mysql
volumes:
db-data:
web: ブロック
build: -> dockerfile:
ディレクトリにあるDockerfileを使って導入(build)しますという指定。
build:
dockerfile: ./php/Dockerfile
volumes:
最初の./src
が自分のローカル内ディレクトリのパス。その後の/var/www/html
がDockerコンテナ内のディレクトリのパスになります。
これはローカルの./src
をDockerコンテナ内の/var/www/html
として使います、という指定。
volumes:
- ./src:/var/www/html
env_file:
このコンテナ内で使用する環境変数を設定するための指定です。
右のファイル内に書かれているenv/.env.mysql
環境変数を使います、という指定。
env_file: env/.env.mysql
db: ブロック
platform:
M1チップ搭載のMacでは必ずこの設定を行いましょう。
コンテナ起動時にエラーが表示され動かなくなります。
platform: linux/x86_64
volumes:
db(データベース)のデータをどこに保持するかを指定します。
これはDockerアプリのボリュームというデータの保存場所です。
Dockerはもう一度コンテナを作り直りなおすと、保存されたコンテナ内のデータも全て消えてしまいます。それを永続化するためにこのボリュームを使います。
volumes:
- db-data:/var/lib/mysql
Dockerfileの用意
次にwebコンテナで設定を行なった下記ファイルを用意します。
build:
dockerfile: ./php/Dockerfile
./php/Dockerfile 内容
これはwebコンテナで使用するアプリケーションをインストールするためのファイルです。
Dockerコンテナは基本的にLinuxベースで動いているので、apt
で必要なものを入れていきます。
また、この時点でLaravelをインストールするために必要になるComposerも入れています。
FROM php:7.4.22-apache
RUN rm /etc/apt/preferences.d/no-debian-php
# Install git
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y git net-tools vim \
zip unzip libzip-dev && \
apt-get clean
# Set apache mod_rewrite
RUN a2enmod rewrite
# Install php extension
RUN docker-php-ext-install mysqli pdo pdo_mysql zip
# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Install NPM & node
RUN curl -sl https://deb.nodesource.com/setup_14.x | bash -
RUN apt-get install -y nodejs build-essential
.envファイルの用意
こちらも同様にwebコンテナで設定した下記ファイルを用意していきます。
env_file: env/.env.mysql
env/.env.mysql 内容
MYSQL_HOST=db
MYSQL_DATABASE=local_db
MYSQL_USER=local_user
MYSQL_PASSWORD=local_password
MYSQL_ROOT_PASSWORD=local_password
docker-compose upを実行
これで環境を構築するための準備ができました。
最後にdocker-compose.yml
ファイルと同じ階層で、下記コマンドを実行します。
laravel_project % docker-compose up
しばらくすると下記のようなものが表示されます。
この表示がでればdocker-compose upの実行が正常に行われています。
Starting local_db ... done
Starting local_web ... done
Attaching to local_db, local_web
...
これで立ち上げが完了したので、次に下記アドレスにアクセスします。
http://localhost:8080
現時点で、http://localhost:8080を開いても、そもそもファイルが何もなくforbiddenになってしまうので./src
にindex.php
を作成します。
またphp
とDB
への接続ができているかを確認するため、内容はこのようにします。
再びhttp://localhost:8080
に接続すると画像のような表示になります。
<?php
echo 'Docker Local';
$dsn = 'mysql:host='.$_ENV['MYSQL_HOST']
.';dbname='.$_ENV['MYSQL_DATABASE'];
$dbh = new PDO($dsn, $_ENV['MYSQL_USER'], $_ENV['MYSQL_PASSWORD']);
foreach($dbh->query('SHOW databases') as $row) {
echo '<pre>';
print_r($row);
echo '</pre>';
}
phpinfo();
DocumentRootを変更できるようにする
現状のままだとApacheのDocumentRootを変更するために、毎回Dockerのイメージを再構築しなければいけません。
その場合、Dockerのコンテナ削除、イメージ削除、docker-compose…という手間をそのたびに行わないといけないため、コンテナの再起動だけで済ませれるように設定をしましょう。
まず、新しいターミナルを開き下記コマンドを実行し、Apacheのconfファイル群をローカル側にコピーします。
laravel_project % docker cp local_web:/etc/apache2/sites-available/ ./apache/sites-available/
このコマンドは自分のローカル側からDockerのコンテナ内、またその逆へファイルをコピーすることができるものです。
このコマンドを使用してlocal_webコンテナの中のapacheのconfファイルをローカルにコピーします。
コマンドを実行すると、apache/sites-available
というディレクトリ直下に「000-default.conf」「default-ssl.conf」の2つのファイルが保存されています。
コピーされているのを確認できたら、docker-compose upをしたターミナルでCtrl+Cを使用し、Dockerコンテナをストップさせます。
Stopping local_web ... done
Stopping local_db ... done
コマンド実行後、上記のようにdockerコンテナがストップされたことが確認できたら、次に下記コマンドでコンテナ削除を行います。
laravel_project % docker container prune -f
コンテナの削除が完了したら、次にdocker-comopse.ymlファイルを開き下記の1行をwebブロックのvolumes
に書き加えます。
- ./apache/sites-available:/etc/apache2/sites-available
書き加えた後のdocker-comopse.ymlファイルの中身は下記になります。
version: "3.9"
services:
web:
build:
context: .
dockerfile: ./php/Dockerfile
container_name: local_web
volumes:
- ./src:/var/www/html
- ./apache/sites-available:/etc/apache2/sites-available
ports:
- 8080:80
env_file: env/.env.mysql
db:
platform: linux/x86_64
image: mysql:8.0.26
container_name: local_db
environment:
MYSQL_HOST: db
MYSQL_DATABASE: local_db
MYSQL_USER: local_user
MYSQL_PASSWORD: local_password
MYSQL_ROOT_PASSWORD: local_password
volumes:
- db-data:/var/lib/mysql
volumes:
db-data:
保存が完了できたら、再度ターミナルでdocker-compose up
を実行しlocalhost:8080
に接続できるか確認します。
確認が出来れば、これでやっとLaravelを導入する準備ができました。
最後に
今記事はDockerfileの作成・構築、Dockerへの接続を解説しました。
次の記事ではLaravelの導入方法について解説していますので是非ご参考下さい。
次の記事はこちら: