最強のLaravel開発環境をDockerを使って構築する【新編集版】 - Qiita
で使用されている docker-composer.yml
と Dockerfile
が何をしているのかを一行づつ見てみる
docker-compose.yml
version: "3.8" # ① docker file で使用するバージョンを指定
volumes: # ② VMの中にボリュームする領域を確保している
db-store:
php-fpm-socket:
services: # ③ サービス1つ1つがコンテナ
app: # ④ サービスの名前(任意でつけて大丈夫)
build: ./docker/php # ⑤ ここにあるdockerファイルでビルドしろっていってる
volumes:
- php-fpm-socket:/var/run/php-fpm # ⑥ VM本体の領域に、コンテナの中の/var/run/php-fpmがマウントしている
- ../backend:/work/backend
web:
build: ./docker/nginx
ports:
- 80:80
volumes:
- php-fpm-socket:/var/run/php-fpm
- ../backend:/work/backend
db:
build: ./docker/mysql
volumes:
- db-store:/var/lib/mysql
ports:
- 3306:3306
① ファイルバージョン3リファレンスを作成する| Dockerドキュメント
このバージョンの指定によってファイルの書き方が変わってくる
② Docker for mac の中にVMがありコンテナのデータをマウントする領域を確保している
VMにマウントすることでコンテナを削除してもデータが消えない
名前は任意につけて大丈夫。
- サービス
docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------------------
docker-laravel_app_1 docker-php-entrypoint php-fpm Up 9000/tcp
docker-laravel_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
docker-laravel_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:80->80/tcp
Dockerfile
MySQL
# ① dockerhub からmysql8.0のイメージを取得している
FROM mysql:8.0
# ② LABELを設定している
LABEL maintainer="ucan-lab <yes@u-can.pro>"
# ③ OSの環境変数に値を追加している
ENV TZ=UTC \ # タイムゾーン
# MYSQLが指定している環境変数を指定している
MYSQL_DATABASE=laravel_local \
MYSQL_USER=phper \
MYSQL_PASSWORD=secret \
MYSQL_ROOT_PASSWORD=secret
# ④ ホストのファイルをコンテナにコピーしている
COPY ./my.cnf /etc/my.cnf
- ①
https://hub.docker.com/_/mysql
からimageを取得している- :8.0 を記述しないとlatestのバージョンを持ってくる
- ② Fromの後にlabelでmaintainerをかく観衆があるよ
- ③ mysqlのイメージに環境変数を渡せば、公式のイメージが勝手に設定してくれる
-
https://hub.docker.com/_/mysql の
Environment Variables
に記載がある
-
https://hub.docker.com/_/mysql の
- ④ 左がホストで右がコンテナのパス
- ホストに存在するファイルをコンテナの指定したパスにコピーしてる
buildする
13:01:24 ❯ docker build -t mysql_image .
Sending build context to Docker daemon 2.56kB
Step 1/4 : FROM mysql:8.0
---> 0d64f46acfd1
Step 2/4 : LABEL maintainer="ucan-lab <yes@u-can.pro>"
---> Using cache
---> ef5acb641867
Step 3/4 : ENV TZ=UTC MYSQL_DATABASE=laravel_local MYSQL_USER=phper MYSQL_PASSWORD=secret MYSQL_ROOT_PASSWORD=secret
---> Using cache
---> 3eb31d9f4c84
Step 4/4 : COPY ./my.cnf /etc/my.cnf
---> Using cache
---> c064e3fa414a
Successfully built c064e3fa414a
Successfully tagged mysql_image:latest
- buildに成功すると、dockerimageができる
13:08:35 ❯ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql_image latest f9666eb795b6 8 seconds ago 544MB
- imageを元にコンテナが作成される
- imageを使っているコンテナがあるとimage消せない
コンテナを立ち上げてみる
docker hub の ubuntu を立ち上げてみる
13:08:43 ❯ docker run -it ubuntu bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
54ee1f796a1e: Pull complete
f7bfea53ad12: Pull complete
46d371e02073: Pull complete
b66c17bbf772: Pull complete
Digest: sha256:31dfb10d52ce76c5ca0aa19d10b3e6424b830729e32a89a7c6eee2cda2be67a5
Status: Downloaded newer image for ubuntu:latest
root@d9d9fe415292:/# exit
exit
- コンテナの削除
$ docker rm <CONTAINER ID>
- imageの削除
$ docker rmi <IMAGE ID>