From 2b0a10deb2b6998a89fe679542193b80ebdb97af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Samyn=20=F0=9F=8E=BB?= Date: Wed, 11 Oct 2023 11:42:36 +0200 Subject: [PATCH 1/2] Add multi-stage dockerfile build example --- .../getting-started/installation.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/content/documentation/getting-started/installation.md b/docs/content/documentation/getting-started/installation.md index fbc18dc634..56bbc005e9 100644 --- a/docs/content/documentation/getting-started/installation.md +++ b/docs/content/documentation/getting-started/installation.md @@ -178,6 +178,22 @@ You can now browse http://localhost:8080. > port between 1024 and 9000 for live reload. The new docker command would be > `$ docker run -u "$(id -u):$(id -g)" -v $PWD:/app --workdir /app -p 8080:8080 -p 1024:1024 ghcr.io/getzola/zola:v0.17.1 serve --interface 0.0.0.0 --port 8080 --base-url localhost` +#### Multi-stage build + +Build current folder content and create a lightweight web server image using static-web-server: + +```Dockerfile +FROM ghcr.io/getzola/zola:v0.17.1 as zola + +COPY . /project +WORKDIR /project +RUN ["zola", "build"] + +FROM ghcr.io/static-web-server/static-web-server:2 +WORKDIR / +COPY --from=zola /project/public /public +``` + ## Windows From 390322000af29c55f84194f9f4db534232e0d42f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Samyn=20=F0=9F=8E=BB?= Date: Fri, 20 Oct 2023 17:53:28 +0200 Subject: [PATCH 2/2] Simplify install instructions, add docker image deployment example --- .../documentation/deployment/docker-image.md | 36 +++++++++++++++++++ .../getting-started/installation.md | 7 ++-- 2 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 docs/content/documentation/deployment/docker-image.md diff --git a/docs/content/documentation/deployment/docker-image.md b/docs/content/documentation/deployment/docker-image.md new file mode 100644 index 0000000000..f3a1dd2926 --- /dev/null +++ b/docs/content/documentation/deployment/docker-image.md @@ -0,0 +1,36 @@ ++++ +title = "Docker image" +weight = 90 ++++ + +If you have to distribute a Zola based web site through Docker, it's easy to do with a multi-stage build. + +Here is an example that builds the current folder, and put the result in a docker image that will be served by +[static-web-server](https://static-web-server.net/), a minimalist web server written in rust. + +Of course, you may want to replace the second stage with another static web server like Nginx or Apache. + +```Dockerfile +FROM ghcr.io/getzola/zola:v0.17.1 as zola + +COPY . /project +WORKDIR /project +RUN ["zola", "build"] + +FROM ghcr.io/static-web-server/static-web-server:2 +WORKDIR / +COPY --from=zola /project/public /public +``` + +To build your website as a docker image, you then run: +```shell +docker build -t my_website:latest . +``` + +To test your site, just run the docker image and browse [http://localhost:8000](http://localhost:8000) + +``` +docker run --rm -p 8000:80 my_website:latest +``` + +Note that, if you want to be able to use your docker image from multiple locations, you'll have to set `base_url` to `/`. diff --git a/docs/content/documentation/getting-started/installation.md b/docs/content/documentation/getting-started/installation.md index 56bbc005e9..2c568cfdf7 100644 --- a/docs/content/documentation/getting-started/installation.md +++ b/docs/content/documentation/getting-started/installation.md @@ -180,7 +180,8 @@ You can now browse http://localhost:8080. #### Multi-stage build -Build current folder content and create a lightweight web server image using static-web-server: +Since there is no shell in the Zola docker image, if you want to use it from inside a Dockerfile, you have to use the +exec form of `RUN`, like: ```Dockerfile FROM ghcr.io/getzola/zola:v0.17.1 as zola @@ -188,10 +189,6 @@ FROM ghcr.io/getzola/zola:v0.17.1 as zola COPY . /project WORKDIR /project RUN ["zola", "build"] - -FROM ghcr.io/static-web-server/static-web-server:2 -WORKDIR / -COPY --from=zola /project/public /public ```