本文将详细介绍如何构建 Docker 镜像。
原理§
- 使用 Hugo 构建站点,生成静态文件。
 - 使用 Nginx 作为服务器,处理请求。
 
Dockerfile§
于根目录创建 Dockerfile:
 1###############
 2# Build Stage #
 3###############
 4FROM klakegg/hugo:ext-ubuntu 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
- 构建一共有两个阶段,一个构建阶段,一个发布阶段。发布阶段仅包含生成的静态文件,尽可能地降低 Docker 镜像大小。
 - 如果你开启了 
defaultContentLanguageInSubdir,请取消对应的注释和按需修改。 HUGO_BASEURL参数用于构建期间指定站点的baseURL,一般用于baseURL不同于配置的情况,如果不需要可以自行删除。HUGO_MODULE_PROXY和NPM_CONFIG_REGISTRY都是可选的构建参数,不需要可以自行删除。
Nginx§
于根目录创建 deploy/nginx/default.conf:
 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}
构建§
1$ docker build -t mysite \
2  --build-arg HUGO_BASEURL=https://example.com \
3  .
mysite:镜像名称。HUGO_BASEURL:baseURL。
对于位于中国大陆的用户,需要指定 HUGO_MODULE_PROXY 和 NPM_CONFIG_REGISTRY,以便成功和快速地构建镜像:
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  .
部署§
Docker 部署方式很多,如 docker run,k8s 等等,本文仅对 docker run 进行说明。
创建并启动§
1$ docker run \
2  -p 2333:80 \
3  --name mysite \
4  --restart=always \
5  mysite
本地测试时,需要修改
baseURL参数或者HUGO_BASEURL构建参数,如:http://localhost:2333。
停止§
1$ docker stop mysite
启动§
1$ docker start mysite
删除§
1$ docker rm mysite


评论