Docker docker-compose

1. Introduction à docker-compose

docker-composeEn dokcertant qu'outil d'orchestration officiel, il permet aux utilisateurs de créer et de gérer rapidement des dockerclusters d'applications basés sur des conteneurs en écrivant un fichier de modèle simple . Obtenez dockerune orchestration rapide des clusters de conteneurs. Nous savons que Dockerfileles fichiers de modèle permettent aux utilisateurs de définir facilement un conteneur d'application distinct. Cependant, dans le travail quotidien, nous rencontrons souvent des situations qui nécessitent plusieurs conteneurs pour coopérer les uns avec les autres pour effectuer une certaine tâche. Par exemple, pour implémenter un projet Web, en plus du webconteneur de serveur lui-même, il est souvent nécessaire d'ajouter un conteneur de service de base de données principal et même d'inclure des conteneurs d'équilibrage de charge.
    Et Compose peut répondre à ces besoins, il permet aux utilisateurs de définir un ensemble de conteneurs d'applications connexes en tant que projet via un docker-compose.ymlfichier de modèle distinct )YAML格式project

Il y a 2 concepts importants dans Compose:

1) Service service: un conteneur d'application peut en fait contenir plusieurs instances de conteneur exécutant la même image.
 2) Projet: une unité commerciale terminée composée d'un groupe de conteneurs d'applications associés, défini dans le fichier docker-compose.yml.

2. installation docker-compose

Téléchargez le fichier binaire Docker-compose et ajoutez l'autorisation d'exécution

[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. Commande de composition

Pour la Composeplupart des commandes, l'objet peut être soit le projet lui-même, soit le service ou le conteneur du projet. S'il n'y a pas d'explication particulière, l'objet de commande sera le projet, ce qui signifie que tous les services du projet seront affectés par la commande. docker-composeLe format de base de la commande est le suivant:

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. Composez le fichier modèle

Le fichier de modèle est Composeau cœur de l'utilisation , et il existe de nombreux mots clés de mots clés de conception. Le nom de fichier de modèle par défaut est docker-compose.ymlet le format est YAMLformat. Exemples:

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

Notez que chaque service doit automatiquement créer et générer une image en imagespécifiant l'image ou la buildcommande requise Dockerfile). Si l' buildinstruction est utilisée , Dockerfileles options définies dans (par exemple: CMD、EXPOSE、VOLUME、ENVetc.) seront automatiquement obtenues sans être docker-compose.ymlréactivées. Voici les principales instructions et fonctions du modèle:

1) instruction de construction

DockerfileLe chemin du dossier spécifié peut être un chemin absolu ou un docker-compose.ymlchemin de fichier relatif . ) L' Composeutilisera pour créer automatiquement cette image, puis utiliser cette image:

build: /path/to/build/dir

2) cap_add, cap_drop

Spécifie les capacités du noyau de l' capacityallocation de conteneur ). Par exemple, laisser au conteneur toutes les capacités peut être spécifié comme suit:

cap_add:
    - ALL 

La NET_ADMINpossibilité de suppression peut être spécifiée comme suit:

cap_drop:
    - NET_ADMIN

3) commande

Remplacez la commande par défaut exécutée après le démarrage du conteneur:

command: echo "hello world"

4) cgroup_parent

La spécification du groupe de groupes de contrôle parent signifie que les limites de ressources du groupe seront héritées. Par exemple, un cgroupgroupe est créé en tant que cgroups_1:

cgroup_parent: cgroups_1

5) nom_conteneur

Spécifiez le nom du conteneur. Par défaut, le format "Project Name_Service Name_Serial Number" sera utilisé. Par exemple:

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

6) appareils

Spécifiez la relation de mappage de périphérique, par exemple:

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

7) DNS

Serveur DNS personnalisé. Il peut s'agir d'une valeur ou d'une liste, par exemple:

dns: 8.8.8.8
dns:
    - 8.8.8.8
    - 114.114.114.114

Configurez le domaine de recherche DNS. Il peut s'agir d'une valeur ou d'une liste, par exemple:

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

9) Dockerfile

Si nécessaire, spécifiez le fichier Dockerfile supplémentaire de l'image compilée, qui peut être spécifié par cette instruction, par exemple:
cette instruction ne peut pas être utilisée avec l'image, sinon Compose ne sait pas quelle instruction pour générer l'image de service finale.

dockerfile: Dockerfile-alternate

10) fichier_env

Obtenez les variables d'environnement à partir du fichier, qui peut être un chemin ou une liste de fichiers distinct.
Si le fichier modèle Compose est spécifié par docker-compose -f FILE, le chemin de la variable dans env_file sera basé sur le chemin du fichier modèle. En cas de conflit entre le nom de la variable et la directive environnement, la convention prévaudra et cette dernière prévaudra:

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

11) environnement

Définissez les variables d'environnement, vous pouvez utiliser le format tableau ou dictionnaire. Une variable avec seulement un nom donné obtiendra automatiquement la valeur de la variable correspondante sur l'hôte exécutant Compose, qui peut être utilisée pour empêcher la divulgation de données inutiles. Par exemple:

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

12) exposer

Le port est exposé, mais pas mappé à la machine hôte, et n'est autorisé à être accessible que par le service lié. Seuls les ports internes peuvent être spécifiés comme paramètres, comme suit:

expose:
    - "3000"
    - "8000"

13) étend

Développez en fonction d'autres fichiers de modèle. Par exemple, nous avons déjà un service webapp et définissons un fichier de modèle de base comme common.yml, comme indiqué ci-dessous:

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

Écrivez un nouveau fichier development.yml et utilisez le service webapp dans common.yml pour développer:

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

development.yml héritera automatiquement du service webapp et des définitions de variables d'environnement dans common.yml. Faites attention aux points suivants lors de l'utilisation des extensions:

1. Évitez les dépendances circulaires, telles que A dépend de B, B dépend de C et C dépend de A

2. extend n'hérite pas des ressources de conteneur et de volume de données définies dans links et volume_from.

Dans des circonstances normales, il est recommandé de définir uniquement certaines variables miroir et d'environnement qui peuvent être partagées dans le modèle de base, et de spécifier des variables d'application, des liens, des volumes de données et d'autres informations dans le modèle étendu.

Lien vers des conteneurs externes dans docker-compose.yml, ou même des conteneurs externes non gérés par Compose. Le format des paramètres est similaire aux liens

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

15) extra_hosts

Comme pour le paramètre –add-host dans Docker, spécifiez des informations de mappage de nom d'hôte supplémentaires, par exemple:

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) image

Spécifiez le nom ou l'ID de l'image. Si l'image n'existe pas localement, Compose essaiera de tirer l'image.

image: centos
image: nginx

17) étiquettes

Ajoutez des informations de métadonnées Docker au conteneur. Par exemple, vous pouvez ajouter des informations auxiliaires au conteneur:

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

Lien vers des conteneurs dans d'autres services. Utilisez le nom du service comme alias), ou "nom du service: alias de service" tel que SERVICE: ALIAS), un tel format est acceptable, par exemple:

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

19) pilote_log

Similaire au paramètre –log-driver dans Docker, spécifie le type de pilote de journal. Trois types de pilotes de journal sont actuellement pris en charge:

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

20) log_opt

Paramètres liés au journal. Par exemple:

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

21) net

Définissez le mode réseau. Les paramètres sont similaires aux paramètres --net du client Docker

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

22) pid

Partagez l'espace de noms du processus avec le système hôte. Ouvrez l'option entre le conteneur et entre le conteneur et le système hôte peut être consulté et exploité par l'ID de processus:

pid: "host"

23) ports

Exposez les informations de port. Utilisez le format "hôte: conteneur" ou spécifiez simplement le port du conteneur. L'hôte sélectionnera le port au hasard):

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

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

24) security_opt

Spécifiez l'attribut par défaut du mécanisme d'étiquette de modèle de conteneur) (utilisateur, rôle, type, niveau, etc.). Par exemple, le nom d'utilisateur et le nom de rôle de l'étiquette de configuration:

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

25) ulimits

Spécifiez la valeur limite ulimits du conteneur, par exemple, spécifiez le nombre maximal de processus comme 65535 et spécifiez la limite souple de 20000 pour le nombre de descripteurs de fichier. L'application peut être modifiée à tout moment et ne peut pas dépasser la limite stricte, qui ne peut être augmentée que par l'utilisateur root).

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

26) volumes

Le paramètre de chemin d'accès du volume de données. Vous pouvez définir le chemin d'hôte HOST: CONTAINER) ou ajouter le mode d'accès HOST: CONTAINER: ro). Le chemin dans cette instruction prend en charge les chemins relatifs. Par exemple:

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

27) volumes_driver

Les versions plus récentes de Docker prennent en charge les pilotes de plug-in pour les volumes de données. Les utilisateurs peuvent utiliser un pilote tiers pour créer un volume de données, puis utiliser le nom pour y accéder. À ce stade, vous pouvez spécifier le lecteur via volumes_driver:

volume_driver: mydriver

28) volumes_de

Montez son volume de données à partir d'un autre service ou conteneur:

volumes_from:
    - service_name
    - container_name

Je suppose que tu aimes

Origine www.cnblogs.com/wangxiaopang/p/12712445.html
conseillé
Classement