🐸

docker-composeチートシート

2022/05/29に公開約3,800字

docker-composeとは

docker-composeとは、1つ以上のdockerコンテナに対する定義を行い、その定義を元にコンテナイメージの作成、コンテナの起動を行うツールである。
docker-composeの定義はdocker-compose.ymlというyaml形式のファイルに定義を行う。yml内では、コンテナのイメージを生成する際にベースとするイメージファイル、バージョンの指定、コンテナ作成時のコンテナ名、ホストマシンとコンテナで共有するディレクトリの設定などを定義することができる。
これにより、dockerコマンドでは、オプションと指定していた内容を覚える必要なく、容易にコンテナを利用することができる。

docker-compose.ymlの書きかた

docker-composeは設定情報として、yml形式のファイルを使用する。
通常ファイル名はdocker-compose.ymlとする。

version: '3'

services:

    <service name 1>:
        build:
            context: .
            dockerfile: <dockerfile name>
            args:
             - <arg1>=<value1>
             - <arg2>=<value2>
        image: <image name>:<tag>
        container_name: <container name>
        hostname: <hostname>
        volumes:
          - <host machine directory>:<virtual machine directory>:<access mode>
        env_file: .env
        environment:
          - PATH=<additional path>:${PATH}
        expose:
          - <expose port number>
        ports:
          - <container port number>
          - <container port number>:<host port number>
          - <container port number>:<host port number>:<ip address>
        tty: true
        command: ["<command1>", "<command2>", "<command2>"]
        logging:
            driver: "json-file" # defaults if not specified
            options:
                max-size: "10m"
                max-file: "3"

    <service name 2>:
        # Same as above service name 1.
  • service name
    1つのdockerコンテナに対して付与する名前。

  • build
    dockerfileよりdockerイメージをビルドする際に使用する情報

    • context
      docker-composeコマンドを実行したディレクトリを指定する。

    • dockerfile
      ビルドに使用するdockerfile名を指定。通常はDockerfile or dockerfileを使用する。

    • args
      docker-composeからdockerfileへ渡す変数。dockerfile側ではARG <arg1>のようにarg1を定義し、${arg1}のように使用する。

  • image
    dockerfileビルド後のimageに対して名称を指定する。また、:<tag>とすることで、イメージに対してタグ名を付与することができる。

  • container_name
    dockerコンテナに対する名称を指定する。

  • hostname
    dockerコンテナで使用するhostnameを指定する。

  • volumes
    ホストマシンとコンテナで共有するディレクトリを指定する。access modeには読み取り専用の場合"ro"、読み書き可能の場合、"rw"を指定する。

  • env_file
    docker-composeではホストマシンの環境変数を${...}の形式で使用することができる。しかし、ホストマシンには必要な環境変数が全て設定されているとは限らない。そのため、ビルドを実施する際に必要な環境変数を.envファイルに記載し、.envファイルに必要な環境変数を設定し、使用することができる。.envファイルはdocker-compose.ymlと同じ階層のディレクトリに配置する必要がある。
    また、.envファイルに設定している環境変数とホストマシンに設定している環境変数が衝突している場合、ホストマシンに設定している環境変数が優先される。

  • environment
    コンテナで使用する環境変数を設定する。

  • expose
    リンクするコンテナにポートを解放する。ホストマシンからは接続されません。

  • ports
    ホストマシンに公開するコンテナ側ポートを指定する。

    • <container port number>
      指定したコンテナポート番号とランダムなホスト側ポート番号をマッピングする。

    • <container port number>:<host port number>
      指定したコンテナポート番号と指定したホストマシンのポート番号をマッピングする。

    • <container port number>:<host port number>:<ip address>
      指定したコンテナポート番号と指定したホストマシンのポート番号をマッピングし、指定したIPアドレスのみの通信を許可する。

  • tty
    擬似端末(キーボードによる入力)をコンテナに結びつける設定

  • command
    dockerfileのCMD命令を上書きする。指定方法は["...", "...", "..."]の形式で記載する。

  • logging
    コンテナのロギングを行う。

    • driver

      • json-file
        json形式でログを残す。
    • options

      • max-size
        ログファイルの最大サイズを指定する。"10m"と記載すると最大サイズを10Mとなる。
      • max-file
        ログのローテート数を指定する。

CLI(Command Line Interface)

コンテナを起動する

docker-compose up [option]
    -d: バックグラウンド起動
    --build: dockerfile等に変更があった場合にはイメージの作成からコンテナの起動までを実施する。

指定のコンテナのみを起動

docker-compose up [container name]

コンテナにログイン

docker-compose exec [service name] /bin/bash

起動中のコンテナ一覧を表示する

docker-compose ps

イメージをビルドする

docker-compose build [option]
    --no-cache: イメージのcacheを利用せず、イメージの作成を行う。

imageの一覧を表示する

docker-compose images

コンテナを停止

docker-compose down [option]
    --rmi all: コンテナ起動時に関連するイメージを削除する。

コンテナの標準出力を表示

docker-compose logs [service name]

docker-composeで使用される環境変数等の情報を表示する

docker-compose config

Discussion

ログインするとコメントできます