目次
はじめに
追記:あまりにもわかりにくい記事だったので改めて作りなおしました。この記事は個人的な備忘録とします。以下を参考にしていただければ幸いです。
Docker for WindowsでLaradockの環境構築をして、Webアプリが作れるところまで記載しております。
DBに関してはMySQLでphpmyadminも利用できるようにしています。
※まだできていませんが、PostgreSQLでの環境構築の格闘記録はこちらにあります。
※僕の備忘録でもあり、構築できるようになるまでにかなり苦労したのでとても長文です。かなりのエラーを潰してきたので、部分部分かいつまんで参考にしていただければと思います。どなたかの参考になれば幸いです。※
参考記事
Windows10でLaradockを使ってLaravel 5.5環境を作る
https://qiita.com/sket88/items/4de708ce394179c61d8a
DockerでMySQL複数バージョンを共存させる
https://qiita.com/tanakaworld/items/427b94ea0435b5dccfa2
LaradockのMySQLに接続できなくてはまった話
https://qiita.com/dnrsm/items/4bd078c17bb0d6888647
laradockの環境設定からMySQL接続まで
https://qiita.com/yknsmullan/items/dea4102cf14b1b66e5af
docker起動でportが確保できないエラーの解決
https://nijoen.net/blog/773/
Dockerでコンテナの停止・削除ができなくなった時の対処法
https://qiita.com/musatarosu/items/31d6293a93e75ca6073e
docker docker-compose コマンド
https://qiita.com/souichirou/items/6e701f6469822a641bdd
参考書籍
環境構築
(Dockerのインストールは、書籍を参考にインストール)
フォルダ作成。
$ mkdir laravel_app $ cd laravel_app
git cloneコマンドでLaradockのダウンロード後、.envファイルの作成
$ git clone https://github.com/laradock/laradock.git $ cd laradock $ cp env-example .env
.envファイルを編集(※MySQLのバージョンが8.0以上になっているとセキュリティの関係でDockerがうまく動作しないらしい)
MYSQL_VERSION=5.7
APP_CODE_PATH_HOST=../laravel-practice/ //後でインストールするlaravelの名前
コンテナの初期化(実行コマンド※Dockerアプリは起動した状態※)
$ docker-compose up -d nginx mysql workspace phpmyadmin
ここでエラー発生。

どうやら3306ポートが使えないらしい。.envファイル上で3306と記載の部分を3307に変更して再度compose upするも同様のエラー。(追記:XAMPPを起動していたのを見落としていました。それが原因。)

XAMPPでも3307のポートを使用しているので、念のためその後ポートは3306に戻す。
ためしに以下のコマンドで起動してみる。
docker-compose up
バカみたいに時間がかかったのでctrl+cで離脱。
docker-compose up -d nginx mysql
上記と同様(3306ポートが使えない。)のエラーが発生。
一応下記のコマンドでstatusがupになっていれば起動しているらしい。
$ docker ps

どうやらnginx,php-fpm,workspace,docker:dindは起動してる。記載のないphpmyadminとmysqlが起動していない。
$ docker-compose exec --user=laradock workspace bash laradock@0b80605539aa:/var/www$
ただnginxとworkspaceは起動しているのでとりあえずログインを試みたところログインはできた。
composer create-project laravel/laravel laravel-practice --prefer-dist "5.5.*"
さらにLaravelプロフェクトの作成を試みる。下記ディレクトリに作成されていることを確認。
(ここで最低限、Docker自体は起動していることは確認。MySQLのエラー解決に関しては後述。)

exitでコンテナからログアウト。.envファイル(laradock側の共有ディレクトリ)に以下を追記。
DB_HOST=mysql
サービスの終了
docker-compose stop
再起動
docker-compose up -d nginx mysql workspace phpmyadmin
やはり3306ポートエラーになる。
XAMPPを終了して3307に変更して再起動。(ここでXAMPPを切り忘れていたことに気付く。)
mysqlが起動した!!どうやらXAMPPと干渉しあってたっぽい。。。(3306はなんなんだ。。。)
Dockerを使う際はXAMPPを停止しましょう。
ただphpmyadminはエラーで起動できていないので、laravel-practiceの.envファイルを編集して再起動。
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=secret
⇓以下のように編集
DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3307 DB_DATABASE=default DB_USERNAME=default DB_PASSWORD=secret
再起動してみてもphpmyadminのエラーは変わらず。
ダメもとでコンテナにログインしてmigrateしたところ下記のようなエラー。
そもそもartisanコマンドすら利かないことが判明。。。
$ docker-compose exec --user=laradock workspace bash laradock@0b80605539aa:/var/www$ php artisan migrate Could not open input file: artisan
localhostへアクセスしてもnot found。hostsファイルやらDockerの初期設定にも間違いがあるかもしれない。
戦いは続く…
再挑戦編
phpmyadminとの格闘
PCを再起動してからDockerを再起動してみる。
phpmyadminは変わらず起動しない。
※0.0.0.0:8080のバインドに失敗しました:ポートは既に割り当てられています
netstat -ano | find ":8080" find: ‘:8080’: No such file or directory
このコマンドでポートで何が使用されているかわかるらしいが何も反応せず。。。
docker ps -a
調べると以前のプロセスもこのコマンドでチェックできるとのことで実行。

7 weeks agoとめちゃくちゃ怪しいログを発見。
docker rm `docker ps -a -q`
こちらで停止できるとのことだが
Error response from daemon: You cannot remove a running container
(デーモン(メモリ上の常駐ソフトウェア)からのエラー応答:実行中のコンテナを削除できません)
終了できそうなコマンドを一通り入力。
docker-compose kill docker stop $(docker ps -a -q) docker rm $(docker ps -a -q)
再起動するも変わらないので、まだ削除されていないコンテナがあるっぽい。。。
docker ps //起動中のコンテナを表示。 docker rm --force <コンテナID> //指定のコンテナを強制終了
見つけたコンテナを強制終了して再起動するもport被りの状況は変わらず。。。
docker-compose up -d
ためしに上記コマンド。(鬼時間かかる。。。おそらく3時間くらい待った。)長すぎるので割愛。最後の文が赤字の時点でアウト。。。

以下の通り何も表示されない。待った意味。。。一旦ステイ。。。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
MySQLとの格闘

たまたまこんなものを見つける。(いつ入れたのか全く覚えていない。これが干渉している??)

見つけた。どうやらLaravelを学習する際に入れた模様。
一応MAMPインストールした過去があったのでこちらの共存も気になったが、起動してなければ特にコンフリクト(衝突)することはないそうなので追求せず。
とりあえずこいつを停止してみた。
おそらくこいつのせいでXAMPPのポートも3306で起動できず、3307に変更せざるを得なかったんだなと気づく。
とりあえず3306にDocker内のファイルを変更してみる。mysqlは3306でも起動するようになった!!

残る問題はphpmyadminとartisanコマンドの実行だ。。。
artisanコマンドとの格闘
laradock@48ebb9bcd534:/var/www$ php artisan serve Could not open input file: artisan $ cd laravel-practice $ php artisan serve Laravel development server started: <http://127.0.0.1:8000>
ディレクトリが違うだけだった。。。
が、http://127.0.0.1:8000にアクセスしてもエラー。

コンテナからexitしてもしやと思いコンテナに入らずにアクセス。

表示された。(これであってるのか。。。??) 追記:コンテナで環境構築してるのでartisan serveは不要なのを後に知る。

ためしにdockerを終了してからアクセスしたところ表示されないので合ってるっぽい。とりあえず構築成功??
マイグレートも失敗。これはテーブル作成などもしてないからなんとなく理解できる。
php artisan migrate
phpmyadminとの格闘②
docker-compose.ymlのphpmyadminのポート番号を8081に変更。
//ポートのみ変更した場合 phpmyadmin: build: ./phpmyadmin environment: - PMA_ARBITRARY=1 - MYSQL_USER=root - MYSQL_PASSWORD=password - MYSQL_ROOT_PASSWORD=password ports: - 8081:80 //サーバ名を調べるのに試行錯誤したパターン。※ログインエラー。 mysql: build: context: ./mysql args: - MYSQL_VERSION=${MYSQL_VERSION} environment: - MYSQL_DATABASE=DB - MYSQL_HOST=DB - MYSQL_USER=root - MYSQL_PASSWORD=password - MYSQL_ROOT_PASSWORD=password - TZ=${WORKSPACE_TIMEZONE} phpmyadmin: build: ./phpmyadmin environment: - PMA_ARBITRARY=1 - PMA_HOST=mysql - PMA_USER=root - PMA_PASSWORD=password ports: - 8081:80
全てきれいにdoneになった。泣 (そして一体8080ポートは何に使用しているんだろうか。。。)

http://localhost:8081でphpmyadminへアクセス。
サーバ名。。。わからずログインできず。。。

(その後かなり格闘した末。。。)laravel-practiceの.envに従い入力したところログインに成功。
サーバ:mysql
ユーザー:default
パスワード:secret
以下参照
DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3307 DB_DATABASE=default DB_USERNAME=default DB_PASSWORD=secret
喜びも束の間。データベースを作成する特権がありません。と表示。

.envファイルにこんな記載があるのを思い出す。ユーザーrootでパスワードrootを入力したところログイン。編集もできた◎
MYSQL_ROOT_PASSWORD=root
mysql -u root -p root //こちらからもアクセス可能
create database default; //DB作成
ところがコンテナ内でmigrateはできず。。。
次はちゃんと教材見ながらトライしてみよう。。。挑戦はまだまだ続く。。。
日を改め再チャレンジ
PostgreSQLでサイトの表示まではできたので、再度チャレンジ。(以下参考。)
compose upの前に.envファイルを編集。
APP_CODE_PATH_HOST=../laravel #laravelのプロジェクトファイル名に書き換え DATA_PATH_HOST=../data #複数データを参照してしまう可能性があるため COMPOSE_PROJECT_NAME=docker_mysql #dockerのコンテナ名を変更 MYSQL_VERSION=5.7 #latestから変更 DB_HOST=mysql #追記
さらにdocker-compose.ymlのphpmyadminのポート番号を8081に変更。(MySQL Notifierも毎回起動するので停止させておく。)
コマンド実行。もはや1つもdoneされない状況に。。。泣 前は表示されなかったのに。
$ docker-compose up -d nginx mysql workspace phpmyadmin
【ERROR: Service ‘php-fpm’ failed to build: The command ‘/bin/sh -c if [ ${INSTALL_IMAGEMAGICK} = true ]; then apt-get install -y libmagickwand-dev imagemagick && pecl install imagick && docker-php-ext-enable imagick ;fi’ returned a non-zero code: 100】でサービス ‘php-fpm’の構築に失敗しているとのこと。
以下の記事を参考に、php-fpmディレクトリのDockerfileにて以下をImageMagickの欄に追記。再度試したところdoneと表示◎
apt-get update && \
laravelのバージョンを教本だと5.5のところあえて6.8で今回はチャレンジ。成功。
$ docker-compose exec workspace composer create-project --prefer-dist laravel/laravel . "6.8.*" Application key set successfully.
Laravelアプリ トップ画面 http://localhost/
phpmyadmin トップ画面 http://localhost:8081/
以下でphpmyadminにログイン。DBにdocker_mysqlがあること確認。
サーバ名:mysql
ユーザー名:root
パスワード:root
Laravel側の.envファイルを編集。
DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=docker_mysql DB_USERNAME=root DB_PASSWORD=root
コントローラー作成
コントローラー作成はOK
$ docker-compose exec workspace php artisan make:controller ArticleController Controller created successfully.
DB作成
マイグレーションファイルの作成。
$ docker-compose exec workspace php artisan make:migration create_articles_table --create=articles Created Migration: 2020_03_24_092458_create_articles_table
マイグレート。初めてマイグレートに成功◎laravel側の.envファイルをrootユーザーで記入したからっぽい。
$ docker-compose exec workspace php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (0.13 seconds) Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table (0.13 seconds) Migrating: 2019_08_19_000000_create_failed_jobs_table Migrated: 2019_08_19_000000_create_failed_jobs_table (0.07 seconds) Migrating: 2020_03_24_092458_create_articles_table Migrated: 2020_03_24_092458_create_articles_table (0.05 seconds)
これでやっとアプリ制作に取り掛かれるようになった。。。泣
追記:備忘録
Dockerで環境構築後のXAMPPエラー(未解決)
いつもどおりC:\xampp\apache\conf\httpd.conf
の252行目を編集したところXAMPPが403エラーになり機能しなくなりました。。。
documentRoot "C:/xampp/htdocs/ドメイン名/public_html" <Directory "C:/xampp/htdocs/ドメイン名/public_html">
試しに以下もトライしてみるも同様にエラーでした。
documentRoot "C:/xampp/htdocs/ドメイン名/public_html/wordpress" <Directory "C:/xampp/htdocs/ドメイン名/public_html/wordpress">
先日Dockerの環境構築をしたためと思われる。。。
C:\xampp\apache\conf\extra\httpd-vhosts.conf
に以下を追記。エラー。。。
<Directory "C\..."> AllowOverride All Require all granted </Directory>
変わらず。。。
参考サイト
XAMPP(Apache 2.4以降)で403エラー(Access forbidden!)が消えない場合の対処法
コメントを残す