Windows 10でDocker + Laravel環境構築
この記事について
WindowsにDockerをインストールしてLaravelの開発環境を作ろうとしたら
色々とハマる箇所があったので、備忘録として構築手順をざっくりまとめました。
構築にはDocker for WindowsとLaradockを使用しています。
環境
ホスト側
Windows 10 Pro
Node.js
Git For Windows(Git Bash)
Dockerコンテナ側
Laravel(5.5)
nginx
PostgreSQL
目次
Hyper-Vの有効化
WindowsにDocker環境を構築するには、何かしらの仮想化ソフトウェアをインストールしておく必要があります。
Windows 10 ProにはHyper-Vというものが標準で搭載されていますので、今回はそれを使用します。
(Windows 10 Homeには搭載されていないのでお気をつけください。)
[コントロールパネル] → [プログラム] → [Windowsの機能の有効化または無効化]を開きます。
Hyper-Vにチェックを入れて閉じます。もし再起動を促されたら実施してください。
ちなみに
Hyper-V以外にも、VirtualBoxという仮想化ソフトウェアを使用してもDockerの環境構築は可能です。
しかしこちらはデフォルトの設定ではシンボリックリンクが使えないなどの制約があり、
若干手こずる可能性がありますので個人的にはHyper-Vの使用をおすすめします。
Docker for Windowsのインストール
Dockerの公式サイトから、Dockerのインストーラをダウンロードします。
[Download from Docker Hub]をクリックします。
Dockerにサインインします。
アカウントを持ってなかったら[Sign Up]のリンクから作成します。
サインインして以下の画面が表示されたら[Download Docker Desktop for Windows]のリンクからインストーラをダウンロードします。
ファイルのダウンロードが完了したら実行します。
インストールの設定はデフォルトで良いです。
(もしDockerコンテナのOSをWindowsにしたい場合は、[Use Windows containers instead of Linux containers]にチェックを入れてください。)
インストール後、Windowsの通知にDocker Desktop is running.と表示されます。
デスクトップにDockerのショートカットが作成されているはずなので、起動します。
タスクバーにDockerのアイコンが表示されたらしばらく待ちます。
設定変更
Dockerのアイコンを右クリック→[Settings]からDockerの設定画面を開きます。
そこから[Shared Drive]のタブを開きます。
Dockerコンテナ-ホスト間でファイルを共有するドライブを指定してください。
設定したら[Apply]をクリックして設定を適用してください。
以上でDockerのインストールは完了です。
Firewall detectedエラーが発生した場合
PC内のウィルス対策ソフトの設定によっては、Dockerの設定変更時にFirewall detectedエラーが発生するようです。
その場合、WindowsのPowerShellを管理者権限で起動し、以下のコマンドを実行してください。
Set-NetConnectionProfile -interfacealias "vEthernet (DockerNAT)" -NetworkCategory Private
これで解決しなければ、「ポート445のTCP通信の許可」「IPアドレス10.0.75.1からの接続の許可」
あたりをファイアウォールに設定します。
LaradockでDockerコンテナ作成
Git Bashを起動します。
適当な作業フォルダを作成し、そこに移動します。
(今回はC:\workspace\laradock-test\ とします)
>cd /c/workspace/laradock-test/
GitHubからLaradockをダウンロードします。
>git clone https://github.com/laradock/laradock.git
ダウンロードが完了したらlaradockフォルダに移動します。
>cd laradock
設定ファイルを作成します。
(env-exampleをコピーして .env というファイル名で作成します)
>cp env-example .env
Dockerコンテナを起動します。
(このコマンドは初回実行時のみ、Dockerコンテナの作成と起動を行うため、時間がかかります)
>docker-compose up -d nginx postgres workspace
以下のような表示が出たらコンテナ起動完了です。
Creating laradock_postgres_1 ... done
Creating laradock_docker-in-docker_1 ... done
Creating laradock_workspace_1 ... done
Creating laradock_php-fpm_1 ... done
Creating laradock_nginx_1 ... done
念の為、以下のコマンドでコンテナの起動状態を確認します。
(何故か最初に「指定されたパスが見つかりません。」と表示されますが、無視して良いです。
>docker-compose ps
指定されたパスが見つかりません。
Name Command State Ports
---------------------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp, 2376/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_postgres_1 docker-entrypoint.sh postgres Exit 1
laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp
StateがUpになっているアプリケーションは正常に動作しています。
(この時点ではまだ正しい設定をしていないため、PostgreSQLのみ起動に失敗します)
ちなみに、この時点でコンテナ内でnginxが起動しているはずなので、
ブラウザでlocalhostにアクセスするとnginxの404 Not Foundエラーが表示されます。
Laravelプロジェクト作成
コンテナが起動している状態で以下のコマンドを実行し、コンテナに接続します。
(コンテナ内の/var/www がカレントディレクトリになります)
>docker-compose exec --user=laradock workspace bash
laradock@d20e19dc0348:/var/www >
Laravelプロジェクトを作成します。
プロジェクト名はここではlaravel-testとします。
Laravelのバージョンはここでは5.5系としますが、適宜変えてください。
>composer create-project --prefer-dist laravel/laravel laravel-test "5.5.*"
プロジェクトの作成が完了すると、laravel-testディレクトリ以下に諸々のファイルが作られます。
>ls laravel-test/
app artisan bootstrap composer.json composer.lock config database package.json phpunit.xml public readme.md resources routes server.php storage tests vendor webpack.mix.js
一旦コンテナから抜けます。
exit
laradockディレクトリ内の.envファイルを開き、以下の通りに書き換えます。
# Point to the path of your applications code on your host
# APP_CODE_PATH_HOST=../ #この行を消す
APP_CODE_PATH_HOST=../laravel-test/ #この行を足す(laravel-testのところはプロジェクト名)
書き換えたらファイルを保存して一旦dockerコンテナを再起動します。
>docker-compose stop
Stopping laradock_nginx_1 ... done
Stopping laradock_php-fpm_1 ... done
Stopping laradock_workspace_1 ... done
Stopping laradock_docker-in-docker_1 ... done
>docker-compose up -d nginx postgres workspace
既にdockerコンテナ内でlaravelが実行されているため、ここでlocalhostにアクセスすると
Laravelのデフォルトページが表示されます。
これでLaravelプロジェクトの作成は完了です。
PostgreSQLの設定
laradockの.envを開き、280行目あたりのPOSTGRESの接続情報の設定を好きなように書き換えます。
### POSTGRES ##############################################
POSTGRES_DB=test_db
POSTGRES_USER=test_user
POSTGRES_PASSWORD=testtesttest
POSTGRES_PORT=54320
POSTGRES_ENTRYPOINT_INITDB=./postgres/docker-entrypoint-initdb.d #この行は変更しなくてよい
また、ファイルの最終行に以下の1行を追加します。
DB_HOST=postgres
次に、以下のディレクトリ下の4つのシェルファイルの改行コードをCRLFからLFに変更します。
>cd /laradock/postgres/docker-entrypoint-initdb.d
>ls
init_confluence_db.sh init_gitlab_db.sh init_jupyterhub_db.sh init_sonarqube_db.sh
次に、作成したLaravelのプロジェクト(ここではlaravel-test)ディレクトリ直下にある.envを編集します。
先程指定した接続設定に合わせて書き換えます。
DB_CONNECTION=pgsql
DB_HOST=postgres
DB_PORT=54320
DB_DATABASE=test_db
DB_USERNAME=test_user
DB_PASSWORD=testtesttest
そしてコンテナを再起動します。
>docker-compose stop
>docker-compose up -d nginx postgres workspace
コンテナの状態を確認。
>docker-compose ps
指定されたパスが見つかりません。
Name Command State Ports
---------------------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp, 2376/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_postgres_1 docker-entrypoint.sh postgres Up 0.0.0.0:54320->5432/tcp
laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp
postgresのステータスがUPになっていれば完了。
参考文献
また、本記事ではVue.jsについては特に言及していませんが、Laravelプロジェクトに
Vue.jsとVuetifyを導入する際に以下の記事を参考にしました。
Author And Source
この問題について(Windows 10でDocker + Laravel環境構築), 我々は、より多くの情報をここで見つけました https://qiita.com/de_teiu_tkg/items/bd9df11c981b966a0c3e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .