In diesem Artikel erfahren Sie, wie Sie ein Docker-Image erstellen.

Prinzip

  1. Verwenden Sie Hugo, um die Site zu erstellen und statische Dateien zu generieren.
  2. Verwenden Sie Nginx als Server zur Bearbeitung von Anfragen.

Docker-Datei

Erstellen Sie ein Dockerfile im Site-Stammverzeichnis.

 1###############
 2# Build Stage #
 3###############
 4FROM razonyang/hugo as builder
 5
 6WORKDIR /src
 7COPY . /src
 8
 9ARG HUGO_ENV=production
10ENV HUGO_ENV=${HUGO_ENV}
11
12# Base URL
13ARG HUGO_BASEURL=/
14ENV HUGO_BASEURL=${HUGO_BASEURL}
15
16# Module Proxy
17ARG HUGO_MODULE_PROXY=
18ENV HUGO_MODULE_PROXY=${HUGO_MODULE_PROXY}
19
20# NPM mirrors, such as https://registry.npmmirror.com
21ARG NPM_CONFIG_REGISTRY=
22ENV NPM_CONFIG_REGISTRY=${NPM_CONFIG_REGISTRY}
23
24# Install dependencies
25RUN npm install
26RUN npm install -g @fullhuman/postcss-purgecss rtlcss
27
28# Build site
29RUN hugo --minify --gc --enableGitInfo
30
31# Set the fallback 404 page if defaultContentLanguageInSubdir is enabled, please replace the `en` with your default language code.
32# RUN cp ./public/en/404.html ./public/404.html
33
34###############
35# Final Stage #
36###############
37FROM nginx
38COPY --from=builder /src/public /app
39COPY deploy/nginx/default.conf /etc/nginx/conf.d/default.conf
  • Der Build besteht aus zwei Phasen: einer Build-Phase und einer Release-Phase. Die Release-Phase enthält nur die generierten statischen Dateien, wodurch die Größe des Docker-Images so klein wie möglich gehalten wird.
  • Wenn Sie defaultContentLanguageInSubdir aktiviert haben, kommentieren Sie es bitte aus und ändern Sie es bei Bedarf.
  • Der Parameter HUGO_BASEURL wird verwendet, um das baseURL der Site während des Builds anzugeben, und wird im Allgemeinen verwendet, wenn sich das baseURL von der Konfiguration unterscheidet, sodass Sie es selbst entfernen können, wenn Sie es nicht benötigen.
  • HUGO_MODULE_PROXY und NPM_CONFIG_REGISTRY sind optionale Build-Parameter, die entfernt werden können, wenn sie nicht benötigt werden.

Nginx

Erstellen Sie ein deploy/nginx/default.conf im Site-Root:

 1server {
 2    listen       80;
 3    listen  [::]:80;
 4    server_name  localhost;
 5    
 6    root   /app;
 7
 8    location / {
 9        index  index.html index.htm;
10    }
11
12    location ~* ^/([^/]+) {
13        index  index.html index.htm;
14        error_page 404 = @error;
15    }
16
17    error_page 404 /404.html;
18    location @error {
19        try_files /$1/404.html /404.html =404;
20    }
21}

Bauen

1$ docker build -t mysite \
2  --build-arg HUGO_BASEURL=https://example.com \
3  .
  • mysite: der Bildname.
  • HUGO_BASEURL:das baseURL.

Für Benutzer auf dem chinesischen Festland müssen Sie HUGO_MODULE_PROXY und NPM_CONFIG_REGISTRY angeben, um das Image erfolgreich und schnell zu erstellen:

1$ docker build -t mysite \
2  --build-arg HUGO_BASEURL=https://example.com \
3  --build-arg HUGO_MODULE_PROXY=https://goproxy.cn \
4  --build-arg NPM_CONFIG_REGISTRY=https://registry.npmmirror.com \
5  .

Bereitstellung

Es gibt viele Möglichkeiten, ein Docker-Image bereitzustellen, z. B. docker run, k8s usw. In diesem Artikel wird nur docker run erläutert.

Laufen

1$ docker run \
2  -p 2333:80 \
3  --name mysite \
4  --restart=always \
5  mysite

Für lokale Tests müssen Sie den baseURL-Parameter oder den HUGO_BASEURL-Build-Parameter ändern, z. B. http://localhost:2333.

Stoppen

1$ docker stop mysite

Start

1$ docker start mysite

Entfernen

1$ docker rm mysite