From ecbc902723d2ef2afad036dba7f47f24f3d4f826 Mon Sep 17 00:00:00 2001 From: Olivier Samyn Date: Sat, 21 Oct 2023 22:38:17 +0200 Subject: [PATCH] Add multi-stage dockerfile build example (#2327) * Add multi-stage dockerfile build example * Simplify install instructions, add docker image deployment example --- .../documentation/deployment/docker-image.md | 36 +++++++++++++++++++ .../getting-started/installation.md | 13 +++++++ 2 files changed, 49 insertions(+) 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 fbc18dc634..2c568cfdf7 100644 --- a/docs/content/documentation/getting-started/installation.md +++ b/docs/content/documentation/getting-started/installation.md @@ -178,6 +178,19 @@ 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 + +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 + +COPY . /project +WORKDIR /project +RUN ["zola", "build"] +``` + ## Windows