LaradockでLaravelの環境を構築してみます。
開発環境
macOS
Docker Desktop Version 2.0.0.3
まず適当な名前のディレクトリを作成し、その中に移動します。今回は「Myproject」という名前にしました。
1 2 |
mkdir Myproject cd Myproject/ |
Laradockをインストールします。
1 |
git clone https://github.com/LaraDock/laradock.git |
完了するとlaradockという名前のディレクトリがあるので、その中に移動します。
1 |
cd laradock/ |
env-exampleというファイルをコピーして、環境変数設定ファイルを作成します。
1 |
cp env-example .env |
.envファイルを編集します。MYSQL_VERSIONが最新の状態では認証の方法が変わっているので、今回は5.7に設定しました。
1 2 3 4 5 6 7 8 9 |
### MYSQL ################################################# MYSQL_VERSION=5.7 MYSQL_DATABASE=default MYSQL_USER=default MYSQL_PASSWORD=secret MYSQL_PORT=3306 MYSQL_ROOT_PASSWORD=root MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d |
コンテナを起動させます。はじめて実行する場合は少し時間がかかります。
1 |
docker-compose up -d nginx mysql phpmyadmin |
関連ページ
以下のように表示されたら成功です。
1 2 3 4 5 6 |
Creating laradock_mysql_1 ... done Creating laradock_docker-in-docker_1 ... done Creating laradock_phpmyadmin_1 ... done Creating laradock_workspace_1 ... done Creating laradock_php-fpm_1 ... done Creating laradock_nginx_1 ... done |
生成されたコンテナを表示してみます。
1 |
docker-compose ps |
1 2 3 4 5 6 7 8 |
Name Command State Ports --------------------------------------------------------------------------------------------------------------- laradock_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp laradock_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp laradock_nginx_1 /bin/bash /opt/startup.sh Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp laradock_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp laradock_phpmyadmin_1 /docker-entrypoint.sh apac ... Up 0.0.0.0:8080->80/tcp laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp |
docker-in-docker、php-fpm(NginxでPHPを動かすため)、workspace(ComposerやGitなどがすでに用意されている開発環境)は自動的にコンテナが生成されます。
Laravelプロジェクトを作成する
workspaceコンテナに入ります。
1 |
docker-compose exec --user=laradock workspace bash |
1 |
laradock@b568d330e97c:/var/www$ |
Laravelのプロジェクトを作成します。composerはすでにインストールされています。下記ではSampleProjectという名前のプロジェクトを作成しています。今回はバージョン5.5をインストールしました。
1 |
composer create-project laravel/laravel SampleProject "5.5.*" |
完了するとSampleProjectプロジェクトが同ディレクトリに作成されたのが確認できます。
1 2 |
laradock@b568d330e97c:/var/www$ ls laradock SampleProject |
尚、はじめにローカルで作成した「Myproject」ディレクトリ直下にも「SampleProject」が生成されているのが確認できます。これはマウントされているからです。以下説明です。
.envファイルの環境変数には、下記のような記述が確認できます。
1 2 3 4 5 6 7 8 |
# Point to the path of your applications code on your host APP_CODE_PATH_HOST=../ # Point to where the `APP_CODE_PATH_HOST` should be in the container APP_CODE_PATH_CONTAINER=/var/www # You may add flags to the path `:cached`, `:delegated`. When using Docker Sync add `:nocopy` APP_CODE_CONTAINER_FLAG=:cached |
docker-compose.ymlにおいて、workspaceのvolumesを上記の変数と照らし合わせて見ると「APP_CODE_PATH_HOST」と「APP_CODE_PATH_CONTAINER」、つまり「../」 と「/var/www」がマウントされているのがわかります。これによってdocker-compose.ymlファイルの一つ上のディレクトリ(Myproject直下のディレクトリ)とworkspaceコンテナ内の/var/wwwが同期している状態となります。:cachedはパフォーマンス改善のフラグです。
1 2 |
volumes: - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG} |
マウントについてはこちら
次にSampleProjectディレクトリ内の.envファイルを編集します。laradock内の.envの設定と合わせておきます。
1 |
laradock@b568d330e97c:/var/www$ cd SampleProject |
.envファイルを下記のように編集する。
1 2 3 4 5 6 |
DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=default DB_USERNAME=default DB_PASSWORD=secret |
localhostでLaravelを表示
はじめにコピーして作成したlaradock内の.envファイルを編集します。Laravelのプロジェクトである「SampleProject」を設定します。
1 2 |
# Point to the path of your applications code on your host APP_CODE_PATH_HOST=../SampleProject |
この設定によって、SampleProjectディレクトリがworkspaceコンテナ内の/var/wwwにマウントされます。つまりlocalhost直下がSampleProjectディレクトリとなり、Laravelの画面が表示されるようになります。
編集が完了したら、再びコンテナを立ち上げます。
1 |
docker-compose up -d nginx mysql phpmyadmin |
以上でlocalhostにてLaravelの画面が表示されるのが確認できます。
localhost:8080/ にてphpMyAdminに接続できます。
phpMyAdminにログインできない場合
phpMyAdminのログイン画面そのものが表示されても、ログインできない場合は、MYSQL_VERSION=5.7であることを確認して、もう一度ビルドし直して下さい。
一旦イメージ、volumeデータを削除します。
1 2 3 |
docker rmi laradock_mysql docker rm volume laradock_mysql rm -rf ~/.laradock/data/mysql |
ビルドし直します。
1 |
docker-compose build --no-cache mysql |
mysqlコンテナに接続したらバージョンを確認して下さい。
1 2 3 4 |
docker-compose exec mysql bash root@7ca3a4d376fd:/# mysql -V mysql Ver 14.14 Distrib 5.7.26, for Linux (x86_64) using EditLine wrapper |