#はじめに
タイトルの通り、共同開発講座を受講中に起きたトラブルや詰まりポイントをまとめたメモ(約50記事)をジャンル別に全て公開します。
ジャンルは以下の通りなので、気になるものがあればぜひご覧ください。
###【ジャンル一覧】
・GitHub関連
・Laravel関連
・データベース(migration/seeding)関連
・環境関連
・総まとめ集
下記の点を、ご了承ください。
・ジャンルで統一しているため、内容に関しては統一性はありません。
・メモの難易度もバラバラです。
・初学者向けの内容となっております。
・自分用のメモを転用しておりますので、表現が稚拙な部分があるかと思います。
・あくまで僕のメモです!!
#環境
・vagrant-docker-laravel
・docker-compose version 1.25.0
・PHP 7.2.34
・Laravel Framework 5.8.38
・mysql Ver 14.14 Distrib 5.7.32, for Linux (x86_64) using EditLine wrapper
・phpmyadminを使用
#・【docker】down と stop の使い分け
**docker-compose build **
を行って
・ファイルの修正を反映させたい時は
docker-compose down //コンテナの削除?シャットダウン
を行って
docker-compose up -d
で、新たにコンテナを立ち上げる
・そのままのコンテナで、再起動のみ行いたい場合は
docker-compose stop
でコンテナを止めてから
docker-compose start
で、既存のコンテナを開始させる
#・Docker 起動時にapacheがすぐに落ちる
####不具合詳細
Docker 起動時にapacheがすぐに落ちる不具合
その他ブラウザでLaravelにアクセスできない等
原因は、DockerとVagrantの適切なシャットダウンをしていなかったから(?)
【メンターさんの回答】
以前の操作で適切なシャットダウンが出来ていないと、ガベージファイルというゴミファイルが悪さをしているのかも知れません。
docker ps -a
で現在できているコンテナをみて、
docker rm コンテナID
でガベージファイルを全削除してから、
再度
docker-compose build
docker-compose up -d
等を試していただけますか?
参考リンク
https://qiita.com/tifa2chan/items/e9aa408244687a63a0ae
####対処方法
①適切なシャットダウン
Docker 停止
docker-compose stop
Vagrant 停止
vagrant suspend
②ガベージファイルの削除方法
既存のコンテナを確認する
docker ps -a
不要と思われるコンテナを削除する
docker rm コンテナ名
####シャットダウンからの復帰
suspendからの復帰
vagrant resume
dockerの開始
docker-compose start
#・Docker立ち上げまでの流れ(インストール後)
※こちら私が使用していたディレクトリ名なのでわかりにくいかもです
ターミナルにて
・cdコマンドでプロジェクトディレクトリに移動
・cdコマンドでdocker-on-vagrantに移動
・vagrantにログイン
kei@Mac-Pro docker-on-vagrant % vagrant ssh
Last login: Sat Nov 14 16:32:03 2020 from 10.0.2.2
ls cdコマンドでdocker-laravelまで移動
[vagrant@local-docker ~]$ ls
docks
[vagrant@local-docker ~]$ cd docks/
[vagrant@local-docker docks]$ ls
docker-laravel
[vagrant@local-docker docks]$ cd docker-laravel/
[vagrant@local-docker docker-laravel]$ ls
README.md apache-php docker-compose.yml index.php lara-d
docker-laravel上で「docker-compose start」(既存のコンテナをスタートさせる)
[vagrant@local-docker docker-laravel]$ docker-compose start
Starting db ... done
Starting web ... done
Starting phpmyadmin ... done
//3つ全て立ち上がったらOK!
lara-dに移動
[vagrant@local-docker docker-laravel]$ ls
README.md apache-php docker-compose.yml index.php lara-d
[vagrant@local-docker docker-laravel]$ cd lara-d
--ここから開発スタートできる--
#・Laravelとmysqlが接続できないエラー(環境構築)
####エラー詳細
→php artisan migration ができない
root@86b16371b02f html]# php artisan migrate
エラー文
Illuminate\Database\QueryException : SQLSTATE[HY000] [1045] Access denied for user 'root'@'172.23.0.3' (using password: NO) (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations and table_type = 'BASE TABLE')
####原因
①Laravelの.envファイルのmysqlパスワード と docker-compose.yml内に記載されているmysqlパスワードが不一致であった。
ちなみに、docker-compose.yml内のパスワードに全て合わせなければならない!!
②そもそも、migrationをする前にテーブルが入るための箱(データベース)をphpmyadminに作っておかなければならなかった。これは.envファイルのDB_DATABASE=●●●で指定されている名前のdbを作っておくこと
③migrationファイル内の構文が間違っていた
今回はtimestamps()とtimestamp()で引数の取り方が変わるため、構文エラーとなっていた。
####Mysqlとの接続方法
以前まとめた記事があります↓↓
https://qiita.com/kei_Q/items/f3422b34afbe094119cb
#・vagrant docker 新しいコンテナを立ち上げる(新規プロジェクトを立ち上げる)方法
コンテナを新しく立ち上げたい!!!
という時の方法
####laravelの環境を動かすことができるdockerファイルをクローン
この時に名前を変更しておくと良い
[vagrant@local-docker docks]$ git clone https://github.com/****/docker-laravel.git **lara-review** ←ここで名前変更
vagrantにログインした状態でdocksディレクトリの中にクローンする
[vagrant@local-docker docks]$ git clone https://github.com/****/docker-laravel.git lara-review
Cloning into 'lara-review'...
remote: Enumerating objects: 23, done.
remote: Counting objects: 100% (23/23), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 23 (delta 5), reused 22 (delta 4), pack-reused 0
Unpacking objects: 100% (23/23), done.
これでファイルをクローンしてきてlara-reviewと言う名前でvagrantの中においた。
イメージの作成
docker-compose build
を行ってイメージを作成した
いざコンテナの作成
docker-compose up -d
でコンテナを新しく作成しようとしたらエラーが出た
それが以下のエラー
[vagrant@local-docker lara-review]$ docker-compose up -d
Creating network "lara-review_default" with the default driver
Creating mysql5.7 ... error
ERROR: for mysql5.7 Cannot create container for service db: Conflict. The container name "/mysql5.7" is already in use by container "76d4ee80c5a2d3f73636dcd29e6ac736470617f02ee7e36148599f15d8fea51a". You have to remove (or rename) that container to be able to reuse that name.
訳)
コンテナを作成しようとしたけど、コンテナを作る時に使用するファイルに記載してある名前はすでに他のコンテナで使われているから作れませんよ?
って怒られてる。。
↓
つまり、今取り組んでるプロジェクトであるlara-dというlaravelプロジェクトのために作ったコンテナで、名前使っちゃってるから、同じ名前で二つは作成できないよと言う意味。
####解決策
解決策としては以下の3つが考えられる?
①既存のコンテナの削除
②既存のコンテナの名前変更
③ymlファイルの名前を変更してbuildした後にコンテナ作成
現行のプロジェクトであるlara-dを消すのは不可能だから答えは③になるので
lara-reviewでクローンしてきたものの中にあるdocker-compose.ymlファイルに書いてある3つの名前を全て変更する
①Apache
②phpmyadmin
③web bash
の3つのこと。
docker-compose.ymlファイル
[vagrant@local-docker lara-review]$ cat docker-compose.yml
version: "3"
services:
web:
build:
context: ./apache-php
ports:
- 80:80
privileged: true
links:
- db
volumes:
- "./:/var/www/html"
- "./apache-php/apache.conf:/etc/httpd/conf/httpd.conf"
container_name: "apache-php" //←この名前を変更
db:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=root
container_name: "mysql5.7" //←この名前を変更
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
links:
- db
ports:
- 8080:80
environment:
- PMA_ARBITRARY=1
- PMA_HOST=db
- PMA_USER=root
- PMA_PASSWORD=root
container_name: "phpmyamin-la" //←この名前を変更
[vagrant@local-docker lara-review]$
####ymlファイルの編集
sudo vi docker-compose.yml
で編集
3つの名前を適当に変更した後、
docker-compose build
docker-compose up -d
を行うとコンテナが作成できた!!(この時既存のコンテナはストップしておかないといけない)
--------ここまでがコンテナの立ち上げ-----------
---------以下、Laravelの導入-----------
コンテナを立ち上げ、web bash に入る
[vagrant@local-docker lara-review]$ docker-compose exec web bash
laravel本体をインストールする
[root@4b2a1b935301 html]# composer create-project --prefer-dist laravel/laravel laravel-review "5.8.*"
ちなみに最後の5.8の後の「*」は「5.8系のなかで最新のものをインストールしてね」という意味
laravelインストール画面
Creating a "laravel/laravel" project at "./laravel-review"
Installing laravel/laravel (v5.8.35)
- Downloading laravel/laravel (v5.8.35)
- Installing laravel/laravel (v5.8.35): Extracting archive
Created project in /var/www/html/laravel-review
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies
Lock file operations: 86 installs, 0 updates, 0 removals
- Locking beyondcode/laravel-dump-server (1.3.0)
- Locking dnoegel/php-xdg-base-dir (v0.1.1)
- Locking doctrine/inflector (1.4.3)
- Locking doctrine/instantiator (1.4.0)
- Locking doctrine/lexer (1.2.1)
・・・・・
・・・・
・・続く
####ymlファイルを編集する
[vagrant@local-docker lara-review]$ cat docker-compose.yml
version: "3"
services:
web:
build:
context: ./apache-php
ports:
- 80:80
privileged: true
links:
- db
volumes:
- "./laravel-review:/var/www/html" //変更箇所
- "./apache-php/apache.conf:/etc/httpd/conf/httpd.conf" //変更箇所
container_name: "apache-php-2"
db:
image: mysql:5.7
environment:
- MYSQL_ROOT_PASSWORD=root
container_name: "mysql5.7-2"
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
links:
- db
ports:
- 8080:80
environment:
- PMA_ARBITRARY=1
- PMA_HOST=db
- PMA_USER=root
- PMA_PASSWORD=root
container_name: "phpmyamin-la-2"
####apache conf をbuildする
[vagrant@local-docker apache-php]$ docker-compose build
####ちなみに
コンテナを起動させておけるのは多分一つだけなので、、
lara-reviewのコンテナを立ち上げる際はdocker-laravelのコンテナは停止しておく必要がある。
停止とスタートのコマンドは以下の通り
docker-compose stop コンテナを停止
(docker-compose downはシャットダウンなので注意)
docker-compose start コンテナを再開させる
docker-laravel(既存プロジェクト) もしくは lara-review(新規プロジェクト) の停止もしくは開始したい方のディレクトリに移動してから上記コマンドを叩いて、使わないプロジェクトを停止させ、これから使用する方を立ち上げる。
こんな感じに↓↓↓
[vagrant@local-docker lara-review]$ docker-compose stop
Stopping phpmyamin-la-2 ... done
Stopping apache-php-2 ... done
Stopping mysql5.7-2 ... done
[vagrant@local-docker lara-review]$
[vagrant@local-docker lara-review]$
[vagrant@local-docker lara-review]$ cd ..
[vagrant@local-docker docks]$ cd docker-laravel/
[vagrant@local-docker docker-laravel]$ docker-compose start
Starting db ... done
Starting web ... done
Starting phpmyadmin ... done
#・vagrantの停止と再起動の流れ(パソコンの再起動したい時に超有用です)
パソコンを再起動するときはvagrantをシャットダウンさせるか、スリープモードにしておくべきだそう。
vagrantを一時停止する(スリープさせる)
vagrant suspend
kei@Mac-Pro docker-on-vagrant % vagrant suspend
==> vagrant: A new version of Vagrant is available: 2.2.14 (installed version: 2.2.13)!
==> vagrant: To upgrade visit: https://www.vagrantup.com/downloads.html
==> default: Saving VM state and suspending execution...
####vagrantが止まったかどうかの確認(状態確認)
vagrant status
ちなみにdefaultの状態は
Power off
Running
Saved
の三つがある。
vagrant status実行
kei@Mac-Pro docker-on-vagrant % vagrant status
Current machine states:
default saved (virtualbox) //savedならOK!
To resume this VM, simply run `vagrant up`.
oourakeisuke@Mac-Pro docker-on-vagrant %
――ここでパソコンを再起動する――
――パソコンの再起動が完了したら――
####状態確認
vagrant status
Last login: Sun Nov 22 15:25:57 on console
kei@Mac-Pro docker-on-vagrant % vagrant status
Current machine states:
default saved (virtualbox) //savedのままならOK!
To resume this VM, simply run `vagrant up`.
####vagrantを再起動する(suspendからの復帰)
vagrant resume
kei@Mac-Pro docker-on-vagrant % vagrant resume
==> default: Resuming suspended VM...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2200
default: SSH username: vagrant
default: SSH auth method: private key
==> default: Machine booted and ready!
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.
####vagrantにログインする
kei@Mac-Pro docker-on-vagrant % vagrant ssh
Last login: Thu Nov 19 11:14:13 2020 from 10.0.2.2
[vagrant@local-docker ~]$
ログイン成功!!(再起動成功!!)