ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OI Wiki 基于 Docker 的部署全指南:镜像拉取、自定义构建与容器运维

OI Wiki 基于 Docker 的部署全指南:镜像拉取、自定义构建与容器运维 OI Wiki 基于 Docker 的部署全指南镜像拉取、自定义构建与容器运维【免费下载链接】OI-wiki:star2: Wiki of OI / ICPC for everyone. 某大型游戏线上攻略内含炫酷算术魔法项目地址: https://gitcode.com/GitHub_Trending/oi/OI-wiki本篇指南系统讲解如何基于 Docker 部署OI Wiki面向 OI / ACM-ICPC 的编程竞赛知识整合站点的本地运行环境。文章覆盖两种部署路径——直接拉取官方预构建镜像以及基于仓库源码自行构建镜像并深入解析镜像内部的构建原理Dockerfile与容器内置的wiki-*系列运维命令其定义见 .bashrc。读完本文你将能够独立完成 OI Wiki 镜像的获取、构建参数调优、容器启停与数据维护并能在主机浏览器中访问自建的 Wiki 站点。部署前准备权限与 Docker 环境执行本文所有命令前请先确认 Docker 已安装且守护进程运行正常。与多数容器操作一致以下命令须在root 用户或已加入docker用户组的用户下执行否则会遇到权限拒绝错误。提示可通过docker --version与docker ps快速验证 Docker 是否可用docker ps能同时确认当前用户是否有权限访问 Docker 守护进程。方式一直接拉取预构建镜像开箱即用OI Wiki 团队维护了官方预构建镜像无需本地构建即可直接使用。在主机中任选其一执行# Docker Hub 镜像官方镜像仓库 docker pull 24oi/oi-wiki # DaoCloud Hub 镜像国内镜像仓库 docker pull daocloud.io/sirius/oi-wiki # Tencent Hub 镜像国内镜像仓库 docker pull ccr.ccs.tencentyun.com/oi-wiki/oi-wiki三个仓库对应不同网络环境官方 Docker Hub 适合国际网络DaoCloud 与腾讯云仓库面向国内用户拉取速度通常更快。三者的镜像内容一致选择原则是挑网络可达性最好的那个。方式二从仓库源码自行构建镜像若需要定制镜像内容例如更换克隆源、使用国内 PyPI 镜像、调整监听地址可从源码自行构建。基本构建命令# 以下命令在主机中运行 # 1. 克隆 OI Wiki 的 Git 仓库可用任意可访问的仓库镜像地址 git clone OI-wiki 仓库地址 cd OI-wiki/ # 2. 构建镜像 docker build -t [name][:tag] . --build-arg [variable1][value1] [variable2][value2]...参数说明-t [name][:tag]必须[name]指定镜像名[tag]可选地指定镜像标签若设置了标签则运行时镜像名由name:tag两部分构成--build-arg向构建过程传入环境变量支持同时传递多个keyvalue对。可用构建环境变量变量名作用默认值WIKI_REPO指定克隆 OI Wiki 仓库所使用的镜像站点未设置时自动使用 GitHub 官方仓库PYPI_MIRROR指定安装 Python 依赖时的 PyPI 镜像站点未设置时自动使用官方 PyPILISTEN_IP容器内 MkDocs 服务的监听 IP0.0.0.0监听所有 IPLISTEN_PORT容器内 MkDocs 服务的监听端口8000其中PYPI_MIRROR在国内网络环境下建议使用 TUNA 镜像站https://pypi.tuna.tsinghua.edu.cn/simple/构建示例docker build -t OI_Wiki . --build-arg WIKI_REPOOI-wiki 仓库镜像地址 PYPI_MIRRORhttps://pypi.tuna.tsinghua.edu.cn/simple/该命令构建一个名为OI_Wiki标签使用默认值的镜像WIKI_REPO指向镜像加速站点以加速仓库克隆PYPI_MIRROR使用 TUNA 镜像站以加速 Python 依赖安装。构建原理读懂 Dockerfile仓库根目录下的 Dockerfile 完整描述了镜像的构建过程理解它可以帮你更精准地定制构建参数基础镜像基于ubuntu:22.04并在元数据中标明镜像维护者见 Dockerfile构建参数声明通过ARG WIKI_REPO PYPI_MIRROR LISTEN_IP LISTEN_PORT声明四个可覆盖变量随后用ENV为LISTEN_IP、LISTEN_PORT设置默认值分别为0.0.0.0与8000这正是上表默认值的来源见 Dockerfile工具链安装依次安装git wget curl gcc g make、Node.js 18经由 nodesource 源以及uvPython 包与项目管理工具为后续克隆与构建做准备见 Dockerfile仓库克隆与依赖安装执行git clone ${WIKI_REPO:-...} --depth1浅克隆仓库随后uv sync --index-url ${PYPI_MIRROR:-...}安装 Python 依赖、yarn --frozen-lockfile按锁文件安装前端依赖见 Dockerfile。这里的参数展开语法就是--build-arg生效的位置——不传时自动回退到默认源运行环境固化将仓库根目录的 .bashrc 复制到/root/工作目录切换到/OI-wikiEXPOSE声明监听端口最终CMD [/bin/bash]让容器默认以交互式 bash 启动见 Dockerfile。从源码结构可以推断容器启动后即为一个包含完整源码、Python/Node 依赖与自定义 bash 别名的开发环境这正是后续wiki-*系列命令能够直接使用的前提。运行容器基本运行命令# 以下命令在主机中运行 docker run -d -it [image]参数说明[image]必须指定要运行的镜像。例如从 Docker Hub 拉取的为24oi/oi-wiki从 DaoCloud Hub 拉取的则为daocloud.io/sirius/oi-wiki-p [port]:8000必须若要对外访问将容器端口映射到主机端口。8000对应容器内 MkDocs 服务的默认监听端口与构建时LISTEN_PORT默认值一致若构建时修改了LISTEN_PORT此处目标端口应同步修改。不写该参数则容器不对外暴露端口。设置后可在主机浏览器通过http://127.0.0.1:[port]访问 OI Wiki--name [name]可选为容器命名方便后续管理。默认容器名称为空可通过docker ps查看容器 id 与名称。进入容器两种方式方式一前台直入运行上述命令时去掉-d则容器直接进入 bash此时exit退出即同时停止容器前台模式。方式二后台 手动进入保留-d让容器在后台运行然后通过docker exec进入# 以下命令在主机中运行 docker exec -it [name] /bin/bash提示docker exec的[name]可使用docker run时设置的容器名也可替换为docker ps输出的容器 id。使用容器内置 wiki 工具命令OI Wiki 镜像在 .bashrc 中预置了多个wiki-*别名涵盖仓库更新、主题安装、文档构建、服务启动与格式修正等高频操作。以下命令均在容器内执行。命令速查# 更新 git 仓库拉取 origin master 最新提交 wiki-upd # 使用我们的自定义主题 wiki-theme # 构建 mkdocs会在 site 文件夹下得到静态页面 wiki-bld # 构建 mkdocs 并渲染 MathJax会在 site 文件夹下得到静态页面 wiki-bld-math # 运行一个服务器访问容器中 http://127.0.0.1:8000 或访问主机中 http://127.0.0.1:[port] 可以查看效果 wiki-svr # 修正 Markdown 格式 wiki-o别名背后的真实命令对照 .bashrc 可以看到每个别名对应的实际命令这有助于你理解每个操作的本质并自行扩展别名实际执行内容作用wiki-updgit pull origin master位于/OI-wiki更新仓库源码wiki-theme执行./scripts/pre-build/install-theme.sh初始化并更新 MkDocs Material 自定义主题脚本位于 scripts/pre-build/install-theme.sh内部通过 git submodule 引入主题并安装其 vendor 依赖wiki-blduv run mkdocs build -v以详细日志模式构建静态站点到site/wiki-bld-mathmkdocs build -v后执行 MathJax 渲染脚本env NODE_OPTIONS--max_old_space_size3072 yarn ts-node-esm ./scripts/post-build/math/render_math.ts构建站点并额外渲染全部数学公式wiki-svruv run mkdocs serve -v -a ${LISTEN_IP}:${LISTEN_PORT}启动开发服务器监听地址由构建时的LISTEN_IP/LISTEN_PORT决定wiki-oyarn remark ./docs -o --silent对docs/下的 Markdown 文档做自动化格式修正所有别名在执行前都会先设置LC_ALLC.UTF-8并切换到/OI-wiki工作目录避免语言环境与路径问题。其中wiki-bld-math依赖项目 package.json 中声明的mathjax/src等前端依赖而wiki-o使用的 remark 流水线在 package.json 中同样有remark、remark-gfm、remark-math等一整套 lint 与格式化工具的支撑。wiki-bld产出的静态文件最终由 mkdocs.yml 中的站点配置站点名、导航结构、主题等决定渲染效果。退出容器# 以下命令在容器中运行 exit前台模式退出后容器随之停止后台-d模式退出仅回到主机容器仍在运行需手动停止见下文。容器生命周期管理以下命令均在主机中执行[name]为容器名或容器 id。操作命令说明停止容器docker stop [name]优雅停止运行中的容器启动容器docker start [name]启动已停止的容器重启容器docker restart [name]先停止再启动常用于应用配置变更后删除容器docker rm [name]删除前请先停止容器容器删除后其内部未持久化的数据将一并丢失镜像更新与删除更新镜像重新执行一次docker pull [image]即可拉取最新镜像。由于 OI Wiki 镜像更新频率不高通常不需要频繁更新如需获取最新文档内容更轻量的做法是进入容器执行wiki-upd拉取仓库最新提交后重新wiki-bld。删除镜像# 以下命令在主机中运行 docker rmi [image]删除前请先删除使用该 oi-wiki 镜像构建的所有容器docker rm否则 Docker 会因镜像仍被容器引用而拒绝删除。常见问题与排查思路端口无法访问确认运行容器时带上了-p [port]:8000且主机的[port]未被占用同时确认构建时未通过LISTEN_IP将监听地址限定为回环地址之外的特定 IP。构建时仓库克隆缓慢或失败为WIKI_REPO传入可用的仓库镜像地址国内网络建议优先使用该参数直接替换 Dockerfile 中的克隆源。Python 依赖安装缓慢为PYPI_MIRROR传入 TUNA 等国内镜像站可显著加快uv sync阶段的速度。容器内wiki-*命令不可用确认进入的是 OI Wiki 镜像启动的容器且 .bashrc 已随镜像加载临时生效可手动执行source ~/.bashrc。公式无法渲染需要生成含渲染后 MathJax 的静态页面时请使用wiki-bld-math而非仅wiki-bld。若仍有疑问可通过仓库的 Issues 渠道提出附上完整的docker build/docker run命令与报错输出有助于快速定位问题。【免费下载链接】OI-wiki:star2: Wiki of OI / ICPC for everyone. 某大型游戏线上攻略内含炫酷算术魔法项目地址: https://gitcode.com/GitHub_Trending/oi/OI-wiki创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表