Docker docker-compose

1. Introducción a docker-compose

docker-composeComo dokcerherramienta oficial de orquestación, permite a los usuarios crear y administrar rápidamente dockerclústeres de aplicaciones basadas en contenedores escribiendo un archivo de plantilla simple . Lograr una dockerrápida orquestación de grupos de contenedores. Sabemos que los Dockerfilearchivos de plantilla permiten a los usuarios definir fácilmente un contenedor de aplicaciones separado. Sin embargo, en el trabajo diario, a menudo nos encontramos con situaciones que requieren que varios contenedores cooperen entre sí para completar una determinada tarea. Por ejemplo, para implementar un proyecto web, además del webcontenedor del servidor en sí, a menudo es necesario agregar un contenedor de servicio de base de datos de fondo e incluso incluir un contenedor de equilibrio de carga.
    Y Compose puede satisfacer tales necesidades, ya que permite a los usuarios definir un conjunto de contenedores de aplicaciones relacionadas como un proyecto a través de un docker-compose.ymlarchivo de plantilla separado )YAML格式project

Hay 2 conceptos importantes en Compose:

1) Servicio de servicio: un contenedor de aplicaciones puede contener varias instancias de contenedor que ejecutan la misma imagen.
 2) Proyecto: una unidad de negocio completa compuesta por un grupo de contenedores de aplicaciones asociadas, definidos en el archivo docker-compose.yml.

2. instalación compuesta por docker

Descargue el archivo binario Docker-compose y agregue el permiso de ejecución

[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. Comando de redacción

Para la Composemayoría de los comandos, el objeto puede ser el proyecto mismo o el servicio o contenedor del proyecto. Si no hay una explicación especial, el objeto del comando será el proyecto, lo que significa que todos los servicios del proyecto se verán afectados por el comando. docker-composeEl formato básico del comando es el siguiente:

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. Componer archivo de plantilla

El archivo de plantilla es Composeel núcleo del uso , y hay muchas palabras clave de palabras clave de diseño. El nombre de archivo de plantilla predeterminado es docker-compose.ymly el formato es YAMLformato. Ejemplos:

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

Tenga en cuenta que cada servicio debe compilar y generar automáticamente una imagen imageespecificando la imagen o el buildcomando requerido Dockerfile). Si se utiliza la buildinstrucción, Dockerfilelas opciones configuradas en (por ejemplo: CMD、EXPOSE、VOLUME、ENVetc.) se obtendrán automáticamente sin docker-compose.ymlvolver a configurarlas. Las siguientes son las principales instrucciones y funciones de la plantilla:

1) instrucciones de construcción

DockerfileLa ruta de la carpeta especificada puede ser la ruta absoluta o la ruta relativa del docker-compose.ymlarchivo. ) Lo Composeusará para crear automáticamente esta imagen y luego usará esta imagen:

build: /path/to/build/dir

2) cap_add, cap_drop

Especifica las capacidades del núcleo del contenedor capacity) asignación. Por ejemplo, dejar que el contenedor tenga todas las capacidades se puede especificar como:

cap_add:
    - ALL 

La NET_ADMINcapacidad de eliminar se puede especificar como:

cap_drop:
    - NET_ADMIN

3) comando

Anule el comando predeterminado ejecutado después de que se inicie el contenedor:

command: echo "hello world"

4) cgroup_parent

La especificación del grupo cgroup primario significa que los límites de recursos del grupo se heredarán. Por ejemplo, un cgroupgrupo se crea como cgroups_1:

cgroup_parent: cgroups_1

5) nombre_contenedor

Especifique el nombre del contenedor. De forma predeterminada, se utilizará el formato "Nombre del proyecto_Nombre del servicio_Número de serie". Por ejemplo:

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

6) dispositivos

Especifique la relación de mapeo del dispositivo, por ejemplo:

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

7) dns

Servidor DNS personalizado. Puede ser un valor o una lista, por ejemplo:

dns: 8.8.8.8
dns:
    - 8.8.8.8
    - 114.114.114.114

Configure el dominio de búsqueda DNS. Puede ser un valor o una lista, por ejemplo:

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

9) dockerfile

Si es necesario, especifique el archivo Dockerfile adicional de la imagen compilada, que puede especificarse mediante esta instrucción, por ejemplo:
esta instrucción no se puede usar con la imagen; de lo contrario, Compose no sabe qué instrucción generar la imagen de servicio final.

dockerfile: Dockerfile-alternate

10) archivo_envío

Obtenga las variables de entorno del archivo, que puede ser una ruta o lista de archivos separada.
Si el archivo de plantilla Componer se especifica mediante docker-compose -f FILE, la ruta de la variable en env_file se basará en la ruta del archivo de plantilla. Si existe un conflicto entre el nombre de la variable y la directiva del entorno, prevalecerá la convención y prevalecerá la última:

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

11) medio ambiente

Establecer variables de entorno, puede usar el formato de matriz o diccionario. Una variable con solo un nombre determinado obtendrá automáticamente el valor de la variable correspondiente en el host que ejecuta Compose, que puede usarse para evitar la divulgación de datos innecesarios. Por ejemplo:

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

12) exponer

El puerto está expuesto, pero no asignado a la máquina host, y solo se permite que el servicio vinculado acceda a él. Solo los puertos internos se pueden especificar como parámetros, de la siguiente manera:

expose:
    - "3000"
    - "8000"

13) se extiende

Expandir según otros archivos de plantilla. Por ejemplo, ya tenemos un servicio de aplicación web y definimos un archivo de plantilla básico como common.yml, como se muestra a continuación:

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

Escriba un nuevo archivo development.yml y use el servicio webapp en common.yml para expandir:

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

development.yml heredará automáticamente el servicio webapp y las definiciones de variables de entorno en common.yml. Preste atención a los siguientes puntos cuando use extensiones:

1. Evite dependencias circulares, como A depende de B, B depende de C y C depende de A

2. extend no hereda los recursos de contenedor y volumen de datos definidos en enlaces y volume_from.

En circunstancias normales, se recomienda definir solo algunas variables espejo y de entorno que se pueden compartir en la plantilla básica, y especificar variables de aplicación, enlaces, volúmenes de datos y otra información en la plantilla extendida.

Enlace a contenedores externos en docker-compose.yml, o incluso contenedores externos no administrados por Compose. El formato del parámetro es similar a los enlaces.

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

15) extra_hosts

Similar al parámetro –add-host en Docker, especifique información adicional de asignación de nombres de host, por ejemplo:

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

Especifique el nombre de la imagen o la ID de la imagen. Si la imagen no existe localmente, Compose intentará extraer la imagen.

image: centos
image: nginx

17) etiquetas

Agregue información de metadatos de Docker al contenedor. Por ejemplo, puede agregar información auxiliar al contenedor:

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

Enlace a contenedores en otros servicios. Utilice el nombre del servicio como un alias) o "nombre del servicio: alias del servicio", como SERVICIO: ALIAS), dicho formato es aceptable, por ejemplo:

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

Similar al parámetro –log-driver en Docker, especifica el tipo de controlador de registro. Actualmente se admiten tres tipos de controladores de registro:

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

20) log_opt

Parámetros relacionados con el registro. Por ejemplo:

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

21) neto

Establece el modo de red. Los parámetros son similares a los parámetros --net del cliente de Docker

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

22) pid

Comparta el espacio de nombres del proceso con el sistema host. Abra la opción entre el contenedor, y entre el contenedor y el sistema host se puede acceder y operar por ID de proceso:

pid: "host"

23) puertos

Exponer la información del puerto. Utilice el formato "host: contenedor", o simplemente especifique el puerto del contenedor. El host seleccionará aleatoriamente el puerto):

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

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

24) seguridad_opt

Especifique el mecanismo del atributo predeterminado de la etiqueta de la plantilla del contenedor (usuario, rol, tipo, nivel, etc.). Por ejemplo, el nombre de usuario y el nombre de rol de la etiqueta de configuración:

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

25) ulimits

Especifique el valor límite de ulimits del contenedor, por ejemplo, especifique el número máximo de procesos como 65535 y especifique el límite flexible de 20000 para el número de identificadores de archivo. La aplicación se puede modificar en cualquier momento y no puede exceder el límite rígido.

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

26) volúmenes

La configuración de ruta del volumen de datos. Puede establecer la ruta de host HOST: CONTAINER) o agregar el modo de acceso HOST: CONTAINER: ro). La ruta en esta instrucción admite rutas relativas. Por ejemplo:

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

27) volume_driver

Las versiones más recientes de Docker admiten controladores de complementos para volúmenes de datos. Los usuarios pueden usar un controlador de terceros para crear un volumen de datos y luego usar el nombre para acceder a él. En este momento, puede especificar la unidad a través de volume_driver:

volume_driver: mydriver

28) volúmenes_desde

Monte su volumen de datos desde otro servicio o contenedor:

volumes_from:
    - service_name
    - container_name

Supongo que te gusta

Origin www.cnblogs.com/wangxiaopang/p/12712445.html
Recomendado
Clasificación