Descripción del archivo de plantilla de Docker Compose

Componer archivos de plantilla

El archivo de plantilla es el núcleo Composedel , que involucra muchas palabras clave de comando, la mayoría de las cuales docker runtienen significados similares a los parámetros relevantes.

El nombre de archivo de plantilla predeterminado es docker-compose.ymly el formato es YAML.

version: "3"

services:
  webapp:
    image: examples/web
    ports:
      - "80:80"
    volumes:
      - "/data"

Tenga en cuenta que cada servicio debe especificar un espejo a través imagedel comando o buildel comando (requiere Dockerfile), etc. para compilar y generar automáticamente el espejo.

Si se utiliza buildel comando , Dockerfilelas opciones configuradas en (por ejemplo: CMD, EXPOSE, VOLUME, ENVetc.) se obtendrán automáticamente y no es necesario repetir las configuraciones docker-compose.ymlen .


El uso de cada comando se presenta a continuación.

build

Especifique la ruta de la carpeta Dockerfiledonde se encuentra (puede ser una ruta absoluta o una ruta relativa al archivo docker-compose.yml). ComposeSe usará para construir automáticamente esta imagen y luego usar esta imagen.

version: '3'
services:

  webapp:
    build: ./dir

También puede usar contextla directiva para especificar Dockerfilela ruta a la carpeta donde se encuentra.

Utilice dockerfilela directiva para especificar Dockerfileel nombre del archivo.

Utilice argla directiva para especificar variables al crear una imagen.

version: '3'
services:
  webapp:
    build:
      context: ./dir
      dockerfile: Dockerfile-alternate
      args:
        buildno: 1

Úselo para cache_fromespecificar el caché de la imagen construida

build:
  context: .
  cache_from:
    - alpine:latest
    - corp/web_app:3.14

cap_add, cap_drop

Especifica la asignación de capacidad del kernel para el contenedor.

Por ejemplo, hacer que un contenedor tenga todas las capacidades se puede especificar como:

cap_add:
  - ALL

La capacidad de eliminar NET_ADMIN se puede especificar como:

cap_drop:
  - NET_ADMIN

command

Anula el comando que se ejecuta de forma predeterminada cuando se inicia el contenedor.

command: echo "hello world"

configs

Para uso exclusivo Swarm mode, no detallado aquí.

cgroup_parent

Especificar un cgroupgrupo significa que se heredarán los límites de recursos de ese grupo.

Por ejemplo, se crea un nombre de grupo cgroup cgroups_1.

cgroup_parent: cgroups_1

container_name

Especifique un nombre de contenedor. 项目名称_服务名称_序号Este formato se utilizará por defecto .

container_name: docker-web-container

Nota: Después de especificar el nombre del contenedor, el servicio no podrá escalar (scale), porque Docker no permite varios contenedores con el mismo nombre.

deploy

Para uso exclusivo Swarm mode, no detallado aquí.

devices

Especifica la relación de asignación de dispositivos.

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

depends_on

Resuelva el problema de la dependencia del contenedor y la secuencia de inicio. En el siguiente ejemplo, comenzará primero redis dby luego comenzaráweb

version: '3'

services:
  web:
    build: .
    depends_on:
      - db
      - redis

  redis:
    image: redis

  db:
    image: postgres

Nota: webEl servicio no espera el redis db"Inicio completo" antes de comenzar.

dns

DNSservidor personalizado . Puede ser un valor o una lista.

dns: 8.8.8.8

dns:
  - 8.8.8.8
  - 114.114.114.114

dns_search

Configurar dominios DNSde búsqueda . Puede ser un valor o una lista.

dns_search: example.com

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

tmpfs

Monte un sistema de archivos tmpfs en el contenedor.

tmpfs: /run
tmpfs:
  - /run
  - /tmp

env_file

Obtenga variables de entorno de un archivo, que puede ser una sola ruta de archivo o una lista.

Si el archivo de plantilla Compose se especifica mediante docker-compose -f FILEway , env_filela ruta de la variable en se basará en la ruta del archivo de plantilla.

Si un nombre de variable entra en conflicto con environmentuna directiva , por convención, esta última tiene prioridad.

env_file: .env

env_file:
  - ./common.env
  - ./apps/web.env
  - /opt/secrets.env

Cada línea en el archivo de variables de entorno debe ajustarse al formato, admitiendo líneas de comentarios #que comiencen con .

# common.env: Set development environment
PROG_ENV=development

environment

Establecer variables de entorno. Puede usar formatos de matriz y de diccionario.

Una variable con solo un nombre dado obtendrá automáticamente el valor de la variable correspondiente en el host que ejecuta Compose, que se puede usar para evitar la fuga de datos innecesaria.

environment:
  RACK_ENV: development
  SESSION_SECRET:

environment:
  - RACK_ENV=development
  - SESSION_SECRET

Si las palabras que expresan significados booleanos como se usan en nombres o valores true|false,yes|node variables , es mejor ponerlas entre comillas para evitar que YAML analice automáticamente cierto contenido en la semántica booleana correspondiente. Estas palabras específicas, incluyendo

y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF

expose

Los puertos están expuestos, pero no asignados al host, solo acceden los servicios conectados.

Solo se pueden especificar puertos internos como parámetros

expose:
 - "3000"
 - "8000"

external_links

Enlaces a contenedores docker-compose.ymlfuera de , ni siquiera Composea contenedores externos gestionados por .

Nota: este comando está en desuso.

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

extra_hosts

Similar al --add-hostparámetro , especifique información adicional de asignación de nombre de host.

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

Las siguientes dos entradas se agregarán al /etc/hostsarchivo .

8.8.8.8 googledns

52.1.157.61 dockerhub

healthcheck

Compruebe si el contenedor está en buen estado y se está ejecutando con el comando.

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost"]
  interval: 1m30s
  timeout: 10s
  retries: 3

image

Especificado como nombre de imagen o ID de imagen. Si el espejo no existe localmente, Composese intentará extraer el espejo.

image: ubuntu
image: orchardup/postgresql
image: a4bc65fd

labels

Agregue información de metadatos (metadatos) de Docker para el contenedor. Por ejemplo, se puede agregar información de descripció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"

links

Nota: este comando está en desuso.

logging

Configure las opciones de registro.

logging:
  driver: syslog
  options:
    syslog-address: "tcp://192.168.0.42:123"

Actualmente se admiten tres tipos de controladores de registro.

driver: "json-file"
driver: "syslog"
driver: "none"

optionsConfigure los parámetros relacionados del controlador de registro.

options:
  max-size: "200k"
  max-file: "10"

network_mode

Configure el modo de red. docker runUtilice --networkel mismo valor que para el parámetro de .

network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"

networks

Configure la red a la que está conectado el contenedor.

version: "3"
services:

  some-service:
    networks:
     - some-network
     - other-network

networks:
  some-network:
  other-network:

pid

Comparta el espacio de nombres del proceso con el sistema host. Los contenedores con esta opción habilitada, así como el contenedor y el sistema host, pueden acceder y operar entre sí a través de la identificación del proceso.

pid: "host"

ports

Exponer información del puerto.

Utilice el (HOST:CONTAINER)formato o simplemente especifique el puerto del contenedor (el host elegirá un puerto al azar).

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

Nota: Al usar _HOST:CONTAINER_ el formato para mapear puertos, si usa un puerto de contenedor menor a 60 y no lo pone entre comillas, puede obtener resultados erróneos, porque este formato de número _YAML_ se analiza automáticamente como base 60. _xx:yy_ Para evitar este tipo de problema, se recomienda que todas las cadenas numéricas utilicen el formato de cadena entre comillas.

secrets

Almacene datos confidenciales, como contraseñas mysqlde servicio .

version: "3.1"
services:

mysql:
  image: mysql
  environment:
    MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
  secrets:
    - db_root_password
    - my_other_secret

secrets:
  my_secret:
    file: ./my_secret.txt
  my_other_secret:
    external: true

security_opt

Especifica los atributos predeterminados (usuario, rol, tipo, nivel, etc.) del mecanismo de etiqueta de plantilla de contenedor (etiqueta). Por ejemplo, configure el nombre de usuario y el nombre de rol de la etiqueta.

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

privileged

Con este parámetro, la raíz dentro del contenedor tiene autoridad de raíz real, lo que permite que se ejecuten algunos comandos privilegiados en el contenedor.

De lo contrario, la raíz dentro del contenedor es solo un usuario ordinario fuera de la autoridad. El contenedor iniciado por privilegiado puede ver muchos dispositivos en el host y puede ejecutar el montaje. Incluso le permite iniciar un contenedor acoplable dentro de un contenedor acoplable.

privileged: true

stop_signal

Establecer otra señal para detener el contenedor. Por defecto usa SIGTERM para detener el contenedor.

stop_signal: SIGUSR1

sysctls

Configure los parámetros del núcleo del contenedor. Puede usar formatos de matriz y de diccionario.

sysctls:
  net.core.somaxconn: 1024
  net.ipv4.tcp_syncookies: 0

sysctls:
  - net.core.somaxconn=1024
  - net.ipv4.tcp_syncookies=0

ulimits

Especifica el valor límite de ulimits para el contenedor.

Por ejemplo, especifique la cantidad máxima de procesos como 65535, especifique la cantidad de identificadores de archivos como 20000 (límite flexible, que puede ser modificado por la aplicación en cualquier momento y no puede exceder el límite estricto) y 40000 (límite estricto del sistema, que solo puede ser aumentado por el usuario root).

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

volumes

La configuración de ruta donde se monta el volumen de datos. Se puede establecer como ruta de host ( HOST:CONTAINER) o nombre de volumen de datos ( VOLUME:CONTAINER) y modo de acceso ( HOST:CONTAINER:ro).

La ruta en esta directiva admite rutas relativas.

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

Si la ruta es un nombre de volumen de datos, el volumen de datos debe configurarse en el archivo.

version: "3"

services:
  my_src:
    image: mysql:8.0
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data:  

otras instrucciones

Además, hay instrucciones que incluyen domainname, entrypoint, hostname, ipc, mac_address, privileged, read_only, shm_size, restart, stdin_open, tty, user, working_dir, etc. , que son básicamente docker runconsistentes con las funciones de los parámetros correspondientes en .

Especifique el archivo de entrada que se ejecutará después de que se inicie el contenedor de servicios.

entrypoint: /code/entrypoint.sh

Especifica el nombre de usuario que ejecuta la aplicación en el contenedor.

user: nginx

Especifica el directorio de trabajo en el contenedor.

working_dir: /code

Busque el nombre de dominio, el nombre de host, la dirección mac, etc. en el contenedor especificado.

domainname: your_website.com
hostname: test
mac_address: 08-00-27-00-0C-0A

Especifica que la política de reinicio después de que el contenedor sale siempre es reiniciar. Este comando es muy efectivo para mantener el servicio funcionando todo el tiempo, y se recomienda configurarlo como alwayso unless-stopped.

restart: always

Montar el sistema de archivos raíz de un contenedor en modo de solo lectura significa que el contenido del contenedor no se puede modificar.

read_only: true

Entrada estándar abierta, que puede aceptar entrada externa.

stdin_open: true

Simular un pseudo-terminal.

tty: true

leer variables

Componer archivos de plantilla admite la lectura dinámica de variables de entorno del sistema host y variables en .envarchivos .

Por ejemplo, el archivo Compose a continuación leerá los valores ${MONGO_VERSION}de y los escribirá en las instrucciones ejecutadas.

version: "3"
services:

db:
  image: "mongo:${MONGO_VERSION}"

Si se ejecuta MONGO_VERSION=3.2 docker-compose up, mongo:3.2se iniciará un contenedor reflejado; si se ejecuta MONGO_VERSION=2.8 docker-compose up, mongo:2.8se iniciará un contenedor reflejado.

Si hay .envun archivo , docker-composelas variables se leerán del archivo cuando se ejecute el comando.

Cree un nuevo .envarchivo y escriba el siguiente contenido.

# 支持 # 号注释
MONGO_VERSION=3.6

La docker-compose upejecución iniciará un mongo:3.6contenedor reflejado.

Referencias

  • ​Documentación Oficial

  • ​impresionante - componer

Supongo que te gusta

Origin blog.csdn.net/weixin_43702146/article/details/130526500
Recomendado
Clasificación