Componer archivos de plantilla
El archivo de plantilla es el núcleo Compose
del , que involucra muchas palabras clave de comando, la mayoría de las cuales docker run
tienen significados similares a los parámetros relevantes.
El nombre de archivo de plantilla predeterminado es docker-compose.yml
y 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 image
del comando o build
el comando (requiere Dockerfile), etc. para compilar y generar automáticamente el espejo.
Si se utiliza build
el comando , Dockerfile
las opciones configuradas en (por ejemplo: CMD
, EXPOSE
, VOLUME
, ENV
etc.) se obtendrán automáticamente y no es necesario repetir las configuraciones docker-compose.yml
en .
El uso de cada comando se presenta a continuación.
build
Especifique la ruta de la carpeta
Dockerfile
donde se encuentra (puede ser una ruta absoluta o una ruta relativa al archivo docker-compose.yml).Compose
Se usará para construir automáticamente esta imagen y luego usar esta imagen.
version: '3'
services:
webapp:
build: ./dir
También puede usar context
la directiva para especificar Dockerfile
la ruta a la carpeta donde se encuentra.
Utilice dockerfile
la directiva para especificar Dockerfile
el nombre del archivo.
Utilice arg
la directiva para especificar variables al crear una imagen.
version: '3'
services:
webapp:
build:
context: ./dir
dockerfile: Dockerfile-alternate
args:
buildno: 1
Úselo para cache_from
especificar 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
cgroup
grupo 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
db
y luego comenzaráweb
version: '3'
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: postgres
Nota:
web
El servicio no espera elredis
db
"Inicio completo" antes de comenzar.
dns
DNS
servidor 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
DNS
de 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 FILE
way ,env_file
la ruta de la variable en se basará en la ruta del archivo de plantilla.
Si un nombre de variable entra en conflicto con
environment
una 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|no
de 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.yml
fuera de , ni siquieraCompose
a 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-host
pará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/hosts
archivo .
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,
Compose
se 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"
options
Configure los parámetros relacionados del controlador de registro.
options:
max-size: "200k"
max-file: "10"
network_mode
Configure el modo de red.
docker run
Utilice--network
el 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
mysql
de 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ásicamentedocker run
consistentes 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 always
o 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
.env
archivos .
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.2
se iniciará un contenedor reflejado; si se ejecuta MONGO_VERSION=2.8 docker-compose up
, mongo:2.8
se iniciará un contenedor reflejado.
Si hay .env
un archivo , docker-compose
las variables se leerán del archivo cuando se ejecute el comando.
Cree un nuevo .env
archivo y escriba el siguiente contenido.
# 支持 # 号注释
MONGO_VERSION=3.6
La docker-compose up
ejecución iniciará un mongo:3.6
contenedor reflejado.
Referencias
-
impresionante - componer