在 Docker 中运行进行开发¶
本页面介绍了在 Docker 中运行 ZJUI-Learn 的过程,但使用本地安装的 ZJUI-Learn 源代码版本。这是进行 ZJUI-Learn 开发的推荐方法。此功能已在 macOS、Linux 和 Windows 上经过测试并受支持。使用 Windows 时,您需要在 WSL 2 容器内执行以下步骤,并将所有代码和课程文件存储在本机 WSL 2 文件系统中(即不在 /mnt 目录内)。使用 Windows 文件系统或在没有 WSL 的情况下运行 Docker 容器可能会导致性能问题和功能不一致。
!!! tip “概括”
```sh
git clone https://github.com/PrairieLearn/PrairieLearn.git
cd ZJUI-Learn
docker run -it --rm -p 3000:3000 \
-e DEV=true -v .:/PrairieLearn \
prairielearn/prairielearn \
/bin/bash -c "make deps && /PrairieLearn/scripts/init.sh"
```
首先按照安装文档中的描述安装ZJUI-Learn的Docker版本。
然后,从主存储库克隆 ZJUI-Learn:
git clone https://github.com/PrairieLearn/PrairieLearn.git
要运行而不在容器中生成 shell,请运行:
docker run -it --rm -p 3000:3000 \
-e DEV=true -v .:/PrairieLearn \
prairielearn/prairielearn \
/bin/bash -c "make deps && /PrairieLearn/scripts/init.sh"
对于大多数开发,您需要访问容器中的 shell 来运行测试、linting 等。 首先,在容器中启动一个 shell:
cd ZJUI-Learn
docker run -it --rm -p 3000:3000 \
-w /PrairieLearn -v .:/PrairieLearn \
prairielearn/prairielearn /bin/bash
这将在运行 ZJUI-Learn 映像的 Docker 容器内启动一个 shell,但使用其代码的当前工作目录。如果您希望从存储库根目录以外的位置运行该命令,请将 . 替换为 .:/ZJUI-Learn 中目录的路径。
要在开发模式下运行 ZJUI-Learn 服务器,请使用:
make deps
make dev
这将启动 ZJUI-Learn 服务器,并在您更改 JavaScript 代码时自动重新启动它。要停止服务器,请按 Ctrl+C。要在服务器停止后退出容器,请按 Ctrl+D。
要支持本地开发中的工作区,请使用 make dev-all 或 make start-all 运行 ZJUI-Learn 和工作区服务器应用程序。为了使这些功能发挥作用,您需要修改 Docker 调用以支持外部评分器和工作区。更多信息请参见讲师安装页面。
发展¶
有关开发过程中常用命令和操作的更多信息,请参阅开发快速入门 页面。
更新或构建 Docker 镜像¶
上述命令均使用 prairielearn/prairielearn 映像内的本地源运行 ZJUI-Learn。该映像已安装 Python 包和其他支持文件。应定期更新:
docker pull prairielearn/prairielearn
您还可以构建此映像的本地副本,并使用它来确保您拥有与本地源完全对应的版本:
cd /path/to/PrairieLearn
docker build -t prairielearn/prairielearn .
连接到现有的 Docker 容器¶
以前的 shell 是在自己的容器中启动的。如果您想在_已经运行_的 Docker 容器中打开 shell,您可以找到容器的名称并连接到它。
-
通过运行查找正在运行的 ZJUI-Learn 容器的名称
docker ps这将输出有关正在运行的容器(s)的多列信息。查找
prairielearn/prairielearn映像并复制其相应的名称。例如,此docker ps输出中的 ZJUI-Learn 容器的名称为upbeat_roentgen:CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e0f522f41ea4 prairielearn/prairielearn "/bin/sh -c /Prai…" 2 hours ago Up 2 hours 0.0.0.0:3000->3000/tcp upbeat_roentgen
-
通过运行以下命令在 ZJUI-Learn 容器中打开 shell
docker exec -it CONTAINER_NAME /bin/bash