Skip to content

Optimise container images: multi-stage (size reuduction) & one process per container #338

@spwoodcock

Description

@spwoodcock

Issue

Currently the web container could be optimised in two ways:

  • The size could be greatly reduced from 3.9GB to around 1.5GB using a multi-stage build.
  • It has three processes inside the same container: the Rails server, cgimap, and Apache. This should ideally be split out to separate containers in line with best practices (one process per container, PID 1).

Solution

  • Have already done the build optimisation for the rails server in hotosm/osm-sandbox.
  • I also added a small script to build the cgimap image separately:
    #!/bin/sh
    
    CGIMAP_VERSION=v2.0.0
    
    docker build \
        "https://github.com/zerebubuth/openstreetmap-cgimap.git#${CGIMAP_VERSION}" \
        --file docker/debian/Dockerfile_bookworm \
        --tag ghcr.io/hotosm/osm-sandbox/cgimap:${CGIMAP_VERSION}
  • The webserver should run independently, routing to either the Rails server container, or cgimap container, depending on the route accessed. This could easily be changed to nginx from Apache too.

I plan to contribute this change, as discussed a few months ago! Finally got time to work on this 😄

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions