Compare commits
	
		
			4 Commits
		
	
	
		
			20d303e79a
			...
			b534a9bccf
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| b534a9bccf | |||
| e5e78a0527 | |||
| d98de5aff0 | |||
| ffaf43e56f | 
@@ -56,7 +56,7 @@ The end result is a directory structure that has everything you need to hit the
 | 
				
			|||||||
    │       ├── Dockerfile
 | 
					    │       ├── Dockerfile
 | 
				
			||||||
    │       └── extras
 | 
					    │       └── extras
 | 
				
			||||||
    │           └── .gitkeep
 | 
					    │           └── .gitkeep
 | 
				
			||||||
    ├── common-settings.yml
 | 
					    ├── common-settings.yaml
 | 
				
			||||||
    ├── compose.override.yaml
 | 
					    ├── compose.override.yaml
 | 
				
			||||||
    ├── compose.yaml
 | 
					    ├── compose.yaml
 | 
				
			||||||
    ├── env
 | 
					    ├── env
 | 
				
			||||||
@@ -214,7 +214,7 @@ Make some code changes, for example to the Docker Compose Cookiecutter template.
 | 
				
			|||||||
        │       ├── Dockerfile
 | 
					        │       ├── Dockerfile
 | 
				
			||||||
        │       └── extras
 | 
					        │       └── extras
 | 
				
			||||||
        │           └── .gitkeep
 | 
					        │           └── .gitkeep
 | 
				
			||||||
        ├── common-settings.yml
 | 
					        ├── common-settings.yaml
 | 
				
			||||||
        ├── compose.override.yaml
 | 
					        ├── compose.override.yaml
 | 
				
			||||||
        ├── compose.yaml
 | 
					        ├── compose.yaml
 | 
				
			||||||
        ├── env
 | 
					        ├── env
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -92,7 +92,7 @@ Above example of a multi-component (two in this case) `grafana` service will giv
 | 
				
			|||||||
    │       ├── Dockerfile
 | 
					    │       ├── Dockerfile
 | 
				
			||||||
    │       └── extras
 | 
					    │       └── extras
 | 
				
			||||||
    │           └── .gitkeep
 | 
					    │           └── .gitkeep
 | 
				
			||||||
    ├── common-settings.yml
 | 
					    ├── common-settings.yaml
 | 
				
			||||||
    ├── compose.override.yaml
 | 
					    ├── compose.override.yaml
 | 
				
			||||||
    ├── compose.yaml
 | 
					    ├── compose.yaml
 | 
				
			||||||
    ├── env
 | 
					    ├── env
 | 
				
			||||||
@@ -113,7 +113,7 @@ With an alternative single-component `hashicorpvault` service the result may loo
 | 
				
			|||||||
    │   ├── Dockerfile
 | 
					    │   ├── Dockerfile
 | 
				
			||||||
    │   └── extras
 | 
					    │   └── extras
 | 
				
			||||||
    │       └── .gitkeep
 | 
					    │       └── .gitkeep
 | 
				
			||||||
    ├── common-settings.yml
 | 
					    ├── common-settings.yaml
 | 
				
			||||||
    ├── compose.override.yaml
 | 
					    ├── compose.override.yaml
 | 
				
			||||||
    ├── compose.yaml
 | 
					    ├── compose.yaml
 | 
				
			||||||
    ├── env
 | 
					    ├── env
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,7 +39,7 @@ docker compose --project-name "${COMPOSE_PROJECT}" --file "${COMPOSE_FILE}" --en
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
## Copy to target
 | 
					## Copy to target
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Copy images to target Docker host, that is assuming you deploy to a machine that itself has no network route to reach Docker Hub. Copying in its simplest form involves a local `docker save` and a remote `docker load`. Consider the helper mini-project [quico.space/Quico/copy-docker](https://quico.space/Quico/copy-docker) where [copy-docker.sh](https://quico.space/Quico/copy-docker/src/branch/main/copy-docker.sh) allows the following workflow:
 | 
					Copy images to target Docker host, that is assuming you deploy to a machine that itself has no network route to reach Docker Hub or your private registry of choice. Copying in its simplest form involves a local `docker save` and a remote `docker load`. Consider the helper mini-project [quico.space/Quico/copy-docker](https://quico.space/Quico/copy-docker) where [copy-docker.sh](https://quico.space/Quico/copy-docker/src/branch/main/copy-docker.sh) allows the following workflow:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
source "${COMPOSE_ENV}"
 | 
					source "${COMPOSE_ENV}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
services:
 | 
					services:
 | 
				
			||||||
    grafana-build:
 | 
					    grafana-build:
 | 
				
			||||||
 | 
					        # FIXME image name with or without slash? Docker Hub or private registry? With or without *_BUILD_DATE? FIXME
 | 
				
			||||||
        image: "grafana:${GRAFANA_VERSION}"
 | 
					        image: "grafana:${GRAFANA_VERSION}"
 | 
				
			||||||
        profiles: ["build", "build-grafana"]
 | 
					        profiles: ["build", "build-grafana"]
 | 
				
			||||||
        build:
 | 
					        build:
 | 
				
			||||||
@@ -9,6 +10,7 @@ services:
 | 
				
			|||||||
                EXAMPLE_ARG_FOR_DOCKERFILE: "${EXAMPLE_ARG_FROM_ENV_FILE}"
 | 
					                EXAMPLE_ARG_FOR_DOCKERFILE: "${EXAMPLE_ARG_FROM_ENV_FILE}"
 | 
				
			||||||
                GRAFANA_VERSION: "${GRAFANA_VERSION}"
 | 
					                GRAFANA_VERSION: "${GRAFANA_VERSION}"
 | 
				
			||||||
    nginx-build:
 | 
					    nginx-build:
 | 
				
			||||||
 | 
					        # FIXME image name with or without slash? Docker Hub or private registry? With or without *_BUILD_DATE? FIXME
 | 
				
			||||||
        image: "nginx:${NGINX_VERSION}"
 | 
					        image: "nginx:${NGINX_VERSION}"
 | 
				
			||||||
        profiles: ["build", "build-nginx"]
 | 
					        profiles: ["build", "build-nginx"]
 | 
				
			||||||
        build:
 | 
					        build:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
services:
 | 
					services:
 | 
				
			||||||
    grafana:
 | 
					    grafana:
 | 
				
			||||||
        # FIXME Docker Hub image name with or without slash? FIXME
 | 
					        # FIXME image name with or without slash? Docker Hub or private registry? With or without *_BUILD_DATE? FIXME
 | 
				
			||||||
        image: "grafana:${GRAFANA_VERSION}"
 | 
					        image: "grafana:${GRAFANA_VERSION}"
 | 
				
			||||||
        container_name: "grafana-grafana-${CONTEXT}"
 | 
					        container_name: "grafana-grafana-${CONTEXT}"
 | 
				
			||||||
        networks:
 | 
					        networks:
 | 
				
			||||||
@@ -15,7 +15,7 @@ services:
 | 
				
			|||||||
                soft: ${ULIMIT_NPROC-65535}
 | 
					                soft: ${ULIMIT_NPROC-65535}
 | 
				
			||||||
                hard: ${ULIMIT_NPROC-65535}
 | 
					                hard: ${ULIMIT_NPROC-65535}
 | 
				
			||||||
        extends:
 | 
					        extends:
 | 
				
			||||||
            file: common-settings.yml
 | 
					            file: common-settings.yaml
 | 
				
			||||||
            service: common-settings
 | 
					            service: common-settings
 | 
				
			||||||
        ports:
 | 
					        ports:
 | 
				
			||||||
            # - "8080:80"
 | 
					            # - "8080:80"
 | 
				
			||||||
@@ -29,7 +29,7 @@ services:
 | 
				
			|||||||
            # GRAFANA_USER: ${GRAFANA_USER}
 | 
					            # GRAFANA_USER: ${GRAFANA_USER}
 | 
				
			||||||
            # GRAFANA_PASSWORD: ${GRAFANA_PASSWORD}
 | 
					            # GRAFANA_PASSWORD: ${GRAFANA_PASSWORD}
 | 
				
			||||||
    nginx:
 | 
					    nginx:
 | 
				
			||||||
        # FIXME Docker Hub image name with or without slash? FIXME
 | 
					        # FIXME image name with or without slash? Docker Hub or private registry? With or without *_BUILD_DATE? FIXME
 | 
				
			||||||
        image: "nginx:${NGINX_VERSION}"
 | 
					        image: "nginx:${NGINX_VERSION}"
 | 
				
			||||||
        container_name: "grafana-nginx-${CONTEXT}"
 | 
					        container_name: "grafana-nginx-${CONTEXT}"
 | 
				
			||||||
        networks:
 | 
					        networks:
 | 
				
			||||||
@@ -47,7 +47,7 @@ services:
 | 
				
			|||||||
                soft: ${ULIMIT_NPROC-65535}
 | 
					                soft: ${ULIMIT_NPROC-65535}
 | 
				
			||||||
                hard: ${ULIMIT_NPROC-65535}
 | 
					                hard: ${ULIMIT_NPROC-65535}
 | 
				
			||||||
        extends:
 | 
					        extends:
 | 
				
			||||||
            file: common-settings.yml
 | 
					            file: common-settings.yaml
 | 
				
			||||||
            service: common-settings
 | 
					            service: common-settings
 | 
				
			||||||
        ports:
 | 
					        ports:
 | 
				
			||||||
            # - "8080:80"
 | 
					            # - "8080:80"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,6 +7,7 @@ CONTEXT=ux_vilnius
 | 
				
			|||||||
# GRAFANA_VERSION=x.y.z
 | 
					# GRAFANA_VERSION=x.y.z
 | 
				
			||||||
# NGINX_VERSION=x.y.z
 | 
					# NGINX_VERSION=x.y.z
 | 
				
			||||||
# GRAFANA_VIP=10.1.1.2
 | 
					# GRAFANA_VIP=10.1.1.2
 | 
				
			||||||
 | 
					# GRAFANA_BUILD_DATE=20230731
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,15 +32,28 @@ docker context create fully.qualified.domain.name --docker 'host=ssh://root@full
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
## Build
 | 
					## Build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					> Skip to [Pull](#pull) if you already have images in your private registry ready to use. Otherwise read on to build them now.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FIXME We build the `vault` image locally. Our adjustment to the official image is simply adding `/tmp/vault` to it. See [build-context/Dockerfile](build-context/Dockerfile). We use `/tmp/vault` to bind-mount a dedicated ZFS dataset for the application's `tmpdir` location.
 | 
					FIXME We build the `vault` image locally. Our adjustment to the official image is simply adding `/tmp/vault` to it. See [build-context/Dockerfile](build-context/Dockerfile). We use `/tmp/vault` to bind-mount a dedicated ZFS dataset for the application's `tmpdir` location.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
docker compose --project-name "${COMPOSE_PROJECT}" --file "${COMPOSE_FILE}" --file "${COMPOSE_OVERRIDE}" --env-file "${COMPOSE_ENV}" --profile 'build-vault' build
 | 
					docker compose --project-name "${COMPOSE_PROJECT}" --file "${COMPOSE_FILE}" --file "${COMPOSE_OVERRIDE}" --env-file "${COMPOSE_ENV}" --profile 'build-vault' build
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Push
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Push to Docker Hub or your private registry. Setting up a private registry is out of scope of this repo.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					source "${COMPOSE_ENV}"
 | 
				
			||||||
 | 
					docker push "registry.example.com/project/vault:${VAULT_BUILD_DATE}-${VAULT_VERSION}"
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Pull
 | 
					## Pull
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FIXME Rewrite either [Build](#build) or this paragraph for which images are built and which ones pulled, `--profile 'full'` may not make sense FIXME Pull images from Docker Hub verbatim.
 | 
					> Skip this step if you just built images that still exist locally on your build host.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FIXME Rewrite either [Build](#build) or this paragraph for which images are built and which ones pulled, `--profile 'full'` may not make sense.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
docker compose --project-name "${COMPOSE_PROJECT}" --file "${COMPOSE_FILE}" --env-file "${COMPOSE_ENV}" --profile 'full' pull
 | 
					docker compose --project-name "${COMPOSE_PROJECT}" --file "${COMPOSE_FILE}" --env-file "${COMPOSE_ENV}" --profile 'full' pull
 | 
				
			||||||
@@ -48,7 +61,7 @@ docker compose --project-name "${COMPOSE_PROJECT}" --file "${COMPOSE_FILE}" --en
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
## Copy to target
 | 
					## Copy to target
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Copy images to target Docker host, that is assuming you deploy to a machine that itself has no network route to reach Docker Hub. Copying in its simplest form involves a local `docker save` and a remote `docker load`. Consider the helper mini-project [quico.space/Quico/copy-docker](https://quico.space/Quico/copy-docker) where [copy-docker.sh](https://quico.space/Quico/copy-docker/src/branch/main/copy-docker.sh) allows the following workflow:
 | 
					Copy images to target Docker host, that is assuming you deploy to a machine that itself has no network route to reach Docker Hub or your private registry of choice. Copying in its simplest form involves a local `docker save` and a remote `docker load`. Consider the helper mini-project [quico.space/Quico/copy-docker](https://quico.space/Quico/copy-docker) where [copy-docker.sh](https://quico.space/Quico/copy-docker/src/branch/main/copy-docker.sh) allows the following workflow:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
source "${COMPOSE_ENV}"
 | 
					source "${COMPOSE_ENV}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
services:
 | 
					services:
 | 
				
			||||||
    vault-build:
 | 
					    vault-build:
 | 
				
			||||||
        image: "vault:${VAULT_VERSION}"
 | 
					        # FIXME image name with or without slash? Docker Hub or private registry? With or without *_BUILD_DATE? FIXME
 | 
				
			||||||
 | 
					        image: "registry.example.com/project/vault:${VAULT_BUILD_DATE}-${VAULT_VERSION}"
 | 
				
			||||||
        profiles: ["build"]
 | 
					        profiles: ["build"]
 | 
				
			||||||
        build:
 | 
					        build:
 | 
				
			||||||
            context: "build-context/vault"
 | 
					            context: "build-context/vault"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
services:
 | 
					services:
 | 
				
			||||||
    vault:
 | 
					    vault:
 | 
				
			||||||
        # FIXME Docker Hub image name with or without slash? FIXME
 | 
					        # FIXME image name with or without slash? Docker Hub or private registry? With or without *_BUILD_DATE? FIXME
 | 
				
			||||||
        image: "vault:${VAULT_VERSION}"
 | 
					        image: "registry.example.com/project/vault:${VAULT_BUILD_DATE}-${VAULT_VERSION}"
 | 
				
			||||||
        container_name: "vault-${CONTEXT}"
 | 
					        container_name: "vault-${CONTEXT}"
 | 
				
			||||||
        networks:
 | 
					        networks:
 | 
				
			||||||
            vault-default:
 | 
					            vault-default:
 | 
				
			||||||
@@ -11,7 +11,7 @@ services:
 | 
				
			|||||||
                soft: ${ULIMIT_NPROC-65535}
 | 
					                soft: ${ULIMIT_NPROC-65535}
 | 
				
			||||||
                hard: ${ULIMIT_NPROC-65535}
 | 
					                hard: ${ULIMIT_NPROC-65535}
 | 
				
			||||||
        extends:
 | 
					        extends:
 | 
				
			||||||
            file: common-settings.yml
 | 
					            file: common-settings.yaml
 | 
				
			||||||
            service: common-settings
 | 
					            service: common-settings
 | 
				
			||||||
        ports:
 | 
					        ports:
 | 
				
			||||||
            # - "8080:80"
 | 
					            # - "8080:80"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,6 +6,7 @@ CONTEXT=ux_vilnius
 | 
				
			|||||||
# ---
 | 
					# ---
 | 
				
			||||||
# VAULT_VERSION=x.y.z
 | 
					# VAULT_VERSION=x.y.z
 | 
				
			||||||
# VAULT_VIP=10.1.1.2
 | 
					# VAULT_VIP=10.1.1.2
 | 
				
			||||||
 | 
					# VAULT_BUILD_DATE=20230731
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,18 +36,38 @@ docker context create fully.qualified.domain.name --docker 'host=ssh://root@full
 | 
				
			|||||||
{% set components = cookiecutter.__component_list_slug.split(',') -%}
 | 
					{% set components = cookiecutter.__component_list_slug.split(',') -%}
 | 
				
			||||||
{%- for component in components %}
 | 
					{%- for component in components %}
 | 
				
			||||||
{%- if loop.first %}
 | 
					{%- if loop.first %}
 | 
				
			||||||
 | 
					> Skip to [Pull](#pull) if you already have images in your private registry ready to use. Otherwise read on to build them now.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FIXME We build the `{{ cookiecutter.__service_slug }}` image locally. Our adjustment to the official image is simply adding `/tmp/{{ cookiecutter.__service_slug }}` to it. See {% if ',' in cookiecutter.__component_list_slug %}[build-context/{{ cookiecutter.__service_slug }}/Dockerfile](build-context/{{ cookiecutter.__service_slug }}/Dockerfile){%- else %}[build-context/Dockerfile](build-context/Dockerfile){%- endif %}. We use `/tmp/{{ cookiecutter.__service_slug }}` to bind-mount a dedicated ZFS dataset for the application's `tmpdir` location.
 | 
					FIXME We build the `{{ cookiecutter.__service_slug }}` image locally. Our adjustment to the official image is simply adding `/tmp/{{ cookiecutter.__service_slug }}` to it. See {% if ',' in cookiecutter.__component_list_slug %}[build-context/{{ cookiecutter.__service_slug }}/Dockerfile](build-context/{{ cookiecutter.__service_slug }}/Dockerfile){%- else %}[build-context/Dockerfile](build-context/Dockerfile){%- endif %}. We use `/tmp/{{ cookiecutter.__service_slug }}` to bind-mount a dedicated ZFS dataset for the application's `tmpdir` location.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
docker compose --project-name "${COMPOSE_PROJECT}" --file "${COMPOSE_FILE}" --file "${COMPOSE_OVERRIDE}" --env-file "${COMPOSE_ENV}" --profile 'build-{{ cookiecutter.__service_slug }}' build
 | 
					docker compose --project-name "${COMPOSE_PROJECT}" --file "${COMPOSE_FILE}" --file "${COMPOSE_OVERRIDE}" --env-file "${COMPOSE_ENV}" --profile 'build-{{ cookiecutter.__service_slug }}' build
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
{%- endif %}
 | 
					{%- endif %}
 | 
				
			||||||
{%- endfor %}
 | 
					{% endfor %}
 | 
				
			||||||
 | 
					## Push
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Push to Docker Hub or your private registry. Setting up a private registry is out of scope of this repo.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					source "${COMPOSE_ENV}"
 | 
				
			||||||
 | 
					{%- set components = cookiecutter.__component_list_slug.split(',') -%}
 | 
				
			||||||
 | 
					{%- if ',' in cookiecutter.__component_list_slug %}
 | 
				
			||||||
 | 
					for image in{% for component in components %} \
 | 
				
			||||||
 | 
					    '{%- if cookiecutter.build == "yes" -%}{%- if loop.first -%}registry.example.com/project/{%- endif -%}{%- endif -%}{{ component }}:'"{%- if cookiecutter.build == "yes" -%}{%- if loop.first -%}${% raw %}{{% endraw %}{{ component.upper() }}_BUILD_DATE{% raw %}}{% endraw %}-{%- endif -%}{%- endif -%}${% raw %}{{% endraw %}{{ component.upper() }}_VERSION{% raw %}}{% endraw %}"{%- endfor %}; do
 | 
				
			||||||
 | 
					        docker push 'registry.example.com/project/'"${image}"
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
 | 
					{%- else %}
 | 
				
			||||||
 | 
					docker push "{%- if cookiecutter.build == "yes" -%}registry.example.com/project/{%- endif -%}{{ cookiecutter.__component_list_slug }}:{%- if cookiecutter.build == "yes" -%}${% raw %}{{% endraw %}{{ cookiecutter.__component_list_slug.upper() }}_BUILD_DATE{% raw %}}{% endraw %}-{%- endif -%}${% raw %}{{% endraw %}{{ cookiecutter.__component_list_slug.upper() }}_VERSION{% raw %}}{% endraw %}"
 | 
				
			||||||
 | 
					{%- endif %}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
{%- endif %}
 | 
					{%- endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Pull
 | 
					## Pull
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{% if cookiecutter.build == "yes" %}FIXME Rewrite either [Build](#build) or this paragraph for which images are built and which ones pulled, `--profile 'full'` may not make sense FIXME {% endif %}Pull images from Docker Hub verbatim.
 | 
					{% if cookiecutter.build == "yes" %}> Skip this step if you just built images that still exist locally on your build host.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FIXME Rewrite either [Build](#build) or this paragraph for which images are built and which ones pulled, `--profile 'full'` may not make sense.{% else %}Pull images from Docker Hub verbatim.{% endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
docker compose --project-name "${COMPOSE_PROJECT}" --file "${COMPOSE_FILE}" --env-file "${COMPOSE_ENV}" --profile 'full' pull
 | 
					docker compose --project-name "${COMPOSE_PROJECT}" --file "${COMPOSE_FILE}" --env-file "${COMPOSE_ENV}" --profile 'full' pull
 | 
				
			||||||
@@ -55,7 +75,7 @@ docker compose --project-name "${COMPOSE_PROJECT}" --file "${COMPOSE_FILE}" --en
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
## Copy to target
 | 
					## Copy to target
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Copy images to target Docker host, that is assuming you deploy to a machine that itself has no network route to reach Docker Hub. Copying in its simplest form involves a local `docker save` and a remote `docker load`. Consider the helper mini-project [quico.space/Quico/copy-docker](https://quico.space/Quico/copy-docker) where [copy-docker.sh](https://quico.space/Quico/copy-docker/src/branch/main/copy-docker.sh) allows the following workflow:
 | 
					Copy images to target Docker host, that is assuming you deploy to a machine that itself has no network route to reach Docker Hub or your private registry of choice. Copying in its simplest form involves a local `docker save` and a remote `docker load`. Consider the helper mini-project [quico.space/Quico/copy-docker](https://quico.space/Quico/copy-docker) where [copy-docker.sh](https://quico.space/Quico/copy-docker/src/branch/main/copy-docker.sh) allows the following workflow:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
source "${COMPOSE_ENV}"
 | 
					source "${COMPOSE_ENV}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,8 @@ services:
 | 
				
			|||||||
{%- set components = cookiecutter.__component_list_slug.split(',') -%}
 | 
					{%- set components = cookiecutter.__component_list_slug.split(',') -%}
 | 
				
			||||||
{% for component in components %}
 | 
					{% for component in components %}
 | 
				
			||||||
    {{ component }}-build:
 | 
					    {{ component }}-build:
 | 
				
			||||||
        image: "{{ component }}:${% raw %}{{% endraw %}{{ component.upper() }}_VERSION{% raw %}}{% endraw %}"
 | 
					        # FIXME image name with or without slash? Docker Hub or private registry? With or without *_BUILD_DATE? FIXME
 | 
				
			||||||
 | 
					        image: "{%- if cookiecutter.build == "yes" -%}{%- if loop.first -%}registry.example.com/project/{%- endif -%}{%- endif -%}{{ component }}:{%- if cookiecutter.build == "yes" -%}{%- if loop.first -%}${% raw %}{{% endraw %}{{ component.upper() }}_BUILD_DATE{% raw %}}{% endraw %}-{%- endif -%}{%- endif -%}${% raw %}{{% endraw %}{{ component.upper() }}_VERSION{% raw %}}{% endraw %}"
 | 
				
			||||||
        profiles: ["build", "build-{{ component }}"]
 | 
					        profiles: ["build", "build-{{ component }}"]
 | 
				
			||||||
        build:
 | 
					        build:
 | 
				
			||||||
            context: "build-context/{{ component }}"
 | 
					            context: "build-context/{{ component }}"
 | 
				
			||||||
@@ -14,7 +15,8 @@ services:
 | 
				
			|||||||
{%- endfor %}
 | 
					{%- endfor %}
 | 
				
			||||||
{%- else %}
 | 
					{%- else %}
 | 
				
			||||||
    {{ cookiecutter.__component_list_slug }}-build:
 | 
					    {{ cookiecutter.__component_list_slug }}-build:
 | 
				
			||||||
        image: "{{ cookiecutter.__component_list_slug }}:${% raw %}{{% endraw %}{{ cookiecutter.__component_list_slug.upper() }}_VERSION{% raw %}}{% endraw %}"
 | 
					        # FIXME image name with or without slash? Docker Hub or private registry? With or without *_BUILD_DATE? FIXME
 | 
				
			||||||
 | 
					        image: "{%- if cookiecutter.build == "yes" -%}registry.example.com/project/{%- endif -%}{{ cookiecutter.__component_list_slug }}:{%- if cookiecutter.build == "yes" -%}${% raw %}{{% endraw %}{{ cookiecutter.__component_list_slug.upper() }}_BUILD_DATE{% raw %}}{% endraw %}-{%- endif -%}${% raw %}{{% endraw %}{{ cookiecutter.__component_list_slug.upper() }}_VERSION{% raw %}}{% endraw %}"
 | 
				
			||||||
        profiles: ["build"]
 | 
					        profiles: ["build"]
 | 
				
			||||||
        build:
 | 
					        build:
 | 
				
			||||||
            context: "build-context/{{ cookiecutter.__component_list_slug }}"
 | 
					            context: "build-context/{{ cookiecutter.__component_list_slug }}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,8 +12,8 @@ services:
 | 
				
			|||||||
{%- endfor -%}
 | 
					{%- endfor -%}
 | 
				
			||||||
{%- for component in components %}
 | 
					{%- for component in components %}
 | 
				
			||||||
    {{ component }}:
 | 
					    {{ component }}:
 | 
				
			||||||
        # FIXME Docker Hub image name with or without slash? FIXME
 | 
					        # FIXME image name with or without slash? Docker Hub or private registry? With or without *_BUILD_DATE? FIXME
 | 
				
			||||||
        image: "{{ component }}:${% raw %}{{% endraw %}{{ component.upper() }}_VERSION{% raw %}}{% endraw %}"
 | 
					        image: "{%- if cookiecutter.build == "yes" -%}{%- if loop.first -%}registry.example.com/project/{%- endif -%}{%- endif -%}{{ component }}:{%- if cookiecutter.build == "yes" -%}{%- if loop.first -%}${% raw %}{{% endraw %}{{ component.upper() }}_BUILD_DATE{% raw %}}{% endraw %}-{%- endif -%}{%- endif -%}${% raw %}{{% endraw %}{{ component.upper() }}_VERSION{% raw %}}{% endraw %}"
 | 
				
			||||||
        container_name: "{{ cookiecutter.__service_slug }}-{{ component }}-${CONTEXT}"
 | 
					        container_name: "{{ cookiecutter.__service_slug }}-{{ component }}-${CONTEXT}"
 | 
				
			||||||
        networks:
 | 
					        networks:
 | 
				
			||||||
            {{ cookiecutter.__service_slug }}-default:
 | 
					            {{ cookiecutter.__service_slug }}-default:
 | 
				
			||||||
@@ -36,7 +36,7 @@ services:
 | 
				
			|||||||
                soft: ${ULIMIT_NPROC-65535}
 | 
					                soft: ${ULIMIT_NPROC-65535}
 | 
				
			||||||
                hard: ${ULIMIT_NPROC-65535}
 | 
					                hard: ${ULIMIT_NPROC-65535}
 | 
				
			||||||
        extends:
 | 
					        extends:
 | 
				
			||||||
            file: common-settings.yml
 | 
					            file: common-settings.yaml
 | 
				
			||||||
            service: common-settings
 | 
					            service: common-settings
 | 
				
			||||||
        ports:
 | 
					        ports:
 | 
				
			||||||
            # - "8080:80"
 | 
					            # - "8080:80"
 | 
				
			||||||
@@ -52,8 +52,8 @@ services:
 | 
				
			|||||||
{%- endfor -%}
 | 
					{%- endfor -%}
 | 
				
			||||||
{%- else %}
 | 
					{%- else %}
 | 
				
			||||||
    {{ cookiecutter.__component_list_slug }}:
 | 
					    {{ cookiecutter.__component_list_slug }}:
 | 
				
			||||||
        # FIXME Docker Hub image name with or without slash? FIXME
 | 
					        # FIXME image name with or without slash? Docker Hub or private registry? With or without *_BUILD_DATE? FIXME
 | 
				
			||||||
        image: "{{ cookiecutter.__component_list_slug }}:${% raw %}{{% endraw %}{{ cookiecutter.__component_list_slug.upper() }}_VERSION{% raw %}}{% endraw %}"
 | 
					        image: "{%- if cookiecutter.build == "yes" -%}registry.example.com/project/{%- endif -%}{{ cookiecutter.__component_list_slug }}:{%- if cookiecutter.build == "yes" -%}${% raw %}{{% endraw %}{{ cookiecutter.__component_list_slug.upper() }}_BUILD_DATE{% raw %}}{% endraw %}-{%- endif -%}${% raw %}{{% endraw %}{{ cookiecutter.__component_list_slug.upper() }}_VERSION{% raw %}}{% endraw %}"
 | 
				
			||||||
        container_name: "{{ cookiecutter.__service_slug }}-${CONTEXT}"
 | 
					        container_name: "{{ cookiecutter.__service_slug }}-${CONTEXT}"
 | 
				
			||||||
        networks:
 | 
					        networks:
 | 
				
			||||||
            {{ cookiecutter.__service_slug }}-default:
 | 
					            {{ cookiecutter.__service_slug }}-default:
 | 
				
			||||||
@@ -63,7 +63,7 @@ services:
 | 
				
			|||||||
                soft: ${ULIMIT_NPROC-65535}
 | 
					                soft: ${ULIMIT_NPROC-65535}
 | 
				
			||||||
                hard: ${ULIMIT_NPROC-65535}
 | 
					                hard: ${ULIMIT_NPROC-65535}
 | 
				
			||||||
        extends:
 | 
					        extends:
 | 
				
			||||||
            file: common-settings.yml
 | 
					            file: common-settings.yaml
 | 
				
			||||||
            service: common-settings
 | 
					            service: common-settings
 | 
				
			||||||
        ports:
 | 
					        ports:
 | 
				
			||||||
            # - "8080:80"
 | 
					            # - "8080:80"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,6 +11,7 @@ CONTEXT=ux_vilnius
 | 
				
			|||||||
{%- for component in components %}
 | 
					{%- for component in components %}
 | 
				
			||||||
{%- if loop.first %}
 | 
					{%- if loop.first %}
 | 
				
			||||||
# {{ component.upper() }}_VIP=10.1.1.2
 | 
					# {{ component.upper() }}_VIP=10.1.1.2
 | 
				
			||||||
 | 
					# {{ component.upper() }}_BUILD_DATE=20230731
 | 
				
			||||||
{%- endif %}
 | 
					{%- endif %}
 | 
				
			||||||
{%- endfor %}
 | 
					{%- endfor %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user