LoginSignup
1
2

More than 3 years have passed since last update.

docker初心者が、docker-compose.ymlの書き方をまとめる

Last updated at Posted at 2020-05-30

docker-composeとは

複数のコンテナをまとめて管理するためのツール

docker-compose.ymlにコンテナの構成情報を定義することで、同一のホスト常の複数コンテナを一括管理できます。
docker-compose

Webアプリケーションの依存関係をまとめて設定できます。
複数のコンテナを的mて起動したり停止したりできる。

コンテナの構成情報をYAML形式のファイルとして管理できるため、継続的デプロイやインテグレーションのプロセスに置いて自動テストを行うときに環境構築でそのまま利用できる。

docker-compose.ymlの概要

versionによってかける内容が異なる。
今回かくのは、3.3です。

サンプルファイル

#バージョンの指定
version: "3"

#サービス定義
services:
  webserver:
    image: ubuntu
    ports:
     - "80:80"
    networks:
      - webnet
 redis:
   image: redis
   networks:
     - webnet

#ネットワーク定義
networks:
  webnet:

#データボリューム定義
volumes:
  data-volume:

イメージの指定

imagesを使って指定する。

#サービス定義
services:
  webserver:
    image: ubuntu

イメージのビルド

buildを使って指定する。

#サービス定義
services:
  webserver:
    build: . #カレントディレクトリ

カレントディレクトリにDockerfileも用意し、ベースイメージを指定する、
Dockerfileで指定されたイメージが自動ビルドされる。
contextでDockerfileがあるディレクトリを指定して、指定したファイルをDockerfileとして読み込める。

#サービス定義
services:
  webserver:
    build:
    context: /work
      dockerfile: Dockerfile-all

コンテナ内で動かすコマンドを指定

command: /bin/bash

entrypointを上書きすることも可能です。

コンテナ間の連携

logserverに連携したい場合は、以下のように書く。エイリアス名を付けたいときは「サービス名:エイリアス名」を書く

links:
  - logserver
  - logserver:log01

コンテナ間の通信

コンテナが公開するポートは、portsで指定。
ホストマシンのポート番号:コンテナのポート番号を指定するか、コンテナのポート番号のみを指定する。
コンテナポート飲みを指定したときは、ホストマインのポートはライダムな値が設定される。

ports:
  - "3000"
  - "8000:8000"
  - "127.0.0.1:8001:8001"

ホストマシンへポートを公開せず、リンク機能を使って連携するコンテナにのみポートを公開するときはexpose

expose:
  - "3000"
  - "8000"

サービスの依存関係の定義

webserverコンテナを開始する前にdbコンテナとredisコンテナを開始したいとき

services:
  webserver:
    build:
    depends_on:
      - db
      - redis
 redis:
   images: redis
 db:
   image: postgres

depend_onがコンテナの開始の順序を制御するだけで、コンテナ上のアプリケーションが利用可能になるまで待つという制御を行わない。
=> アプリケーション側での制御が必要。

コンテナの環境変数の指定

enviroment:
  - HOGE=fuga
  - FOO

設定したい環境変数が多いときは、別ファイルに環境変数を定義して、そのフォイルを読み込みこともできる。

env_file:
  - ./envfile1
  - ./app/envfile2

コンテナ名の指定

container_name: コンテナ名

コンテナ名は一意でないといけない。

コンテナのデータ管理

ボリュームの指定

volumes:
  - /var/lib/mysql
  - cache/:/tmp/cache

ボリュームの読み取り専用の指定

:roをつけると、読み取り専用になり、書き込みができなくなります。設定ファイルなどに付与。

volumes:
  - ~/config:/etc/configs/:ro

ボリュームのマウント指定

別のコンテナから全てのボリュームをマウントするときは、volumes_fromにコンテナ名を指定する

volumes_from:
  - log

参考

プログラマのためのDocker教科書

1
2
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
1
2