Dit artikel beschrijft gedetailleerd hoe je een Docker-image bouwt.
Principe
- Gebruik Hugo om de site te bouwen en statische bestanden te genereren.
- Gebruik Nginx als server om verzoeken af te handelen.
Dockerfile
Maak een Dockerfile aan 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 bouwfase en een releasefase. De releasefase bevat alleen de gegenereerde statische bestanden, waardoor de Docker-image zo klein mogelijk blijft.
- Als
defaultContentLanguageInSubdiris ingeschakeld, verwijder dan het commentaarteken en pas de instelling aan. - De parameter
HUGO_BASEURLwordt gebruikt om debaseURLvan de site tijdens de build op te geven; dit is vooral handig wanneer debaseURLafwijkt van de configuratie. Je kunt dit verwijderen als het niet nodig is. HUGO_MODULE_PROXYenNPM_CONFIG_REGISTRYzijn optionele buildparameters die je kunt verwijderen als ze niet nodig zijn.
Nginx
Maak een deploy/nginx/default.conf aan 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}
Bouwen
1$ docker build -t mysite \
2 --build-arg HUGO_BASEURL=https://example.com \
3 .
mysite: de naam van de image.HUGO_BASEURL: debaseURL.
Voor gebruikers in China (vasteland) moet je 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 .
Deployment
Er zijn veel manieren om een Docker-image te deployen, zoals docker run, k8s, enzovoort. Dit artikel behandelt alleen docker run.
Uitvoeren
1$ docker run \
2 -p 2333:80 \
3 --name mysite \
4 --restart=always \
5 mysite
Voor lokaal testen moet je de
baseURL-parameter of de buildparameterHUGO_BASEURLwijzigen, bijv.http://localhost:2333.
Stoppen
1$ docker stop mysite
Starten
1$ docker start mysite
Verwijderen
1$ docker rm mysite