Docker docker-compose

1. docker-composeの概要

docker-composedokcer公式のオーケストレーションツールとして、シンプルなテンプレートファイルを作成することで、dockerコンテナーベースのアプリケーションクラスターをすばやく作成および管理できますdockerコンテナクラスタの迅速なオーケストレーションを実現します。Dockerfileテンプレートファイルを使用すると、ユーザーが個別のアプリケーションコンテナーを簡単に定義できることがわかります。ただし、日常業務では、特定のタスクを完了するために複数のコンテナが互いに連携する必要がある状況に遭遇することがよくあります。たとえば、Webプロジェクトを実装するには、webサーバーコンテナー自体に加えて、バックエンドデータベースサービスコンテナーを追加し、さらに負荷分散コンテナーを含める必要がある場合があります。
    そして、Composeはそのようなニーズを満たすことができ、ユーザーは個別のdocker-compose.ymlテンプレートファイルを介してYAML格式関連するアプリケーションコンテナーのセットをプロジェクトとして定義できますproject

Composeには2つの重要な概念があります。

1)サービスサービス:アプリケーションコンテナーには、同じイメージを実行する複数のコンテナーインスタンスを実際に含めることができます。
 2)プロジェクト:docker-compose.ymlファイルで定義された、関連付けられたアプリケーションコンテナーのグループで構成される完成したビジネスユニット。

2. docker-composeインストール

Docker-composeバイナリファイルをダウンロードして実行権限を追加する

[root@docker ~]# wget https://github.com/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m`- O /usr/local/bin/docker-compose
[root@docker ~]# chmod +x /usr/local/bin/docker-compose
[root@docker ~]# docker-compose --version
docker-compose version
docker-compose version 1.23.2, build 1110ad01
docker-py version: 3.6.0
CPython version: 3.6.7
OpenSSL version: OpenSSL 1.1.0f  25 May 2017

3.作成コマンド

以下のためにCompose、ほとんどのコマンドの目的は、プロジェクト自体のいずれかになります、それはまた、サービスまたはコンテナプロジェクトとして指定することができます。特別な説明がない場合、コマンドオブジェクトはプロジェクトになります。つまり、プロジェクト内のすべてのサービスがコマンドの影響を受けます。docker-composeコマンドの基本的な形式は次のとおりです。

Usage:
  docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
  docker-compose -h|--help

Options:
  -f, --file FILE             指定使用的Compose模板文件,默认为docker-compose.yml,可多次指定;                        
  -p, --project-name NAME     指定项目名称,默认将使用所在目录名称作为项目名 ;                           
  --verbose                   输出更多调试信息;

  -v, --version               打印版本信息;

Commands:
  build              构建项目中的服务容器
  help               获得一个命令的帮助
  images             列出所有镜像
  kill               通过发送SIGKILL信号来强制停止服务容器
  logs               查看服务器容器的输出
  pause              暂停一个服务容器
  port               打印某个容器的端口所映射的公共端口
  ps                 列出项目中目前的所有容器
  pull               拉取服务依赖的镜像
  push               推送服务依赖的镜像
  restart            重启项目中的服务
  rm                 删除所有的服务器容器(停止状态中的)
  run                在指定服务上执行一个命令
  scale              设置指定服务运行的容器个数
  start              启动已经存在的服务容器
  stop               停止已经处于运行状态的容器,但不删除它
  top                展示运行的进程
  unpause            恢复处于暂停状态中的服务
  up                 自动完成包括构建镜像、创建服务、启动服务并关联服务相关容器的一系列操作
  version            打印docker-compose的版本信息 

4.テンプレートファイルを作成する

テンプレートファイルは使用Composeの中心あり、多くのデザインキーワードキーワードがあります。デフォルトのテンプレートファイル名はdocker-compose.ymlで、形式はYAMLformatです。例:

version: "2"
service:
    webapp:
        image: examplses/web
        ports:
            - "80:80"
        volumes:
            - "/data"

各サービスはimagebuild必要なイメージまたはコマンドを指定して、イメージをDockerfile自動的に構築および生成する必要があることに注意してください)。build命令を使用するDockerfile、で設定されたオプション(例:CMD、EXPOSE、VOLUME、ENVなど)は、docker-compose.yml再設定せずに自動的に取得されます。テンプレートの主な手順と機能は次のとおりです。

1)ビルド手順

指定したDockerfileフォルダーのパスは、絶対パスまたは相対docker-compose.ymlファイルパスにすることができます。Composeそれを使用してこのイメージを自動的に構築し、次にこのイメージを使用します。

build: /path/to/build/dir

2)cap_add、cap_drop

コンテナcapacity割り当てのカーネル機能を指定しますたとえば、コンテナにすべての機能を持たせるには、次のように指定できます。

cap_add:
    - ALL 

削除する機能NET_ADMINは、次のように指定できます。

cap_drop:
    - NET_ADMIN

3)コマンド

コンテナーの開始後に実行されるデフォルトのコマンドをオーバーライドします。

command: echo "hello world"

4)cgroup_parent

親cgroupグループを指定すると、グループのリソース制限が継承されます。たとえば、cgroupグループは次のように作成さcgroups_1ます。

cgroup_parent: cgroups_1

5)container_name

コンテナ名を指定します。デフォルトでは、「プロジェクト名_サービス名_シリアル番号」の形式が使用されます。たとえば、次のとおりです。

container_name: docker-web-container
指定容器名称后,该服务将无法进行扩展,因为Docker不允许多个容器具有相同的名称。

6)デバイス

デバイスマッピング関係を指定します。次に例を示します。

devices:
    - "/dev/ttyUSB1:/dev/ttyUSB0"

7)dns

カスタムDNSサーバー。値またはリストを使用できます。次に例を示します。

dns: 8.8.8.8
dns:
    - 8.8.8.8
    - 114.114.114.114

DNS検索ドメインを構成します。値またはリストを使用できます。次に例を示します。

dns_search: example.com
dns_search:
    - domain1.example.com
    - domain2.example.com

9)dockerfile

必要に応じて、コンパイルされたイメージの追加のDockerfileファイルを指定します。これは、この命令で指定できます。たとえば、
この命令はイメージでは使用できません。そうでない場合、Composeは最終的なサービスイメージを生成する命令を認識しません。

dockerfile: Dockerfile-alternate

10)env_file

ファイルから環境変数を取得します。これは、個別のファイルパスまたはリストにすることができます。
作成テンプレートファイルがdocker-compose -f FILEで指定されている場合、env_file内の変数のパスはテンプレートファイルのパスに基づきます。変数の名前と環境ディレクティブの間に矛盾がある場合は、規則が優先され、後者が優先されます。

env_file: .env
env_file:
    - ./common.env
    - ./apps/web.env
    - ./opt/secrets.env
环境变量文件中每一行都必须符合格式,支持#开头的注释行:

11)環境

環境変数を設定します。配列または辞書形式を使用できます。指定された名前のみの変数は、Composeを実行しているホストの対応する変数の値を自動的に取得します。これを使用して、不要なデータの開示を防ぐことができます。たとえば、次のとおりです。

environment:
    RACK_ENV: development
    SESSION_SECRET
或者:
environment:
    - RACK_ENV=development
    - SESSION_SECRET

12)公開する

ポートは公開されていますが、ホストマシンにはマッピングされておらず、リンクされたサービスによるアクセスのみが許可されています。次のように、内部ポートのみをパラメータとして指定できます。

expose:
    - "3000"
    - "8000"

13)延長

他のテンプレートファイルに基づいて展開します。たとえば、次のように、すでにwebappサービスがあり、基本的なテンプレートファイルをcommon.ymlとして定義しています。

# common.yml
webapp:
    build: ./webapp
    environment:
        - DEBUG=false
        - SEND_EMAILS=false

新しいdevelopment.ymlファイルを記述し、common.ymlのwebappサービスを使用して展開します。

#development.yml
web:
    extends:
        file: common.yml
        service: webapp
    ports:
        - "8000:8000"
    links:
        - db
    environment:
        - DEBUG=true
db:
    image: postgres

development.ymlは、common.ymlのwebappサービスと環境変数の定義を自動的に継承します。extendsを使用するときは、次の点に注意してください。

1. AがBに依存し、BがCに依存し、CがAに依存するなど、循環依存を回避する

2. extendsは、リンクおよびvolume_fromで定義されたコンテナーおよびデータボリュームリソースを継承しません。

通常の状況では、基本テンプレートで共有できるミラー変数と環境変数のみを定義し、アプリケーション変数、リンク、データボリューム、およびその他の情報を拡張テンプレートで指定することをお勧めします。

docker-compose.ymlの外部コンテナー、またはComposeで管理されていない外部コンテナーへのリンク。パラメータの形式はリンクに似ています

external_links:
    - redis_1
    - project_db_1:mysql
    - project_db_1:postgresql

15)extra_hosts

Dockerの–add-hostパラメータと同様に、追加のホスト名マッピング情報を指定します。次に例を示します。

extra_hosts:
    - "googledns:8.8.8.8"
    - "dockerhub:52.1.157.61"

会在启动后的服务容器中/etc/hosts文件中添加以下2个条目:
8.8.8.8 googledns
52.1.157.61 dockerhub

16)イメージ

イメージ名またはイメージIDを指定します。イメージがローカルに存在しない場合、Composeはイメージをプルしようとします。

image: centos
image: nginx

17)ラベル

Dockerメタデータ情報をコンテナーに追加します。たとえば、コンテナに補助情報を追加できます。

labels:
    com.startupteam.description: "webapp for a startup team"
    com.startupteam.department: "devops department"
    com,startupteam.release: "rc3 for v1.0"

他のサービスのコンテナにリンクします。エイリアスとしてサービス名を使用します)、または「サービス名:サービスエイリアス」などの「サービス名:サービスエイリアス」を使用します)。

links:
    - db
    - db:database
    - redis
使用的别名会将自动在服务容器中的/etc/hosts里创建。例如:
172.17.2.186 db
172.17.2.186 database
172.17.2.187 redis
所连接容器中相应的环境变量也将创建

19)log_driver

Dockerの–log-driverパラメーターと同様に、ログドライバーのタイプを指定します。現在、3種類のログドライバーがサポートされています。

log_driver: "json-file"
log_driver: "syslog"
log_driver: "none"

20)log_opt

ログ駆動関連のパラメーター。たとえば、次のとおりです。

log_driver: "syslog"
log_opt:
    syslog-address: "tcp://192.168.0.42:123"

21)net

ネットワークモードを設定します。パラメーターは、Dockerクライアントの--netパラメーターに似ています。

net: "bridge"
net: "none"
net: "container:[name or id]"
net: "host"

22)pid

ホストシステムとプロセスの名前空間を共有します。コンテナー間、およびコンテナーとホストシステムの間のオプションを開き、プロセスIDによってアクセスおよび操作できます。

pid: "host"

23)ポート

ポート情報を公開します。「ホスト:コンテナー」形式を使用するか、コンテナーのポートを指定します。ホストはランダムにポートを選択します):

ports:
    - "3000"
    - "8000:8000"
    - "49100:22"
    - "127.0.0.1:8081:8081"

当使用"HOST:CONTAINER"格式来映射端口时,如果你使用的容器端口小于60并且没有放到引号里,可能会得到错误结果,因为YAML会自动解析xx:yy这种数字格式为60进制。为了避免这种问题的出现,建议数字串都用引号包括起来的字符串格式。

24)security_opt

コンテナテンプレートラベルのデフォルト属性を指定します)メカニズム(ユーザー、ロール、タイプ、レベルなど)。たとえば、構成ラベルのユーザー名とロール名は次のとおりです。

security_opt:
    - label:user:USER
    - label:role:ROLE

25)ulimits

コンテナのulimits制限値を指定します。たとえば、プロセスの最大数を65535に指定し、ファイルハンドル数にソフト制限20000を指定します。アプリケーションはいつでも変更でき、ハード制限を超えることはできません。

ulimits:
    nproc:65535
    nofile:
        soft:20000
        hard:40000

26)ボリューム

データボリュームのパス設定。ホストパスHOST:CONTAINER)を設定するか、アクセスモードHOST:CONTAINER:ro)を追加できます。この命令のパスは相対パスをサポートしています。たとえば、次のとおりです。

volumes:
    - /var/lib/mysql
    - cache/:/tmp/cache
    - ~/configs:/etc/configs/:ro

27)volumes_driver

新しいバージョンのDockerは、データボリューム用のプラグインドライバーをサポートしています。ユーザーはサードパーティのドライバーを使用してデータボリュームを作成し、名前を使用してそれにアクセスできます。このとき、volumes_driverを使用してドライブを指定できます。

volume_driver: mydriver

28)volumes_from

別のサービスまたはコンテナからデータボリュームをマウントします。

volumes_from:
    - service_name
    - container_name

おすすめ

転載: www.cnblogs.com/wangxiaopang/p/12712445.html