services: {%- if ',' in cookiecutter.__component_list_slug -%} {%- set components = cookiecutter.__component_list_slug.split(',') -%} {%- set ns = namespace(found=false) -%} {%- for component in components %} {%- if loop.first -%} {%- set ns.first_component = component -%} {%- elif N is undefined -%} {%- set ns.second_component = component -%} {%- set N = 0 -%} {%- endif -%} {%- endfor -%} {%- for component in components %} {{ component }}: # FIXME Docker Hub image name with or without slash? FIXME image: "{{ component }}:${% raw %}{{% endraw %}{{ component.upper() }}_VERSION{% raw %}}{% endraw %}" container_name: "{{ cookiecutter.__service_slug }}-{{ component }}-${CONTEXT}" networks: {{ cookiecutter.__service_slug }}-default: profiles: ["full", "{{ component }}"] {% if loop.first -%} depends_on: {{ ns.second_component }}: condition: service_healthy {%- else -%} healthcheck: test: ["CMD", "fping", "--count=1", "${% raw %}{{% endraw %}{{ ns.first_component.upper() }}_VIP{% raw %}}{% endraw %}", "--period=500", "--quiet"] interval: 3s timeout: 1s retries: 60 start_period: 2s {%- endif %} ulimits: nproc: ${ULIMIT_NPROC-65535} nofile: soft: ${ULIMIT_NPROC-65535} hard: ${ULIMIT_NPROC-65535} extends: file: common-settings.yml service: common-settings ports: # - "8080:80" volumes: # When changing bind mount locations to real ones remember to # also update "Initial setup" section in README.md. # - /opt/docker-data/{{ cookiecutter.__service_slug }}-${CONTEXT}/{{ component }}/data/db:/usr/lib/{{ component }} # - /opt/docker-data/{{ cookiecutter.__service_slug }}-${CONTEXT}/{{ component }}/data/logs:/var/log/{{ component }} # - /opt/docker-data/{{ cookiecutter.__service_slug }}-${CONTEXT}/{{ component }}/config:/etc/{{ component }} environment: # {{ component.upper() }}_USER: ${% raw %}{{% endraw %}{{ component.upper() }}_USER{% raw %}}{% endraw %} # {{ component.upper() }}_PASSWORD: ${% raw %}{{% endraw %}{{ component.upper() }}_PASSWORD{% raw %}}{% endraw %} {%- endfor -%} {%- else %} {{ cookiecutter.__component_list_slug }}: # FIXME Docker Hub image name with or without slash? FIXME image: "{{ cookiecutter.__component_list_slug }}:${% raw %}{{% endraw %}{{ cookiecutter.__component_list_slug.upper() }}_VERSION{% raw %}}{% endraw %}" container_name: "{{ cookiecutter.__service_slug }}-${CONTEXT}" networks: {{ cookiecutter.__service_slug }}-default: ulimits: nproc: ${ULIMIT_NPROC-65535} nofile: soft: ${ULIMIT_NPROC-65535} hard: ${ULIMIT_NPROC-65535} extends: file: common-settings.yml service: common-settings ports: # - "8080:80" volumes: # When changing bind mount locations to real ones remember to # also update "Initial setup" section in README.md. # - /opt/docker-data/{{ cookiecutter.__service_slug }}-${CONTEXT}/{{ cookiecutter.__service_slug }}/data/db:/usr/lib/{{ cookiecutter.__service_slug }} # - /opt/docker-data/{{ cookiecutter.__service_slug }}-${CONTEXT}/{{ cookiecutter.__service_slug }}/data/logs:/var/log/{{ cookiecutter.__service_slug }} # - /opt/docker-data/{{ cookiecutter.__service_slug }}-${CONTEXT}/{{ cookiecutter.__service_slug }}/config:/etc/{{ cookiecutter.__service_slug }} environment: # {{ cookiecutter.__component_list_slug.upper() }}_USER: ${% raw %}{{% endraw %}{{ cookiecutter.__component_list_slug.upper() }}_USER{% raw %}}{% endraw %} # {{ cookiecutter.__component_list_slug.upper() }}_PASSWORD: ${% raw %}{{% endraw %}{{ cookiecutter.__component_list_slug.upper() }}_PASSWORD{% raw %}}{% endraw %} {%- endif %} networks: {{ cookiecutter.__service_slug }}-default: name: {{ cookiecutter.__service_slug }}-${CONTEXT} driver: bridge driver_opts: com.docker.network.enable_ipv6: "false" ipam: driver: default config: - subnet: ${SUBNET}