前言:
因工作需要,需要将mkdocs站点的内容在构建后,导出为一份pdf文件,所以需要重新构建镜像
完整的dockerfile:
# Copyright (c) 2016-2022 Martin Donath <[email protected]> # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. FROM python:3.9.2-alpine3.13 #Change repo RUN cp /etc/apk/repositories /etc/apk/repositories.bak RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories RUN pip install --upgrade pip # Build-time flags ARG WITH_PLUGINS=true # Environment variables ENV PACKAGES=/usr/local/lib/python3.9/site-packages ENV PYTHONDONTWRITEBYTECODE=1 # Set build directory WORKDIR /tmp # Copy files necessary for build COPY material material COPY MANIFEST.in MANIFEST.in COPY package.json package.json COPY README.md README.md COPY requirements.txt requirements.txt COPY setup.py setup.py # Perform build and cleanup artifacts and caches RUN apk update \ && apk --update --upgrade --no-cache add cairo-dev pango-dev gdk-pixbuf-dev \ && apk --update --upgrade --no-cache add libsass RUN set -ex \ && apk add --no-cache --virtual .build-deps \ musl-dev g++ jpeg-dev zlib-dev libffi-dev libsass-dev \ && SYSTEM_SASS=1 pip install --no-cache-dir \ mdx-gh-links mkdocs-redirects mkdocs-minify-plugin \ mkdocs-with-pdf \ && apk del .build-deps RUN \ apk upgrade --update-cache -a \ && \ apk add --no-cache \ git \ git-fast-import \ openssh \ && \ apk add --no-cache --virtual .build \ gcc \ musl-dev \ && \ pip install --no-cache-dir . \ && \ if [ "${WITH_PLUGINS}" = "true" ]; then \ pip install --no-cache-dir \ "mkdocs-minify-plugin>=0.3" \ "mkdocs-redirects>=1.0"; \ fi \ && \ apk del .build \ && \ for theme in mkdocs readthedocs; do \ rm -rf ${PACKAGES}/mkdocs/themes/$theme; \ ln -s \ ${PACKAGES}/material \ ${PACKAGES}/mkdocs/themes/$theme; \ done \ && \ rm -rf /tmp/* /root/.cache \ && \ find ${PACKAGES} \ -type f \ -path "*/__pycache__/*" \ -exec rm -f {} \; # Headless Chrome RUN apk --update --upgrade --no-cache add udev chromium \ && chromium-browser --version # Add Chinese Font COPY fonts /usr/share/fonts/ RUN apk --update --upgrade --no-cache add fontconfig ttf-freefont font-noto terminus-font \ && fc-cache -f \ && fc-list | sort # Set working directory WORKDIR /docs # Expose MkDocs development server port EXPOSE 8000 # Start development server by default ENTRYPOINT ["mkdocs"] CMD ["serve", "--dev-addr=0.0.0.0:8000"]
其中fonts目录中的字体是宋体和微软雅黑,来自win10的系统目录下的fonst的字体
PS:其实这个dockerfile是在mkdocs-material的基础上结合mkdocs的合并而成。
使用方法:在mkdcocs.yml中配置:
plugins: - with-pdf: #author: WHO #copyright: ANY TEXT # #cover: false #back_cover: true #cover_title: TITLE TEXT #cover_subtitle: SUBTITLE TEXT #custom_template_path: TEMPLATES PATH # #toc_title: TOC TITLE TEXT #heading_shift: false #toc_level: 3 #ordered_chapter_level: 2 #excludes_children: # - 'release-notes/:upgrading' # - 'release-notes/:changelog' # #exclude_pages: # - 'bugs/' # - 'appendix/contribute/' #convert_iframe: # - src: IFRAME SRC # img: POSTER IMAGE URL # text: ALTERNATE TEXT # - src: ... #two_columns_level: 3 # #render_js: true #headless_chrome_path: headless-chromium # #output_path: any-place/document.pdf #enabled_if_env: ENABLE_PDF_EXPORT # #debug_html: true #show_anchors: true #verbose: true
然后在构建:
参考:
1.https://github.com/orzih/mkdocs-with-pdf
2.https://github.com/squidfunk/mkdocs-material
3.https://github.com/mkdocs/mkdocs/
mkdocs增加pdf功能