version: "3.13"
services:
  foo:
    build:
      context: ./dir
      dockerfile: Dockerfile
      args:
        foo: bar
      labels:
        FOO: BAR
      cache_from:
      - foo
      - bar
      extra_hosts:
      - ipv4.example.com:127.0.0.1
      - ipv6.example.com:::1
      network: foo
      target: foo
    cap_add:
    - ALL
    cap_drop:
    - NET_ADMIN
    - SYS_ADMIN
    cgroup_parent: m-executor-abcd
    command:
    - bundle
    - exec
    - thin
    - -p
    - "3000"
    configs:
    - source: config1
    - source: config2
      target: /my_config
      uid: "103"
      gid: "103"
      mode: 288
    container_name: my-web-container
    depends_on:
    - db
    - redis
    deploy:
      mode: replicated
      replicas: 6
      labels:
        FOO: BAR
      update_config:
        parallelism: 3
        delay: 10s
        failure_action: continue
        monitor: 1m0s
        max_failure_ratio: 0.3
        order: start-first
      rollback_config:
        parallelism: 3
        delay: 10s
        failure_action: continue
        monitor: 1m0s
        max_failure_ratio: 0.3
        order: start-first
      resources:
        limits:
          cpus: "0.001"
          memory: "52428800"
          pids: 100
        reservations:
          cpus: "0.0001"
          memory: "20971520"
          generic_resources:
          - discrete_resource_spec:
              kind: gpu
              value: 2
          - discrete_resource_spec:
              kind: ssd
              value: 1
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 2m0s
      placement:
        constraints:
        - node=foo
        preferences:
        - spread: node.labels.az
        max_replicas_per_node: 5
      endpoint_mode: dnsrr
    devices:
    - /dev/ttyUSB0:/dev/ttyUSB0
    dns:
    - 8.8.8.8
    - 9.9.9.9
    dns_search:
    - dc1.example.com
    - dc2.example.com
    domainname: foo.com
    entrypoint:
    - /code/entrypoint.sh
    - -p
    - "3000"
    environment:
      BAR: bar_from_env_file_2
      BAZ: baz_from_service_def
      FOO: foo_from_env_file
      QUX: qux_from_environment
    env_file:
    - ./example1.env
    - ./example2.env
    expose:
    - "3000"
    - "8000"
    external_links:
    - redis_1
    - project_db_1:mysql
    - project_db_1:postgresql
    extra_hosts:
    - somehost:162.242.195.82
    - otherhost:50.31.209.229
    - host.docker.internal:host-gateway
    hostname: foo
    healthcheck:
      test:
      - CMD-SHELL
      - echo "hello world"
      timeout: 1s
      interval: 10s
      retries: 5
      start_period: 15s
      start_interval: 1s
    image: redis
    ipc: host
    labels:
      com.example.description: Accounting webapp
      com.example.empty-label: ""
      com.example.number: "42"
    links:
    - db
    - db:database
    - redis
    logging:
      driver: syslog
      options:
        syslog-address: tcp://192.168.0.42:123
    mac_address: 02:42:ac:11:65:43
    network_mode: container:0cfeab0f748b9a743dc3da582046357c6ef497631c1a016d28d2bf9b4f899f7b
    networks:
      other-network:
        ipv4_address: 172.16.238.10
        ipv6_address: 2001:3984:3989::10
      other-other-network: null
      some-network:
        aliases:
        - alias1
        - alias3
        driver_opts:
          driveropt1: optval1
          driveropt2: optval2
    pid: host
    ports:
    - mode: ingress
      target: 3000
      protocol: tcp
    - mode: ingress
      target: 3001
      protocol: tcp
    - mode: ingress
      target: 3002
      protocol: tcp
    - mode: ingress
      target: 3003
      protocol: tcp
    - mode: ingress
      target: 3004
      protocol: tcp
    - mode: ingress
      target: 3005
      protocol: tcp
    - mode: ingress
      target: 8000
      published: 8000
      protocol: tcp
    - mode: ingress
      target: 8080
      published: 9090
      protocol: tcp
    - mode: ingress
      target: 8081
      published: 9091
      protocol: tcp
    - mode: ingress
      target: 22
      published: 49100
      protocol: tcp
    - mode: ingress
      target: 8001
      published: 8001
      protocol: tcp
    - mode: ingress
      target: 5000
      published: 5000
      protocol: tcp
    - mode: ingress
      target: 5001
      published: 5001
      protocol: tcp
    - mode: ingress
      target: 5002
      published: 5002
      protocol: tcp
    - mode: ingress
      target: 5003
      published: 5003
      protocol: tcp
    - mode: ingress
      target: 5004
      published: 5004
      protocol: tcp
    - mode: ingress
      target: 5005
      published: 5005
      protocol: tcp
    - mode: ingress
      target: 5006
      published: 5006
      protocol: tcp
    - mode: ingress
      target: 5007
      published: 5007
      protocol: tcp
    - mode: ingress
      target: 5008
      published: 5008
      protocol: tcp
    - mode: ingress
      target: 5009
      published: 5009
      protocol: tcp
    - mode: ingress
      target: 5010
      published: 5010
      protocol: tcp
    privileged: true
    read_only: true
    restart: always
    secrets:
    - source: secret1
    - source: secret2
      target: my_secret
      uid: "103"
      gid: "103"
      mode: 288
    security_opt:
    - label=level:s0:c100,c200
    - label=type:svirt_apache_t
    stdin_open: true
    stop_grace_period: 20s
    stop_signal: SIGUSR1
    sysctls:
      net.core.somaxconn: "1024"
      net.ipv4.tcp_syncookies: "0"
    tmpfs:
    - /run
    - /tmp
    tty: true
    ulimits:
      nofile:
        soft: 20000
        hard: 40000
      nproc: 65535
    user: someone
    volumes:
    - type: volume
      target: /var/lib/mysql
    - type: bind
      source: /opt/data
      target: /var/lib/mysql
    - type: bind
      source: /foo
      target: /code
    - type: bind
      source: /foo/static
      target: /var/www/html
    - type: bind
      source: /bar/configs
      target: /etc/configs/
      read_only: true
    - type: volume
      source: datavolume
      target: /var/lib/mysql
    - type: bind
      source: /foo/opt
      target: /opt
      consistency: cached
    - type: tmpfs
      target: /opt
      tmpfs:
        size: 10000
    - type: cluster
      source: group:mygroup
      target: /srv
    working_dir: /code
    x-bar: baz
    x-foo: bar
networks:
  external-network:
    name: external-network
    external: true
  other-external-network:
    name: my-cool-network
    external: true
    x-bar: baz
    x-foo: bar
  other-network:
    driver: overlay
    driver_opts:
      baz: "1"
      foo: bar
    ipam:
      driver: overlay
      config:
      - subnet: 172.16.238.0/24
      - subnet: 2001:3984:3989::/64
    labels:
      foo: bar
  some-network: {}
volumes:
  another-volume:
    name: user_specified_name
    driver: vsphere
    driver_opts:
      baz: "1"
      foo: bar
  cluster-volume:
    driver: my-csi-driver
    x-cluster-spec:
      group: mygroup
      access_mode:
        scope: single
        sharing: none
        block_volume: {}
      accessibility_requirements:
        requisite:
        - segments:
            region: R1
            zone: Z1
        - segments:
            region: R1
            zone: Z2
        preferred:
        - segments:
            region: R1
            zone: Z1
      capacity_range:
        required_bytes: "1073741824"
        limit_bytes: "8589934592"
      secrets:
      - key: mycsisecret
        secret: secret1
      - key: mycsisecret2
        secret: secret4
      availability: active
  external-volume:
    name: external-volume
    external: true
  external-volume3:
    name: this-is-volume3
    external: true
    x-bar: baz
    x-foo: bar
  other-external-volume:
    name: my-cool-volume
    external: true
  other-volume:
    driver: flocker
    driver_opts:
      baz: "1"
      foo: bar
    labels:
      foo: bar
  some-volume: {}
secrets:
  secret1:
    file: /foo/secret_data
    labels:
      foo: bar
  secret2:
    name: my_secret
    external: true
  secret3:
    name: secret3
    external: true
  secret4:
    name: bar
    file: /foo
    x-bar: baz
    x-foo: bar
configs:
  config1:
    file: /foo/config_data
    labels:
      foo: bar
  config2:
    name: my_config
    external: true
  config3:
    name: config3
    external: true
  config4:
    name: foo
    file: /foo
    x-bar: baz
    x-foo: bar
x-bar: baz
x-foo: bar
x-nested:
  bar: baz
  foo: bar
