Docker Compose 基本コマンド操作
- チートシート
- 前提条件
- Docker Composeとは
- Docker Composeをインストールする
- Docker Composeをアンインストールする
- はじめてのDocker Compose
- docker-compose.ymlの解説
- 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コンテナ作成(+起動)------
## コマンド書式
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
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基本用語とDockerコマンドを理解している人向けに説明しています。
Docker とは?Dockerとはコンテナ仮想化技術を利用してアプリケーションやサーバ環境などをパッケージ化するツールで、アプリケーションの実行依存関係を一つのコンテナにまとめて隔離された環境で実行できます。palette-code.comDocker 基本コマンド操作Dockerイメージ/コンテナの基本操作(取得・作成・削除、起動・停止)を中心に最低限覚えておいておくべきコマンド11つを実例を踏まえて解説します。palette-code.com -
Docker実行環境を構築したい方は場合は以下のページを参考にしてください。
Docker インストール手順Dockerはコンテナ仮想化技術を利用して各種環境をパッケージ化するツールです。ここではOS毎(Windows、Mac、Linux)にはDockerをインストールする方法について解説します。palette-code.com -
本ページ内容は以下で動作確認を行っています。
項目 値 Docker 20.10.3 Docker Compose 2.21.0
Docker Composeとは
-
Docker Composeとは、複数のDockerコンテナを一括で定義し起動/停止を管理するためのツールです。
-
以下のようなYAML形式の設定ファイル(docker-compose.yml)を利用してDockerコンテナを管理します。
docker-compose.ymlversion: '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がインストール済である必要があります。
Dockerが未インストールであれば、まずは先にDockerをインストールしておいてください。Docker インストール手順Dockerはコンテナ仮想化技術を利用して各種環境をパッケージ化するツールです。ここではOS毎(Windows、Mac、Linux)にはDockerをインストールする方法について解説します。palette-code.com -
ここではLinux環境向けにDocker Composeのインストール手順について解説します。
NoteWindowsおよびmacOSのデスクトップ環境における「Docker Desktop」には「Docker Compose」が含まれているため別途インストール作業は不要です。
- Linux(RedHat系)
動作確認環境
- Amazon Linux 2
- Docker 20.10.23
- Docker Compose 2.21.0
手順内容
-
まずは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
部分については、インストールしたいバージョン番号を指定してください。
指定可能なバージョン番号はこちらから確認可能です。Noteuname -s
は実行中のOS名を出力します。
uname -m
は実行中のアーキテクチャ(32ビットまたは64ビット)を出力します。
-o /usr/local/bin/docker-compose
でダウンロードファイルの保存先を指定しています。 -
/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
-
つづいて「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
-
最後に「Docker Compose」のコマンドが利用できるかを確認します。
Docker Composeバージョン確認docker-compose version
実行結果Docker Compose version v2.21.0
-
以上が「Docker Compose」のインストール手順になります。
Docker Composeをアンインストールする
-
本章ではDocker Composeのアンインストール手順について解説します。
-
ここではLinux環境向けにDocker Composeのアンインストール手順について解説します。
NoteWindowsおよびmacOSのデスクトップ環境における「Docker Desktop」には「Docker Compose」が含まれているため、
もし「Docker Compose」をアンインストールしたい場合は「Docker Desktop」本体をアンインストールしてください。
- Linux(RedHat系)
動作確認環境
- Amazon Linux 2
- Docker 20.10.23
- Docker Compose 2.21.0
手順内容
-
以下のコマンドを実行してダウンロードしたDocker Compose本体を削除すればアンインストール完了です。
Docker Composeアンインストールsudo rm -rf /usr/local/bin/docker-compose
はじめてのDocker Compose
-
docker-compose.yml
の記載ルールやdocker-compose
コマンドの解説解説に入る前に、まずは実際にdocker-compose.ymlからDockerコンテナ作成する流れを説明します。 -
まずは事前準備で す。
docker-compose.yml
を作成し任意のディレクトリに配置します。
カレントディレクトリはdocker-compose.yml
が格納されているディレクトリに変更しておいてください。Note任意のディレクトリとは述べましたが、docker-compose.yml
以外に不要なファイルが格納されていないほうが望ましいです。docker-compose.ymlversion: '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'
-
つづいて以下のとおりコマンドを実行すると、
httpd
イメージとnginx
イメージ(イメージが未ダウンロードであればイメージダウンロードが実行される)から2つのコンテナが作成されます。Notehttpd
(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
-
コンテナが正しく作成され起動しているかは以下のコマンドの実行結果で確認できます。
- 以下では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
-
ブラウザから「http://localhost:9000/」と「http://localhost:9100/」にアクセスすると、以下のとおり2つのWEBサーバが起動できていることが確認できます。
-
以上がdocker-compose.ymlからDockerコンテナ作成する流れの説明になります。
docker-compose.ymlの解説
-
本章ではdocker-compose.ymlに記載できる要素について解説していきます。
Note紹介する内容は基本的なものに絞っています。全ての内容を把握したい場合は、本ページ下部の参考情報より公式リファレンスを参照してください。
トップレベル要素
- version要素
version要素は
docker-compose.yml
のファイルフォーマットバージョンを指定します。
具体的なフォーマットバージョン番号と利用可能なDokcerバージョンの対応表は以下で確認ができます。Compose file version 3 reference | Docker DocsFind a quick reference for Docker Compose version 3, including Docker Engine compatibility, memory limitations, and more.docs.docker.com- services要素
services要素にはコンテナの情報を記載します。まず子要素に作成するコンテナの名称を定義します。
下記例の場合はweb-server1
とweb-server2
が作成するコンテナの名称になります。docker-compose.ymlversion: "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つ下の階層が実行するコンテナの定義です。下記例の場合
image
、restart
、ports
要素が該当します。docker-compose.ymlversion: "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コンテナ作成(+起動)
-
Docker Composeを使ってDockerコンテナを作成する場合は、カレントディレクトリに
docker-compose.yml
を予め作成しておいた上で、以下のコマンドを利用します。もし対象のDockerイメージが未ダウンロードの場合はコンテナ作成前に自動でイメージダウンロードされます。コマンド書式:Dockerコンテナ作成(+起動)docker-compose up [オプション] [サービス名...]
オプション 説明 --build イメージビルドを必ず実行するようにします。 -d コンテナをバックグラウンドで実行します。 -
例えばWEBサーバ(Nginx)を待ち受けポートを9000に指定して起動する場合、まずは以下のような
docker-compose.yml
をカレントディ レクトリに配置します。docker-compose.ymlversion: '3.8' services: web: image: nginx:latest ports: - 9000:80
-
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
-
ブラウザで「http://localhost:9000/」にアクセスすると以下のようなページが表示されNginxサーバが起動していることが確認できます。
Dockerコンテナ一覧確認
-
docker-compmose.ymlで作成されたコンテナの一覧を確認するためには、
docker-compose.yml
が格納されているディレクトリで以下のコマンドを利用します。コマンド書式:Dockerコンテナ一覧確認docker-compose ps [オプション] [サービス名...]
-
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コンテナプロセス確認
-
docker-compmose.ymlで作成されたコンテナのプロセスを確認するためには、
docker-compose.yml
が格納されているディレクトリで以下のコマンドを利用します。コマンド書式:Dockerコンテナプロセス確認docker-compose top [サービス名...]
-
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コンテナ起動
-
docker-compmose.ymlで作成されたコンテナのプロセスを起動するためには、
docker-compose.yml
が格納されているディレクトリで以下のコマンドを利用します。コマンド書式:Dockerコンテナ起動docker-compose start [サービス名...]
-
以下のとおり実行するとdocker-compose.ymlによって作成されたコンテナが起動します。
実行例:Dockerコンテナ起動docker-compose start
実行結果例[+] Running 1/1 ✔ Container web-1 Started 0.9s
Dockerコンテナ停止
-
docker-compmose.ymlで作成されたコンテナを停止するためには、
docker-compose.yml
が格納されているディレクトリで以下のコマンドを利用します。コマンド書式:Dockerコン テナ停止docker-compose stop [オプション] [サービス名...]
-
以下のとおり実行するとdocker-compose.ymlによって作成されたコンテナが停止します。
実行例:Dockerコンテナ停止docker-compose stop
実行結果例[+] Stopping 1/1 ✔ Container web-1 Stopped 0.3s
Dockerコンテナ再起動
-
docker-compmose.ymlで作成されたコンテナを再起動するためには、
docker-compose.yml
が格納されているディレクトリで以下のコマンドを利用します。コマンド書式:Dockerコンテナ再起動docker-compose restart [オプション] [サービス名...]
-
以下のとおり実行するとdocker-compose.ymlによって作成されたコンテナが再起動します。
実行例:Dockerコンテナ再起動docker-compose stop
実行例:Dockerコンテナ再起動docker-compose restart
実行結果例[+] Restarting 1/1 ✔ Container web-1 Started 1.2s
Dockerコンテナ削除
-
docker-compmose.ymlで作成されたコンテナを(起動中であれば停止してた上で)削除するためには、
docker-compose.yml
が格納されているディレクトリで以下のコマンドを利用します。コマンド書式:Dockerコンテナ再起動docker-compose down [オプション] [サービス名...]
オプション 説明 --remove-orphans docker-compose.ymlで定義していないサービス用のコンテナも削除します。 -
以下のとおり実行するとdocker-compose.ymlによって作成されたコンテナが削除されます。
実行例:Dockerコンテナ削除docker-compose down
実行結果例[+] Running 2/2 ✔ Container web-1 Removed 0.3s ✔ Network hello_default Removed 0.1s
-
削除する前に
docker-compose.yml
の内容をコンテナ作成時から変更してしまった状態で実行すると、以下のとおりコンテナ削除に失敗してしまう恐れがありますので気をつける必要があります。実行結果例(コンテナ削除失敗)validating /directory/to/hello/docker-compose.yml: xxxxxxxx
Noteその場合は以下のとおり
--remove-orphans
オプションをつけると削除できる可能性があります。実行例:Dockerコンテナ削除docker-compose down --remove-orphans
コメント