In dit artikel wordt gedetailleerd beschreven hoe u een Docker-image bouwt.

Principe

  1. Gebruik Hugo om de site te bouwen en statische bestanden te genereren.
  2. Gebruik Nginx als server om verzoeken af ​​te handelen.

Dockerbestand

Maak een Dockerfile in de hoofdmap van de site.

 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
  • Er zijn twee fasen in de build: een build-fase en een release-fase. De releasefase bevat alleen de gegenereerde statische bestanden, waardoor de grootte van de Docker-image zo klein mogelijk blijft.
  • Als u defaultContentLanguageInSubdir heeft ingeschakeld, verwijder dan de opmerkingen en wijzig deze indien nodig.
  • De parameter HUGO_BASEURL wordt gebruikt om de baseURL van de site op te geven tijdens het bouwen, en wordt over het algemeen gebruikt wanneer de baseURL afwijkt van de configuratie, dus u kunt deze zelf verwijderen als u deze niet nodig heeft.
  • HUGO_MODULE_PROXY en NPM_CONFIG_REGISTRY zijn optionele buildparameters die kunnen worden verwijderd als ze niet nodig zijn.

Nginx

Maak een deploy/nginx/default.conf in de hoofdmap van de site:

 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}

Bouw

1$ docker build -t mysite \
2  --build-arg HUGO_BASEURL=https://example.com \
3  .
  • mysite: de naam van de afbeelding.
  • HUGO_BASEURL: de baseURL.

Voor gebruikers op het Chinese vasteland moet u HUGO_MODULE_PROXY en NPM_CONFIG_REGISTRY opgeven om de image succesvol en snel te kunnen bouwen:

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  .

Implementatie

Er zijn veel manieren om Docker-image te implementeren, zoals docker run, k8s, enz. In dit artikel wordt alleen docker run uitgelegd.

Loop

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

Voor lokaal testen moet u de baseURL parameter of de HUGO_BASEURL build parameter wijzigen, b.v. http://localhost:2333.

Stop

1$ docker stop mysite

Begin

1$ docker start mysite

Verwijderen

1$ docker rm mysite