English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Composeは、多容器Dockerアプリケーションの定義と実行に使用されるツールです。Composeを使用すると、YMLファイルでアプリケーションが必要とするすべてのサービスを設定できます。その後、1つのコマンドでYMLファイルの設定からすべてのサービスを生成および起動できます。
Composeの3つのステップ:
Dockerfileを使用してアプリケーションの環境を定義します。
Dockerを使用して-compose.ymlは、アプリケーションを構成するサービスを定義し、それらが隔離された環境で一緒に実行できるようにします。
最後に、docker-compose up コマンドで整个アプリケーションを起動および実行します。
docker-以下は、compose.ymlの設定例です(設定パラメータは以下を参照してください):
# yaml 設定例 version: '3' services: web: build: . ports: - "5000:5000" volumes: - .:/code - logvolume01:/var/log links: - redis redis: image: redis volumes: logvolume01: {}
Linux
Linux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:Linuxでは、Githubからバイナリパッケージをダウンロードして使用することができます。最新版のリリースURLはこちらです://L "https:/docker/$ docker/github.com。
https:
以下のコマンドを実行してDocker Composeの現在の安定版をダウンロードします: -$ sudo curl//L "https:/docker/$ docker/github.com/releases/1.24.1/docker-$ docker-s) -download-s) -$(uname -m)" /usr/local/bin/docker-$ docker
o 1.24.1。
他のComposeのバージョンをインストールするには、以下を置き換えてください:
二進数ファイルに実行権限を適用します: +$ sudo chmod /usr/local/bin/docker-$ docker
x
シンボリックリンクを作成します: -s /usr/local/bin/docker-$ docker /usr/bin/docker-$ docker
$ sudo ln
インストールが成功したか確認してください:-$ docker --version compose-cker 1.24.1compose version 4667896, build
b注意-:alpine用の以下の依存パッケージが必要です:py-pip、python-dev、libffi-dev、openssl-dev、gcc、libc
MacのDockerデスクトップ版とDockerToolboxにはComposeと他のDockerアプリケーションが含まれていますので、MacユーザーはComposeを個別にインストールする必要はありません。Dockerのインストール手順はこちらを参照してください。 MacOS Docker インストール。
WindowsのDockerデスクトップ版とDockerToolboxにはComposeと他のDockerアプリケーションが含まれていますので、WindowsユーザーはComposeを個別にインストールする必要はありません。Dockerのインストール手順はこちらを参照してください。 Windows Docker インストール。
テストディレクトリを作成します:
$ mkdir composetest $ cd composetest
テストディレクトリに app.py という名前のファイルを作成し、以下の内容をコピー&ペーストしてください:
import time import redis from flask import Flask app = Flask(__name__) cache = redis.Redis(host='redis', port=6379) def get_hit_count(): retries = 5 while True: try: return cache.incr('hits') except redis.exceptions.ConnectionError as exc: if retries == 0: raise exc retries -= 1 time.sleep(0.5) @app.route('/') def hello(): count = get_hit_count() return 'Hello World! I have been seen {} times. '.format(count)
この例では、redisはアプリケーションネットワーク上のredisコンテナのホスト名であり、使用するポートは以下の通りです。 6379。
composetestディレクトリに、以下の内容のrequirements.txtファイルを作成してください。
flask redis
composetestディレクトリに、以下の内容のDockerfileファイルを作成してください。
FROM python:3.7-alpine WORKDIR /code ENV FLASK_APP app.py ENV FLASK_RUN_HOST 0.0.0.0 RUN apk add --no-cache gcc musl-dev linux-headers COPY requirements.txt requirements.txt RUN pip install -r requirements.txt COPY . . CMD ["flask", "run"]
Dockerfileの内容説明:
FROM python:3.7-alpine: Pythonから 3.7 イメージがビルドを開始します。
WORKDIR /code: ワークディレクトリを設定します。 /code。
ENV FLASK_APP app.py ENV FLASK_RUN_HOST 0.0.0.0
flaskコマンドを使用する環境変数を設定します。
RUN apk add --no-cache gcc musl-dev linux-headers: gccをインストールし、MarkupSafeやSQLAlchemyなどのPythonパッケージがコンパイル加速できるようにします。
COPY requirements.txt requirements.txt RUN pip install -r requirements.txt
requirements.txtをコピーし、Pythonの依存関係をインストールします。
COPY . .: .プロジェクトの現在のディレクトリを.workディレクトリにコピーします。
CMD ["flask", "run"]: コンテナはデフォルトの実行コマンドとして以下を提供します:flask run。
テストディレクトリにdockerを作成してください-compose.ymlのファイル、以下の内容を貼り付けてください:
この Compose ファイルは 2 つのサービスを定義しています:web と redis。
web:この web サービスは Dockerfile の現在のディレクトリからビルドされたイメージを使用しています。その後、コンテナとホストを暴露されたポートにバインドします。 5000。この例のサービスは Flask Web サーバーのデフォルトポートを使用しています。 5000 。
redis:この redis サービスは Docker Hub のパブリック Redis イメージを使用しています。
テストディレクトリで以下のコマンドを実行してアプリケーションを起動します:
docker-compose up
バックグラウンドでサービスを実行したい場合は、以下を追加できます: -d パラメータ:
docker-compose up -d
指定されたこの yml が従う compose のどのバージョンで定義されたかを指定します。
ビルドイメージのコンテキストパスを指定します:
例えば webapp サービスは、コンテキストパス . として指定されます。/dir/Dockerfile でビルドされたイメージ:
version: "3.7" services: webapp: build: ./dir
または、コンテキストパスが指定されたオブジェクトとして、オプションの Dockerfile と args:
version: "3.7" services: webapp: build: context: ./dir dockerfile: Dockerfile-alternate args: buildno: 1 labels: - "com.example.description=Accounting webapp" - "com.example.department=Finance" - "com.example.label-with-empty-value" target: prod
context:コンテキストパス。
dockerfile:ビルドイメージの Dockerfile ファイル名を指定します。
args:ビルドパラメータを追加します。これはビルドプロセス中にのみアクセスできる環境変数です。
labels:ビルドイメージのタグを設定します。
target:マルチレイヤー構築、構築するレイヤーを指定できます。
コンテナが持つホストのカーネル機能を追加または削除します。
cap_add: - ALL # すべての権限を開く cap_drop: - SYS_PTRACE # ptrace権限を閉じる
コンテナに親 cgroup グループを指定することは、そのグループのリソース制限を継承することを意味します。
cgroup_parent: m-executor-abcd
コンテナ起動のデフォルトコマンドをオーバーライドします。
command: ["bundle", "exec", "thin", "-p", "3000"]
カスタムコンテナ名を指定し、デフォルトの名前を使用しないことを指定します。
container_name: my-web-container
依存関係の設定。
docker-compose up :依存関係の順序でサービスを起動します。以下の例では、まず db と redis を起動し、その後 web を起動します。
docker-compose up SERVICE :SERVICE の依存関係を自動的に含めます。以下の例では、docker-compose up web は、db と redis を作成および起動することも行います。
docker-compose stop :依存関係の順序でサービスを停止します。以下の例では、web が db と redis 之前に停止します。
version: "3.7" services: web: build: . depends_on: - db - redis redis: image: redis db: image: postgres
注意:web サービスは redis db が完全に起動する前に待機しません。
サービスのデプロイと実行に関連する設定を指定します。swarm モードでのみ有効です。
version: "3.7" services: redis: image: redis:alpine deploy: mode:replicated replicas: 6 endpoint_mode: dnsrr labels: description: "This redis service label" resources: limits: cpus: '0.50' memory: 50M reservations: cpus: '0.25' memory: 20M restart_policy: condition: on-failure delay: 5s max_attempts: 3 window: 120s
選択可能なパラメータ:
endpoint_mode:クラスタサービスへのアクセス方法。
endpoint_mode: vip # Docker クラスタサービスの外部の仮想 IP。すべてのリクエストはこの仮想 IP を通じてクラスタサービス内のマシンに到達します。 endpoint_mode: dnsrr # DNS ループ(DNSRR)。すべてのリクエストは自動的にループして、クラスタ IP リストの 1 つの IP アドレスを取得します。
labels:サービス上にタグを設定します。コンテナの labels(deploy と同階層の設定)を使用して、deploy 下の labels を上書きすることができます。
mode:指定されたサービスが提供するモード。
replicated:コピーサービス、指定されたサービスをクラスタのマシンにコピーします。
global:グローバルサービス、サービスはクラスタの各ノードにデプロイされます。
図解:以下の図で黄色いボックスは replicated モードの実行状況、灰色のボックスは global モードの実行状況です。
replicas:mode replicated 時、このパラメータを使用して具体的な実行ノード数を設定する必要があります。
resources:サーバー資源使用の制限の設定、例えば上記の例では、redis クラスタの実行が必要な CPU百分率和メモリ使用量を設定します。リソースの過度な使用を避け、異常を発生させないようにします。
restart_policy:コンテナの退出時にコンテナを再起動する方法の設定。
condition:オプションとして none、on-failure または any(デフォルト値:any)。
delay:再起動までの時間の設定(デフォルト値:0)。
max_attempts:再起動を試みる回数、その回数を超えた場合、再試行しません(デフォルト値:常に再試行)。
window:コンテナの再起動タイムアウトの設定(デフォルト値:0)。
rollback_config:更新失敗時のサービスのロールバック方法の設定。
parallelism:一度にロールバックするコンテナの数。0に設定された場合、全てのコンテナが同時にロールバックされます。
delay:各コンテナグループのロールバック間に待つ時間(デフォルト:0s)。
failure_action:ロールバックが失敗した場合の対応方法。そのうちの continue または pause(デフォルト pause)。
monitor:各コンテナの更新後、失敗した時間を観察し続ける(ns|us|ms|s|m|h)(デフォルト:0s)。
max_failure_ratio:ロールバック中に許容できる故障率(デフォルト:0)。
order:リバース中の操作順序。stop-first(シリアルリバースロールバック)、または start-first(並列ロールバック)(デフォルト stop-first )。
update_config:サービスの更新方法の設定、特にサービスのロールバック更新に役立ちます。
parallelism:一度に更新するコンテナの数。
delay:一組のコンテナの更新間に待つ時間。
failure_action:更新が失敗した場合の対応方法。そのうちの continue、rollback、または pause(デフォルト:pause)。
monitor:各コンテナの更新後、失敗した時間を観察し続ける(ns|us|ms|s|m|h)(デフォルト:0s)。
max_failure_ratio:更新中に許容できるエラーレート。
order:リバース中の操作順序。stop-first(シリアルリバースロールバック)、または start-first(並列リバースロールバック)(デフォルトstop-first)。
注:V3.4 およびそれ以降のバージョン。
デバイスマッピングリストを指定します。
devices: - "/dev/ttyUSB0:/dev/ttyUSB0"
カスタム DNS サーバーを設定します。単一の値またはリストの複数の値が可能です。
dns: 8.8.8.8 dns: - 8.8.8.8 - 9.9.9.9
カスタム DNS 検索ドメインを設定します。単一の値またはリストが可能です。
dns_search: example.com dns_search: - dc1.example.com - dc2.example.com
コンテナのデフォルトの entrypoint を上書きします。
entrypoint: /code/entrypoint.sh
以下の形式でも可能です:
entrypoint: - php - -d - zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so - -d - memory_limit=-1 - vendor/bin/phpunit
ファイルから環境変数を追加します。単一の値またはリストの複数の値が可能です。
env_file: .env
リスト形式でも可能です:
env_file: - ./common.env - ./apps/web.env - /opt/secrets.env
環境変数を追加します。配列や辞書、任意のボルン値を使用できます。ボルン値は引号で囲む必要があります。これにより、YML パーサーがそれを True または False として解析しないようにします。
environment: RACK_ENV: development SHOW: 'true'
ポートを暴露しますが、ホストマシンにマッピングされず、接続するサービスのみがアクセスできます。
内部ポートを引数として指定することができます:
expose: - "3000" - "8000"
ホスト名のマッピングを追加します。docker client に似ています。 --add-host。
extra_hosts: - "somehost:162.242.195.82" - "otherhost:50.31.209.229"
上記は、このサービスの内部コンテナ内で /etc/hosts が IP アドレスとホスト名のマッピング関係を作成します:
162.242.195.82 somehost 50.31.209.229 otherhost
Dockerサービスが健康に動作しているかを検出するために使用されます。
healthcheck: test: ["CMD", "curl", "-f", "http://localhost"] # 検出プログラムを設定 interval: 1m30s # 検出間隔を設定 timeout: 10s # 検出タイムアウト時間を設定 retries: 3 # リトライ回数を設定 start_period: 40s # 起動後、何秒後に検出プログラムを開始します
コンテナが実行するイメージを指定します。以下の形式が使用できます:
image: redis image: ubuntu:14.04 image: tutum/influxdb image: example-registry.com:4000/postgresql image: a4bc65fd # イメージID
サービスのログ記録設定。
driver:サービスコンテナのログ記録ドライバーを指定します。デフォルト値はjsonです-file。以下の3つのオプションがあります
driver: "json"-file" driver: "syslog" driver: "none"
ただし json-file ドライバーの下では、以下のパラメータを使用して、ログの数とサイズを制限できます。
logging: driver: json-file options: max-size: "200k" # 单个文件大小为200k max-file: "10" # 最多10個文件
ファイルの制限上限に達すると、古いファイルが自動的に削除されます。
syslog ドライバーの下では、syslogを使用できます。-address はログ受信先の指定です。
logging: driver: syslog options: syslog-address: "tcp://192.168.0.42:123"
ネットワークモードを設定します。
network_mode: "bridge" network_mode: "host" network_mode: "none" network_mode: "service:[service name]" network_mode: "container:[container name/id]"
networks
コンテナのネットワーク接続を設定し、top level networks 下のエントリを参照します。
services: some-service: networks: some-network: aliases: - alias1 other-network: aliases: - alias2 networks: some-network: # Use a custom driver driver: custom-driver-1 other-network: # Use a custom driver which takes special options driver: custom-driver-2
aliases :同じネットワーク上の他のコンテナは、サービス名またはこの別名を使用して対応するコンテナのサービスに接続できます。
no:デフォルトの再起動ポリシーで、どんな状況でもコンテナは再起動しません。
always:コンテナは常に再起動します。
on-failure:コンテナが異常で退出した場合(退出状態が0でない場合)にのみ、コンテナを再起動します。
unless-stopped:コンテナが退出した場合、常にコンテナを再起動しますが、Dockerデーモンが起動時にすでに停止していたコンテナは除きます。
restart: "no" restart: always restart: on-failure restart: unless-stopped
注:swarm クラスターモードでは、restart_policyを使用してください。
パスワードなどの機密情報を保存するための、例えば:
version: "3.1" services: mysql: image: mysql environment: MYSQL_ROOT_PASSWORD_FILE: /run/secrets/my_secret secrets: - my_secret secrets: my_secret: file: ./my_secret.txt
コンテナのデフォルトのスキーマタグを変更します。
security-opt: - label:user:USER # コンテナのユーザータグを設定 - label:role:ROLE # コンテナのロールタグを設定 - label:type:TYPE # コンテナのセキュリティポリシータグを設定 - label:level:LEVEL # コンテナのセキュリティレベルタグを設定
コンテナがSIGTERM(または任何 stop_signal のシグナル)を処理できない場合、どれくらいの時間を待ってからSIGKILLシグナルを送信してコンテナを閉じるか指定します。
stop_grace_period: 1s # 待機 1 秒 stop_grace_period: 1m30s # 待機 1 分 30 秒
デフォルトの待機時間は 10 秒。
コンテナの停止シグナルを設定します。デフォルトではSIGTERMを使用します。
以下の例では、SIGUSRを使用します。1 コンテナを停止するためのシグナル SIGTERM を代わりに使用します。
stop_signal: SIGUSR1
コンテナ内のカーネルパラメータを設定します。配列または辞書形式で使用できます。
sysctls: net.core.somaxconn: 1024 net.ipv4.tcp_syncookies: 0 sysctls: - net.core.somaxconn=1024 - net.ipv4.tcp_syncookies=0
コンテナ内に一時ファイルシステムをインストールします。単一の値またはリストの複数の値です。
tmpfs: /run tmpfs: - /run - /tmp
デフォルトの ulimit をオーバーライドします。
ulimits: nproc: 65535 nofile: soft: 20000 hard: 40000
ホストのデータボリュームまたはファイルをコンテナにマウントします。
version: "3.7" services: db: image: postgres:latest volumes: - "/localhost/postgres.sock:/var/run/postgres/postgres.sock" - "/localhost/data:/var/lib/postgresql/data"