LoginSignup
35
44

More than 3 years have passed since last update.

【ミライトデザイン社内勉強会#5】docker-compose.ymlとDockerfileを一行づつ読んでみる

Last updated at Posted at 2020-10-12

最強の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のイメージに環境変数を渡せば、公式のイメージが勝手に設定してくれる
  • ④ 左がホストで右がコンテナのパス
    • ホストに存在するファイルをコンテナの指定したパスにコピーしてる

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>

参考記事

35
44
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
44