In diesem Artikel erfahren Sie, wie Sie ein Docker-Image erstellen.
Prinzip
- Verwenden Sie Hugo, um die Site zu erstellen und statische Dateien zu generieren.
- 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
defaultContentLanguageInSubdiraktiviert haben, kommentieren Sie es bitte aus und ändern Sie es bei Bedarf. - Der Parameter
HUGO_BASEURLwird verwendet, um dasbaseURLder Site während des Builds anzugeben, und wird im Allgemeinen verwendet, wenn sich dasbaseURLvon der Konfiguration unterscheidet, sodass Sie es selbst entfernen können, wenn Sie es nicht benötigen. HUGO_MODULE_PROXYundNPM_CONFIG_REGISTRYsind 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:dasbaseURL.
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 denHUGO_BASEURL-Build-Parameter ändern, z. B.http://localhost:2333.
Stoppen
1$ docker stop mysite
Start
1$ docker start mysite
Entfernen
1$ docker rm mysite
Kommentare