From c1bd7311429a9c9e2f6a4a219cd72947e0870582 Mon Sep 17 00:00:00 2001 From: daniel-j-h Date: Tue, 30 Apr 2024 19:09:22 +0200 Subject: [PATCH] Improves docker setup for basic usage to get started more easily --- Dockerfile | 100 +++++++++++++++++---------------- README.md | 13 +++++ docs/INSTALL.md | 6 +- resources/docker-entrypoint.sh | 2 +- 4 files changed, 71 insertions(+), 50 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8158ef0c..662c99e1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,52 +1,56 @@ -FROM debian:bullseye-slim AS src +FROM debian:bookworm-slim AS src LABEL Description="Tilemaker" Version="1.4.0" -ARG DEBIAN_FRONTEND=noninteractive - -# install dependencies -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - build-essential \ - liblua5.1-0 \ - liblua5.1-0-dev \ - libsqlite3-dev \ - shapelib \ - libshp-dev \ - libboost-program-options-dev \ - libboost-filesystem-dev \ - libboost-system-dev \ - libboost-iostreams-dev \ - rapidjson-dev \ - cmake \ - zlib1g-dev - -COPY CMakeLists.txt / -COPY cmake /cmake -COPY src /src -COPY include /include -COPY server /server - -WORKDIR /build - -RUN cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=g++ .. -RUN cmake --build . -RUN strip tilemaker -RUN strip tilemaker-server - -FROM debian:bullseye-slim -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - liblua5.1-0 \ - libshp-dev \ - libsqlite3-dev \ - libboost-filesystem-dev \ - libboost-program-options-dev \ - libboost-iostreams-dev -WORKDIR / -COPY --from=src /build/tilemaker . -COPY resources /resources -COPY process.lua . -COPY config.json . +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + build-essential \ + liblua5.1-0-dev \ + libsqlite3-dev \ + libshp-dev \ + libboost-program-options-dev \ + libboost-filesystem-dev \ + libboost-system-dev \ + libboost-iostreams-dev \ + rapidjson-dev \ + cmake \ + zlib1g-dev && \ + rm -rf /var/lib/apt/lists/* + +WORKDIR /usr/src/app + +COPY CMakeLists.txt ./ +COPY cmake ./cmake +COPY src ./src +COPY include ./include +COPY server ./server + +RUN mkdir build && \ + cd build && \ + cmake -DCMAKE_BUILD_TYPE=Release .. && \ + cmake --build . --parallel $(nproc) && \ + strip tilemaker && \ + strip tilemaker-server + +ENV PATH="/usr/src/app/build:$PATH" + +FROM debian:bookworm-slim +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + liblua5.1-0 \ + shapelib \ + libsqlite3-0 \ + libboost-filesystem1.74.0 \ + libboost-program-options1.74.0 \ + libboost-iostreams1.74.0 && \ + rm -rf /var/lib/apt/lists/* + +WORKDIR /usr/src/app +COPY --from=src /usr/src/app/build/tilemaker . +COPY --from=src /usr/src/app/build/tilemaker-server . +COPY resources ./resources +COPY process.lua ./ +COPY config.json ./ + +ENV PATH="/usr/src/app/build:$PATH" # Entrypoint for docker, wrapped with /bin/sh to remove requirement for executable permissions on script -ENTRYPOINT ["/bin/sh", "/resources/docker-entrypoint.sh"] +ENTRYPOINT ["/bin/sh", "/usr/src/app/resources/docker-entrypoint.sh"] +CMD ["--help"] diff --git a/README.md b/README.md index 84edd5be..7a40dde8 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,19 @@ See an example of a vector tile map produced by tilemaker at [tilemaker.org](htt ![Continuous Integration](https://github.com/systemed/tilemaker/workflows/Continuous%20Integration/badge.svg) +## Getting Started + +We provide a ready-to-use docker image that gets you started without having to compile tilemaker from source: + +1. Go to http://download.geofabrik.de/europe.html and download the `monaco-latest.osm.pbf` snapshot of OpenStreetMap + +2. Run tilemaker on the OpenStreetMap snapshot to generate [Protomaps](https://protomaps.com) vector tiles: + + docker run -it --rm -v (pwd):/data ghcr.io/systemed/tilemaker:master /data/monaco-latest.osm.pbf --output /data/monaco-latest.pmtiles + +3. Check out what's in the vector tiles e.g. by using the debug viewer [here](https://protomaps.github.io/PMTiles/) + + ## Installing tilemaker is written in C++14. The chief dependencies are: diff --git a/docs/INSTALL.md b/docs/INSTALL.md index 26cef84c..80b8c982 100644 --- a/docs/INSTALL.md +++ b/docs/INSTALL.md @@ -62,6 +62,10 @@ Build from project root directory with: The docker container can be run like this: - docker run -v /Users/Local/Downloads/:/srv -i -t --rm tilemaker /srv/germany-latest.osm.pbf --output=/srv/germany.mbtiles + docker run -it --rm -v $(pwd):/data tilemaker /data/monaco-latest.osm.pbf --output /data/monaco-latest.pmtiles + +The tilemaker-server can be run like this: + + docker run -it --rm -v $(pwd):/data --entrypoint /usr/src/app/tilemaker-server tilemaker --help Keep in mind to map the volume your .osm.pbf files are in to a path within your docker container, as seen in the example above. diff --git a/resources/docker-entrypoint.sh b/resources/docker-entrypoint.sh index 8c267bc0..0c3b9879 100755 --- a/resources/docker-entrypoint.sh +++ b/resources/docker-entrypoint.sh @@ -6,4 +6,4 @@ echo "DOCKER WARNING: The --store option can be used to partly reduce memory usa echo "--------------------------------------------------------------------------------" >&2 # Proceed to run the command passed to the script -exec /tilemaker "$@" \ No newline at end of file +exec /usr/src/app/tilemaker "$@"