Docker
如果你想要在 Docker 里运行 MCDR,你可以看看下面的这些官方 Docker 镜像
你可以在 mcdreforged 这个 Docker 组织的页面里找到完整镜像列表:https://hub.docker.com/r/mcdreforged
备注
在 Docker 容器中运行 MCDR 的时候,由 MCDR 启动的服务端将不可避免地也在同一个容器中运行。因此,为了让 MCDR 和服务端正确地在 Docker 容器中运行,你需要确保容器中已安装好服务端的各种运行时依赖项
例如,如果你想在 Docker 容器中用 MCDR 启动一个 Minecraft 服务端,则需要在容器里配置好 Minecraft 服务端所需要的 Java 运行环境
镜像用法
下述的镜像用法对本文列出的所有镜像都适用
基础信息
操作系统发行版:debian(与 Docker 官方 python 镜像的默认值保持一致)
镜像的用户:root
工作路径:
/mcdrPython 包安装位置:
/root/.local/lib/python${PYTHON_VERSION}/site-packages
快速测试
用于测试验证 mcdreforged 的镜像是否可以正常运行的一条快速测试命令
docker run -it --rm mcdreforged/mcdreforged:latest-slim
输出示例:
MCDReforged 2.13.0 is starting up
MCDReforged is open source, u can find it here: https://github.com/MCDReforged/MCDReforged
[MCDR] [13:05:59] [MainThread/INFO]: Language is set to en_us
[MCDR] [13:05:59] [MainThread/INFO]: Encoding / Decoding method is set to utf8 / utf8
[MCDR] [13:05:59] [MainThread/INFO]: Plugin directory list:
[MCDR] [13:05:59] [MainThread/INFO]: - plugins
[MCDR] [13:05:59] [MainThread/INFO]: Handler has set to vanilla_handler
[MCDR] [13:05:59] [MainThread/INFO]: MCDReforged is running on Python 3.11.9 environment
[MCDR] [13:05:59] [TaskExecutor/INFO]: Refreshing all plugins
[MCDR] [13:05:59] [TaskExecutor/INFO]: No plugin has changed; Active plugin amount: 2
[MCDR] [13:05:59] [MainThread/INFO]: Starting the server with command "echo Hello world from MCDReforged"
[MCDR] [13:05:59] [MainThread/INFO]: Server is running at PID 10
[Server] Hello world from MCDReforged
[MCDR] [13:05:59] [MainThread/INFO]: Server process stopped with code 0
[MCDR] [13:05:59] [MainThread/INFO]: Server stopped
[MCDR] [13:05:59] [MainThread/INFO]: Stopping MCDR
[MCDR] [13:05:59] [MainThread/INFO]: Stopping advanced console
[MCDR] [13:05:59] [MainThread/INFO]: bye
持久化服务端的数据
在生产环境中,你需要持久化镜像的工作路径 /mcdr。该路径将包含 MCDR 和服务端相关的所有运行时数据
docker run -it --name my_mcdr_container -v /path/to/my/server:/mcdr mcdreforged/mcdreforged
Python 包安装
如果你需要安装一些自定义的 python 包,你可以按照下述步骤进行操作:
将路径
/root/.local/lib/python${PYTHON_VERSION}/site-packages/挂载至一个卷或本地文件夹中,以进行数据持久化这一步是可选的。如果不执行这一步操作,容器移除后,容器里曾安装过的 Python 包将会丢失
PYTHON_VERSION是 python 解释器的主 + 次版本号,如3.11你可以用下述命令来确认这一挂载路径
docker run -it --rm mcdreforged/mcdreforged:latest-slim ls -l /root/.local/lib
使用 pip3 命令安装你想装的任何 Python 包。
--user参数将会自动设置,以确保 Python 包将被安装到上面提到的路径中docker exec -it my_mcdr_container pip3 install apscheduler
镜像变体
基础镜像
镜像名:
mcdreforged/mcdreforgedDocker Hub: https://hub.docker.com/r/mcdreforged/mcdreforged
源代码:https://github.com/MCDReforged/MCDReforged/tree/master/docker
该进行包含了运行 MCDReforged 所需的基础环境。基于官方 python 镜像构建
它可以作为构建你的自定义 MCDR 运行环境的基础镜像
FROM mcdreforged/mcdreforged
RUN <<EOT
# Install system packages you need
apt-get update
apt-get install -y curl
# Install Python packages you need
pip3 install apscheduler
# Do whatever you want for customization
# ./do_something.sh
EOT
镜像 tag 前缀说明:
latest表示使用最新的 MCDR 版本2.13.0、2.13表示手动指定 MCDR 版本master、dev表示从给定 GitHub 的 git 分支构建的开发版本
镜像 tag 后缀说明:
-slim表示该镜像是基于官方 python 镜像的-slim变体构建的-py3.13表示镜像所使用的 python 版本,精确到次版本号。默认值:3.13,通常是次新的那个 python 版本
mcdreforged/mcdreforged:latest
mcdreforged/mcdreforged:latest-slim
mcdreforged/mcdreforged:dev
mcdreforged/mcdreforged:dev-slim
mcdreforged/mcdreforged:dev-py3.11
mcdreforged/mcdreforged:dev-py3.11-slim
mcdreforged/mcdreforged:2.13.0
mcdreforged/mcdreforged:2.13.0-slim
mcdreforged/mcdreforged:2.13.0-py3.11
mcdreforged/mcdreforged:2.13.0-py3.11-slim
拓展版镜像
安装有额外 python 包依赖的镜像变体
镜像名:
mcdreforged/mcdreforged-extraDocker Hub: https://hub.docker.com/r/mcdreforged/mcdreforged-extra
源代码:https://github.com/MCDReforged/docker/blob/master/src/Dockerfile-extra
这些额外的 Python 包是从 插件仓库 中收集得到的,涵盖了插件仓库中几乎所有插件所依赖的 Python 包
备注
为了确保在镜像构建过程中,Python 包的可安装性,拓展版镜像中实际安装的 Python 包的版本,可能不处于插件依赖的 Python 包版本范围中
小技巧
对于生产环境,建议维护你自己专用的一份 Python 包集合,而非简单地使用这个拓展版镜像
这是为了确保你的所有 MCDR 插件均可在它们声称与之兼容的 Python 包环境中运行
你可以使用 基础镜像 并手动安装插件所需的 Python 包依赖,然后根据上文 Python 包安装 中的指引持久化 site-packages 路径。在确保 python 版本一致的前提下,这个 site-packages 挂载点甚至是可以在不同容器间共享的
镜像 tag 格式:与 基础镜像 一致
OpenJDK 镜像
安装有 OpenJDK 的镜像变体。如果你想用 MCDR 来运行 Minecraft 服务端,那这些镜像就是你想要的
镜像名:
mcdreforged/mcdreforged-${jdk_distribution}。见下文以了解支持的 JDK 发行版
支持的 OpenJDK 发行版:
OpenJDK 发行版 |
|
|---|---|
Eclipse Temurin (推荐) |
|
|
|
|
支持的 Java 版本:8, 17, 21, 25 (默认值:21)
额外的镜像 tag 后缀
-jdk17后缀显式指定了 JDK 的版本-extra后缀意味着该镜像是基于 extra 变体构建的
镜像 tag 例子(使用 temurin 为 JDK 发行版):
mcdreforged/mcdreforged-temurin:latest
mcdreforged/mcdreforged-temurin:latest-extra
mcdreforged/mcdreforged-temurin:latest-jdk17
mcdreforged/mcdreforged-temurin:latest-jdk17-extra
mcdreforged/mcdreforged-temurin:latest-slim
mcdreforged/mcdreforged-temurin:latest-slim-extra
mcdreforged/mcdreforged-temurin:latest-slim-jdk17
mcdreforged/mcdreforged-temurin:latest-slim-jdk17-extra
mcdreforged/mcdreforged-temurin:2.13.0
mcdreforged/mcdreforged-temurin:2.13.0-extra
mcdreforged/mcdreforged-temurin:2.13.0-jdk17
mcdreforged/mcdreforged-temurin:2.13.0-jdk17-extra
mcdreforged/mcdreforged-temurin:2.13.0-slim
mcdreforged/mcdreforged-temurin:2.13.0-slim-extra
mcdreforged/mcdreforged-temurin:2.13.0-slim-jdk17
mcdreforged/mcdreforged-temurin:2.13.0-slim-jdk17-extra
mcdreforged/mcdreforged-temurin:2.13.0-py3.11
mcdreforged/mcdreforged-temurin:2.13.0-py3.11-extra
mcdreforged/mcdreforged-temurin:2.13.0-py3.11-jdk17
mcdreforged/mcdreforged-temurin:2.13.0-py3.11-jdk17-extra
mcdreforged/mcdreforged-temurin:2.13.0-py3.11-slim
mcdreforged/mcdreforged-temurin:2.13.0-py3.11-slim-extra
mcdreforged/mcdreforged-temurin:2.13.0-py3.11-slim-jdk17
mcdreforged/mcdreforged-temurin:2.13.0-py3.11-slim-jdk17-extra