Docker Compose 基本コマンド操作

Docker Composeで複数コンテナ一括管理
2023-09-17
ヒーローイメージ

目次
  1. チートシート
  2. 前提条件
  3. Docker Composeとは
  4. Docker Composeをインストールする
  5. Docker Composeをアンインストールする
  6. はじめてのDocker Compose
  7. docker-compose.ymlの解説
  8. Docker Compose基本コマンド解説
  9. 参考情報

チートシート

Docker Composeインストール/アンインストール
# Docker Composeインストール
sudo curl -L "https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# Docker Composeバージョン確認
docker-compose version

# Docker Composeアンインストール
sudo rm -rf /usr/local/bin/docker-compose

Docker Composeコマンド
----Dockerコンテナ作成(+起動)------
## コマンド書式
docker-compose up [オプション] [サービス名...]
## コマンド実例
docker-compose up -d

----Dockerコンテナ一覧確認------------
## コマンド書式
docker-compose ps [オプション] [サービス名...]
## コマンド実例
docker-compose ps

----Dockerコンテナプロセス確認--------
## コマンド書式
docker-compose top [サービス名...]
## コマンド実例
docker-compose top

----Dockerコンテナ起動----------------
## コマンド書式
docker-compose start [サービス名...]
## コマンド実例
docker-compose start

----Dockerコンテナ停止----------------
## コマンド書式
docker-compose stop [オプション] [サービス名...]
## コマンド実例
docker-compose stop

----Dockerコンテナ再起動--------------
## コマンド書式
docker-compose restart [オプション] [サービス名...]
## コマンド実例
docker-compose restart

----Dockerコンテナ削除----------------
## コマンド書式
docker-compose down [オプション] [サービス名...]
## コマンド実例
docker-compose down
## コマンド実例
docker-compose down --remove-orphans

docker-compose.yml
version: '3.8'
services:
  web:
    image: nginx:latest
    ports:
        - '80:80'
  app:
    image: myapp:latest
    ports:
        - '5000:5000'
  db:
    image: postgres:latest
    environment:
        POSTGRES_PASSWORD: mypassword

前提条件

Docker Composeとは

Docker Compose イメージ
  • Docker Composeとは、複数のDockerコンテナを一括で定義し起動/停止を管理するためのツールです。

  • 以下のようなYAML形式の設定ファイル(docker-compose.yml)を利用してDockerコンテナを管理します。

    docker-compose.yml
    version: '3.8'
    services:
      web:
        image: nginx:latest
        ports:
          - '80:80'
      app:
        image: myapp:latest
        ports:
          - '5000:5000'
      db:
        image: postgres:latest
        environment:
          POSTGRES_PASSWORD: mypassword
    
    

Docker Composeをインストールする

動作確認環境

  • Amazon Linux 2
  • Docker 20.10.23
  • Docker Compose 2.21.0

手順内容

  1. まずはDocker Compose本体をGithubからダウンロードするため以下のコマンドを実行してください。

    Docker Compose本体ダウンロード
    sudo curl -L "https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    実行結果
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
       0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
     100 56.7M  100 56.7M    0     0  29.7M      0  0:00:01  0:00:01 --:--:-- 42.5M
    Note

    ダウンロード先のURLのv2.21.0部分については、インストールしたいバージョン番号を指定してください。
    指定可能なバージョン番号はこちらから確認可能です。

    Note

    uname -sは実行中のOS名を出力します。
    uname -mは実行中のアーキテクチャ(32ビットまたは64ビット)を出力します。
    -o /usr/local/bin/docker-composeでダウンロードファイルの保存先を指定しています。

  2. /usr/local/bin/の中身を確認すると以下のとおりDocker Compose本体がダウンロードされていることが確認できます。

    ファイル一覧確認(/usr/local/bin/)
    ls -al /usr/local/bin/ | grep docker-compose
    実行結果
    -rw-r--r--  1 root root 59542867 Xxx xx xx:xx docker-compose
  3. つづいて「Docker Compose」に対して実行権限を付与します。

    Docker Compose本体に実行権限付与
    sudo chmod +x /usr/local/bin/docker-compose
    ファイル一覧確認(/usr/local/bin/)
    ls -al /usr/local/bin/ | grep docker-compose
    実行結果
    -rwxr-xr-x  1 root root 59542867 Xxx xx xx:xx docker-compose
  4. 最後に「Docker Compose」のコマンドが利用できるかを確認します。

    Docker Composeバージョン確認
    docker-compose version
    実行結果
    Docker Compose version v2.21.0
  5. 以上が「Docker Compose」のインストール手順になります。

Docker Composeをアンインストールする

  • 本章ではDocker Composeのアンインストール手順について解説します。

  • ここではLinux環境向けにDocker Composeのアンインストール手順について解説します。

    Note

    WindowsおよびmacOSのデスクトップ環境における「Docker Desktop」には「Docker Compose」が含まれているため、
    もし「Docker Compose」をアンインストールしたい場合は「Docker Desktop」本体をアンインストールしてください。

動作確認環境

  • Amazon Linux 2
  • Docker 20.10.23
  • Docker Compose 2.21.0

手順内容

  1. 以下のコマンドを実行してダウンロードしたDocker Compose本体を削除すればアンインストール完了です。

    Docker Composeアンインストール
    sudo rm -rf /usr/local/bin/docker-compose

はじめてのDocker Compose

  1. docker-compose.ymlの記載ルールやdocker-composeコマンドの解説解説に入る前に、まずは実際にdocker-compose.ymlからDockerコンテナ作成する流れを説明します。

  2. まずは事前準備です。docker-compose.ymlを作成し任意のディレクトリに配置します。
    カレントディレクトリはdocker-compose.ymlが格納されているディレクトリに変更しておいてください。

    Note
    任意のディレクトリとは述べましたが、docker-compose.yml以外に不要なファイルが格納されていないほうが望ましいです。
    docker-compose.yml
    version: '3.8'
    services:
        web-server1:
            image: httpd:2.4.57
            container_name: 'web-server1'
            restart: always
            ports:
                - '9000:80'
    
        web-server2:
            image: nginx:1.25.2
            container_name: 'web-server2'
            restart: always
            ports:
                - '9100:80'
    
    
  3. つづいて以下のとおりコマンドを実行すると、httpdイメージとnginxイメージ(イメージが未ダウンロードであればイメージダウンロードが実行される)から2つのコンテナが作成されます。

    Note
    httpd(Apache HTTP Server)とnginxは、いずれも世の中で広く利用されているWEBサーバのイメージです。
    Dockerコンテナ作成(+起動)
    docker-compose up -d
    実行結果
    [+] Running 15/15
    ✔ app-server 8 layers [⣿⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled        23.1s
    ✔ 44ba2882f8eb Pull complete                                       4.3s
    ✔ 2cabec57fa36 Pull complete                                       3.2s
    ✔ c4e554d59e12 Pull complete                                       9.3s
    ✔ 111cbdbeed15 Pull complete                                       3.8s
    ✔ ebe3e1fbfc69 Pull complete                                       4.6s
    ✔ dfa1fc9cfd4d Pull complete                                       4.9s
    ✔ acffac6842c0 Pull complete                                       5.8s
    ✔ 18bae09323bf Pull complete                                       5.6s
    ✔ web-server 5 layers [⣿⣿⣿⣿⣿]      0B/0B      Pulled            16.5s
    ✔ 360eba32fa65 Pull complete                                       1.5s
    ✔ 2832a695827e Pull complete                                       0.7s
    ✔ b57c1299d233 Pull complete                                       0.8s
    ✔ 45a0ea29816d Pull complete                                       2.3s
    ✔ 8c226ac2053e Pull complete                                       1.4s
    [+] Running 3/3
    ✔ Network hello_default         Created                            0.1s
    ✔ Container app-server-1  Started                            0.3s
    ✔ Container web-server-1  Started
    
    
  4. コンテナが正しく作成され起動しているかは以下のコマンドの実行結果で確認できます。

    • 以下では2つのコンテナが起動されていることが確認できます。
    Dockerコンテナ一覧確認
    docker-compose ps
    実行結果
    NAME                  IMAGE          COMMAND                                          SERVICE       CREATED          STATUS          PORTS
    web-server1-1   httpd:2.4.57   "httpd-foreground"                               web-server1   23 seconds ago   Up 21 seconds   0.0.0.0:9000->80/tcp, :::9000->80/tcp
    web-server2-1   nginx:1.25.2   "/docker-entrypoint.sh nginx -g 'daemon off;'"   web-server2   23 seconds ago   Up 21 seconds   0.0.0.0:9100->80/tcp, :::9100->80/tcp
    
    
  5. ブラウザから「http://localhost:9000/」と「http://localhost:9100/」にアクセスすると、以下のとおり2つのWEBサーバが起動できていることが確認できます。

    Apache
    Nginx
  6. 以上がdocker-compose.ymlからDockerコンテナ作成する流れの説明になります。

docker-compose.ymlの解説

  • 本章ではdocker-compose.ymlに記載できる要素について解説していきます。

    Note

    紹介する内容は基本的なものに絞っています。全ての内容を把握したい場合は、本ページ下部の参考情報より公式リファレンスを参照してください。

トップレベル要素

version要素

version要素はdocker-compose.ymlファイルフォーマットバージョンを指定します。
具体的なフォーマットバージョン番号と利用可能なDokcerバージョンの対応表は以下で確認ができます。

Compose file version 3 reference | Docker Docs
Find a quick reference for Docker Compose version 3, including Docker Engine compatibility, memory limitations, and more.
docs.docker.com
リンクカード
services要素

services要素にはコンテナの情報を記載します。まず子要素に作成するコンテナの名称を定義します。
下記例の場合はweb-server1web-server2が作成するコンテナの名称になります。

docker-compose.yml
version: "3.8"
services:
    web-server1:        image: httpd:2.4.57
        container_name: 'web-server1'
        restart: always
        ports:
        - '9000:80'

    web-server2:        image: nginx:1.25.2
        container_name: 'web-server2'
        restart: always
        ports:
        - '9100:80'

各コンテナ名称の1つ下の階層が実行するコンテナの定義です。下記例の場合imagerestartports要素が該当します。

docker-compose.yml
version: "3.8"
services:
    web-server1:
        image: httpd:2.4.57        container_name: 'web-server1'        restart: always        ports:        - '9000:80'
    web-server2:
        image: nginx:1.25.2        container_name: 'web-server2'        restart: always        ports:        - '9100:80'

services要素の子要素

image要素

image要素にはDockerイメージ名を指定します。イメージ名:タグ名の書式で記載します。

docker-compose.yml(抜粋)
image: httpd:2.4.57
image: nginx:1.25.2
Note
:タグ名は省略可能です。省略した場合は:latestが指定され最新のイメージが利用されます。
build要素

build要素にはDockerfileが格納されているディレクトリパスを指定します。
相対パスを指定した場合はdocker-compose.ymlが配置されているパスからの相対パスになります。
Dockerfileの名称を変更して利用したい場合は子要素にcontext要素とdockerfile要素を指定します。

docker-compose.yml(抜粋)
build: .
build:
    context: ./dir
    dockerfile: Dockerfile-alternate
container_name要素

container_name要素はコンテナ名を指定します。

docker-compose.yml(抜粋)
container_name: 'web-server1'
restart要素

restart要素はコンテナの再起動ポリシーを指定します。

  • no : いかなる状況でもコンテナは再起動しません。
  • always : コンテナは常に再起動されます。
  • on-failure : 終了コードが失敗時エラーを示している場合にコンテナを再起動します。
  • until-stopped : コンテナが (手動またはその他の方法で) 停止されている場合を除き、常にコンテナーを再起動します。
docker-compose.yml(抜粋)
restart: "no"
restart: always
restart: on-failure
restart: unless-stopped
ports要素

ports要素はポートフォーワーディングを指定します。

docker-compose.yml(抜粋)
ports:
- '9100:80'
volumes要素

volumes要素はボリュームとしてマウントするパスを指定します。ホスト・コンテナ間でファイルを共有するために利用します。
[ホスト側のディレクトリパス]:コンテナ側のディレクトリパス[:モード]の形式で指定します。
:モードはオプションで指定可能で:roを指定すると読み取り専用でホスト側のディレクトリをマウントします。

docker-compose.yml(抜粋)
volumes: ./html:/usr/share/nginx/html
volumes: ./html:/usr/share/nginx/html:ro
command要素

command要素はデフォルトのコマンドを上書きします。
shell形式コマンド 引数1 引数2、exec形式['実行プロセス','引数1','引数2']、のいずれかで指定可能です。

docker-compose.yml(抜粋)
command: bundle exec thin -p 3000
command: ["bundle", "exec", "thin", "-p", "3000"]
environment要素

environment要素は環境変数を指定します。配列や辞書型も利用できます。

docker-compose.yml(抜粋)
environment:
    POSTGRES_PASSWORD: mypassword

Docker Compose基本コマンド解説

  • 本章ではDocker Composeの各コマンドの使い方を解説していきます。

    Note
    • 紹介するコマンドのオプションについては、最低限覚えておいたほうが便利なものに絞って記載します。
    • 本章で紹介するコマンドやオプションは一部です。全ての内容を把握したい場合は、本ページ下部の参考情報より公式リファレンスを参照してください。

Dockerコンテナ作成(+起動)

  1. Docker Composeを使ってDockerコンテナを作成する場合は、カレントディレクトリにdocker-compose.ymlを予め作成しておいた上で、以下のコマンドを利用します。もし対象のDockerイメージが未ダウンロードの場合はコンテナ作成前に自動でイメージダウンロードされます。

    コマンド書式:Dockerコンテナ作成(+起動)
    docker-compose up [オプション] [サービス名...]
    オプション 説明
    --build イメージビルドを必ず実行するようにします。
    -d コンテナをバックグラウンドで実行します。
  2. 例えばWEBサーバ(Nginx)を待ち受けポートを9000に指定して起動する場合、まずは以下のようなdocker-compose.ymlをカレントディレクトリに配置します。

    docker-compose.yml
    version: '3.8'
    services:
      web:
        image: nginx:latest
        ports:
          - 9000:80
  3. docker-compose.ymlの配置が完了したら、以下のコマンドでDockerコンテナを作成と起動をします。

    • 下記実行例ではDockerイメージが未ダウンロードの状態でコマンドを実行しています。 そのためDockerコンテナが作成される前に、Dockerイメージのダウンロードが先に実行されています。
    実行例:Dockerコンテナ作成(+起動)
    docker-compose up -d
    実行結果例
    [+] Running 8/8
    ✔ web 7 layers [⣿⣿⣿⣿⣿⣿⣿]      0B/0B      Pulled   10.1s
    ✔ 360eba32fa65 Pull complete                          1.3s
    ✔ c5903f3678a7 Pull complete                          1.7s
    ✔ 27e923fb52d3 Pull complete                          0.6s
    ✔ 72de7d1ce3a4 Pull complete                          1.1s
    ✔ 94f34d60e454 Pull complete                          2.1s
    ✔ e42dcfe1730b Pull complete                          1.9s
    ✔ 907d1bb4e931 Pull complete                          2.3s
    [+] Running 2/2
    ✔ Network hello_default  Created                      0.1s
    ✔ Container web-1  Started                      0.1s
    
    
  4. ブラウザで「http://localhost:9000/」にアクセスすると以下のようなページが表示されNginxサーバが起動していることが確認できます。

    Nginx Welcome

Dockerコンテナ一覧確認

  1. docker-compmose.ymlで作成されたコンテナの一覧を確認するためには、docker-compose.ymlが格納されているディレクトリで以下のコマンドを利用します。

    コマンド書式:Dockerコンテナ一覧確認
    docker-compose ps [オプション] [サービス名...]
  2. Dockerコンテナ一覧確認コマンドを実行すると以下のとおりコンテナの起動状態が一覧で確認できます。

    実行例:Dockerコンテナ一覧確認
    docker-compose ps
    実行結果例
    NAME          IMAGE          COMMAND                                          SERVICE   CREATED         STATUS         PORTS
    web-1   nginx:latest   "/docker-entrypoint.sh nginx -g 'daemon off;'"   web       5 minutes ago   Up 5 minutes   0.0.0.0:9000->80/tcp, :::9000->80/tcp  
    
    

Dockerコンテナプロセス確認

  1. docker-compmose.ymlで作成されたコンテナのプロセスを確認するためには、docker-compose.ymlが格納されているディレクトリで以下のコマンドを利用します。

    コマンド書式:Dockerコンテナプロセス確認
    docker-compose top [サービス名...]
  2. Dockerコンテナプロセス確認コマンドを実行すると以下のとおりコンテナの起動状態が一覧で確認できます。

    実行例:Dockerコンテナプロセス確認
    docker-compose top
    実行結果例
    web-1
    UID    PID    PPID   C    STIME   TTY   TIME       CMD
    root   2958   2916   6    16:02   ?     00:00:00   nginx: master process nginx -g daemon off;
    101    3040   2958   0    16:02   ?     00:00:00   nginx: worker process
    101    3041   2958   0    16:02   ?     00:00:00   nginx: worker process
    
    

Dockerコンテナ起動

  1. docker-compmose.ymlで作成されたコンテナのプロセスを起動するためには、docker-compose.ymlが格納されているディレクトリで以下のコマンドを利用します。

    コマンド書式:Dockerコンテナ起動
    docker-compose start [サービス名...]
  2. 以下のとおり実行するとdocker-compose.ymlによって作成されたコンテナが起動します。

    実行例:Dockerコンテナ起動
    docker-compose start
    実行結果例
    [+] Running 1/1
    ✔ Container web-1  Started                    0.9s
    
    

Dockerコンテナ停止

  1. docker-compmose.ymlで作成されたコンテナを停止するためには、docker-compose.ymlが格納されているディレクトリで以下のコマンドを利用します。

    コマンド書式:Dockerコンテナ停止
    docker-compose stop [オプション] [サービス名...]
  2. 以下のとおり実行するとdocker-compose.ymlによって作成されたコンテナが停止します。

    実行例:Dockerコンテナ停止
    docker-compose stop
    実行結果例
    [+] Stopping 1/1
    ✔ Container web-1  Stopped                    0.3s
    
    

Dockerコンテナ再起動

  1. docker-compmose.ymlで作成されたコンテナを再起動するためには、docker-compose.ymlが格納されているディレクトリで以下のコマンドを利用します。

    コマンド書式:Dockerコンテナ再起動
    docker-compose restart [オプション] [サービス名...]
  2. 以下のとおり実行するとdocker-compose.ymlによって作成されたコンテナが再起動します。

    実行例:Dockerコンテナ再起動
    docker-compose stop
    実行例:Dockerコンテナ再起動
    docker-compose restart
    実行結果例
    [+] Restarting 1/1
    ✔ Container web-1  Started                    1.2s
    
    

Dockerコンテナ削除

  1. docker-compmose.ymlで作成されたコンテナを(起動中であれば停止してた上で)削除するためには、docker-compose.ymlが格納されているディレクトリで以下のコマンドを利用します。

    コマンド書式:Dockerコンテナ再起動
    docker-compose down [オプション] [サービス名...]
    オプション 説明
    --remove-orphans docker-compose.ymlで定義していないサービス用のコンテナも削除します。
  2. 以下のとおり実行するとdocker-compose.ymlによって作成されたコンテナが削除されます。

    実行例:Dockerコンテナ削除
    docker-compose down
    実行結果例
    [+] Running 2/2
    ✔ Container web-1  Removed                    0.3s
    ✔ Network hello_default  Removed                    0.1s
    
    
  3. 削除する前にdocker-compose.ymlの内容をコンテナ作成時から変更してしまった状態で実行すると、以下のとおりコンテナ削除に失敗してしまう恐れがありますので気をつける必要があります。

    実行結果例(コンテナ削除失敗)
    validating /directory/to/hello/docker-compose.yml: xxxxxxxx
    
    
    Note

    その場合は以下のとおり--remove-orphansオプションをつけると削除できる可能性があります。

    実行例:Dockerコンテナ削除
    docker-compose down --remove-orphans

参考情報

docker/compose: Define and run multi-container applications with Docker
Define and run multi-container applications with Docker - docker/compose: Define and run multi-container applications with Docker
github.com
リンクカード
Overview of docker compose CLI | Docker Docs
Overview of the Docker Compose CLI
docs.docker.com
リンクカード
Overview | Docker Docs
Find the latest recommended version of the Docker Compose file format for defining multi-container applications.
docs.docker.com
リンクカード

コメント


Palette Codeなるべく丁寧にプログラミング関連技術を解説するサイト