0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

docker-compose.ymlを何となくコピペしてたのでちゃんと調べるの会

0
Posted at

はじめに

前回、「Dockerを何となく使っていたので改めて仕組みを調べてみた」という記事を書きました。

Dockerfile・Image・Containerの関係を整理したことで、Dockerそのものへの理解は以前より深まりました。

ただ、もう一つ気になったものがあります。

それが docker-compose.yml というものです。

普段は用意されているファイルをそのまま使うことが多く、

  • services:
  • ports:
  • volumes:
  • environment:

などの項目も、「何となく動いているから」という理由で深く理解していませんでした。

そこで今回は、普段よく目にする docker-compose.yml の項目について、自分なりに整理してみ用と思います。

docker-compose.ymlとは

前提として、docker-compose.yml は、複数のコンテナをまとめて管理するための設定ファイルです。

例えば Web アプリケーションを動かす場合、

  • PHP
  • Nginx
  • MySQL

など、複数のコンテナが必要になります。

それらを一つずつ起動するのではなく、

docker compose up -d

だけでまとめて起動できるようにしてくれるのが docker-compose.yml の役割です。

services

最も重要な項目になります。

services:
  - php:
  - nginx:
  - mysql:

services の中には、起動したいコンテナを定義します。

例えば、「php」「nginx」「mysql」の3つを書けば、3つのコンテナが起動します。

サービス名は自由に付けられますが、後述する depends_on や networks などでも利用されます。

image

既に存在するDockerイメージを利用する場合に指定します。

image: mysql:8.0

この例では、Docker Hub に公開されている MySQL 8.0 のイメージを利用してみました。

自分でDockerfileを書く必要がない場合は image を利用することが多いようです。

build

自分で用意した Dockerfile を使ってイメージを作成する場合はこちらです。

build: .

または

build:
  context: .
  dockerfile: Dockerfile

などと記述します。

前回の記事で整理した

Dockerfile

Image

Container

の最初の部分を担っているのが build になります。

ports

コンテナとPC(ホスト)の通信を行うための設定です。

ports:
  - "8080:80"

これは、「ホスト側:8080番 コンテナ側:80番」を接続するという意味になります。

つまり「http://localhost:8080」 へアクセスすると、コンテナ内の80番ポートへ通信されます。

最初は数字が2つ並んでいて混乱しましたが、「ホスト : コンテナ」と覚えると分かりやすいです。

volumes

データを永続化するための設定です。

例えば、

volumes:
  - .:/var/www/html

と書くと、

PC上のカレントディレクトリと、コンテナ内の /var/www/html が同期されます。

そのため、エディタでコードを保存すると、コンテナ側にもすぐ反映されます。

また、MySQLのデータなどもVolumeに保存することで、コンテナを削除してもデータを保持できます。

environment

環境変数を設定します。

environment:
  MYSQL_ROOT_PASSWORD: root

この例では、MySQLのrootユーザーのパスワードを設定しています。

Laravelなどでも .env を利用しますが、こちらはコンテナに渡す環境変数という違いがあります。

depends_on

コンテナの起動順を指定します。

depends_on:
  - mysql

この設定をすると、PHPコンテナより先にMySQLコンテナを起動してくれます。

ただし、「起動完了」まで保証するわけではないという点は注意が必要です。

restart

コンテナ終了時の動作を指定します。

restart: always

代表的な設定は、

no
always
unless-stopped
on-failure

などがあります。

開発環境ではあまり意識しませんが、本番環境では利用されることも多い設定です。

今回調べてみて分かったこと

今回調べてみて、docker-compose.yml は単なる設定ファイルではなく、

  • どのコンテナを起動するか
  • どのイメージを使うか
  • ポートをどう公開するか
  • データをどこへ保存するか

などをまとめて管理する、とても重要な役割を持っていることが分かりました。

今までは何となくコピペして使っていましたが、一つ一つ意味を理解すると設定ファイルも読みやすくなりますね。

まとめ

今回は docker-compose.yml の中でも、よく見かける項目を中心に整理してみました。

  • services
  • image
  • build
  • ports
  • volumes
  • environment
  • depends_on
  • restart

もちろん、まだ紹介しきれていない項目もありますが、普段の開発で触れる内容はかなり理解できたと思っています。

また次回で Dockerfile に書かれている命令(FROM・RUN・COPY・CMD など)についても、一つずつ整理してみたいなと思います。

今回の記事が、同じように「何となくdocker-compose.ymlを書いている」という方の参考になれば幸いです。

ありがとうございました。

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?