
chaste/release,可通过单条命令启动,为癌症、心脏和软组织模拟提供跨操作系统和硬件配置的便携、同构计算环境。
Docker允许从纯文本Dockerfile构建和运行计算环境,类似于从源代码编译可执行文件(相当于用docker build从Dockerfile生成镜像)并执行(相当于用docker run运行容器)。这一类比的步骤如图所示(源自Nüst et al. 2020)。
Docker容器类比
Docker还提供镜像仓库存储预构建镜像:[***]docker push)或下载他人镜像(如docker pull),包括官方容器化应用(如Python、WordPress)及基础镜像(如Ubuntu、Alpine)。Docker架构和生态系统详见此处。
介绍Docker及本Chaste镜像使用的研讨会幻灯片见此处。
安装Docker,并配置至少4GB内存及尽可能多的CPU核心(超过4核需更多内存)。
| 操作系统 | 说明 |
|---|---|
| Linux | 安装Docker for Linux。默认共享所有内存和CPU核心。 |
| macOS | 1. 安装Docker for Mac。 2. 配置偏好设置以增加内存并共享所需硬盘区域。 |
| Windows | 0. Windows 10及以上:安装WSL2(如未安装),然后从Microsoft Store安装最新Ubuntu "应用"。可通过以管理员身份打开PowerShell并运行:wsl --install -d ubuntu完成。1. 安装Docker for Windows。 2. 配置偏好设置,在Docker设置中启用WSL扩展集成(特别是Ubuntu应用),然后增加内存并选择要共享的本地驱动器(如 C:盘)。3. 启动Ubuntu应用,将提供命令行界面。可使用预构建镜像运行容器,或克隆Chaste仓库到Ubuntu环境中,输入 code .打开VS Code,点击弹窗中的"在容器中重新打开"以使用VS Code开发容器。将文件保存在Ubuntu文件系统中可大幅提升文件I/O性能。4. [可选] 在主机上安装git以跟踪项目变更,或在需要时直接从GitHub构建Docker镜像。安装 posh-git可启用git命令的 tab 补全。 |
⚠️ 务必为Docker分配至少4GB内存,否则编译可能因异常错误失败!
若需快速启动最新版本(已完全编译就绪),安装并配置Docker后运行:
bashdocker run --init -it --rm -v chaste_data:/home/chaste chaste/release
如需特定版本,可在镜像名中指定可用标签,格式为chaste/release:<tag>(如chaste/release:2024.1),默认使用最新版本。
若需使用develop分支的最新开发代码,运行以下命令拉取并运行chaste/develop镜像:
bashdocker run --init -it --rm -v chaste_data:/home/chaste chaste/develop
容器成功启动后,将显示类似以下的命令提示符:
chaste@301291afbedf:~$
这是基于ubuntu的隔离Docker容器中的bash提示符,包含所有依赖和预编译代码,可直接构建自己的Chaste项目,且不影响主机系统。
ℹ️ 如需查看运行中容器的资源使用情况,打开另一个终端并运行
docker stats。
若无现有项目,可使用提供的new_project.sh脚本在~/projects中创建项目模板作为起点。项目教程见:[***]
项目准备就绪后,使用build_project.sh <TestMyProject> c(将<TestMyProject>替换为项目名)构建,输出文件将在~/output中(仅当创建新文件时需c参数)。
ℹ️ 如需在Docker容器与主机间共享数据(如
output目录),可添加绑定挂载参数:-v /主机/路径/to/output:/home/chaste/output。详见绑定挂载。
使用完毕后,输入exit或按Ctrl+D关闭容器(必要时先按Ctrl+C停止运行中的进程)。/home/chaste中的更改将在重启容器时保留,但删除容器后,其他内容(如已安装包、系统文件更改)将重置为镜像初始状态。
若使用VS Code且已安装Docker,可克隆Chaste代码仓库并在VS Code中打开(如提示,安装Remote Development扩展包)。最后,在扩展提示时点击"在容器中重新打开",将自动拉取、运行并挂载最新chaste/develop镜像。
ℹ️ 此方式会将本地克隆的Chaste代码挂载到容器中,覆盖镜像内置代码。预编译二进制基于镜像内部代码构建,但重新编译本地代码后可快速同步。
高级使用场景详见构建自己的镜像。
容器启动后,将在chaste用户的主目录/home/chaste中显示以下结构:
bash. |-- build |-- projects -> /home/chaste/src/projects |-- scripts |-- src `-- output
各文件夹功能:
build:预编译的Chaste二进制文件和库projects:指向/home/chaste/src/projects的符号链接,用于用户项目scripts:创建、构建和测试项目的便捷脚本src:Chaste源代码output:项目测试框架的输出目录(由$CHASTE_TEST_OUTPUT指定)环境变量设置如下:
CHASTE_DIR="/home/chaste"CHASTE_BUILD_DIR="${CHASTE_DIR}/build"CHASTE_PROJECTS_DIR="${CHASTE_DIR}/src/projects"CHASTE_SOURCE_DIR="${CHASTE_DIR}/src"CHASTE_TEST_OUTPUT="${CHASTE_DIR}/output"ℹ️ 若构建自己的镜像,可通过构建参数在构建时修改
CHASTE_DIR路径,例如--build-arg CHASTE_DIR=/path/to/alternative,其他目录将相对此路径设置。
主目录(/home/chaste)被指定为VOLUME,因此其中的更改在容器重启后保留。可挂载特定文件夹覆盖这些子目录(如挂载测试输出目录以便用ParaView可视化,或挂载不同版本的Chaste源代码)。通常,数据应存储在(命名)卷中以获得最佳文件I/O性能,但绑定挂载主机目录(如访问输出文件)较便捷,下文将说明。
⚠️ Docker容器本质上是临时的,退出后除卷或绑定挂载的主机文件夹外,所有更改将丢失。容器主目录内容(包括Chaste源代码和二进制文件)存储在Docker
VOLUME中,可在容器实例间持久化。但重置Docker后,所有卷及数据将丢失,因此需定期将项目推送到远程git仓库!
本镜像使用Docker卷存储Chaste源代码、编译库和脚本,这是推荐的数据持久化机制,在多平台上具有最佳文件I/O性能。
此类挂载的缺点是主机难以直接访问内容。但可通过绑定挂载直接访问容器的output等目录,或与容器共享主机数据集(甚至覆盖卷中的目录)。
Docker挂载选项的详细说明见存储文档。
可将主机目录(需绝对路径,如/path/to/output)挂载到容器中(如output目录)。也可导航到主机上包含这些目录的文件夹(如Windows的C:\Users\$USERNAME\chaste或Linux/macOS的~/chaste),使用$(pwd)/output,示例命令如下(为简洁,镜像名假设为chaste/release,也可替换为chaste/develop或chaste/release:2024.1等):
bashdocker run -it --init --rm -v chaste_data:/home/chaste -v "${PWD}"/output:/home/chaste/output chaste/release
在macOS和Windows上(Linux除外),主机绑定挂载的文件I/O性能低于Docker卷。若模拟中涉及大量文件I/O(如output目录),建议将文件留在卷中,使用docker cp在模拟结束后复制到主机(或复制修改后的文件到容器)。
例如,若容器命名为chaste(启动时添加--name <name>),复制整个src文件夹的命令如下:
bashdocker cp chaste:/home/chaste/src . # 复制到主机 # 在主机修改源代码后 docker cp src/. chaste:/home/chaste/src # 复制回容器
推荐使用VS Code及"Remote Development"扩展,可直接访问、编辑和搜索容器内文件,如同在主机上操作,同时保持卷中文件的高性能。
ℹ️ 以下步骤适用于推荐的预构建镜像方法。若使用VS Code开发容器,这些步骤将自动完成。
--name <name>指定)/home/chaste文件夹,即可访问上述文件和目录。
虽然将代码留在卷中性能更佳,但也可通过绑定挂载用主机目录覆盖卷的~/src文件夹,例如-v /path/to/chaste_code:/home/chaste/src。可能需要在容器中用build_chaste.sh <branch/tag>重新编译Chaste;若主机目录中已有代码,可跳过克隆直接用build_chaste.sh .编译。此方式使源代码在主机和容器中均可访问,无需复制或使用VS Code,但可能降低I/O性能。macOS上可通过delegated选项改善:--mount type=bind,source="$(pwd)"/chaste_code,destination=/home/chaste/src,consistency=delegated。
或使用工具docker-sync:[***]
ℹ️ 如需从终端编辑代码,镜像中已安装
nano和git(用于推送更改)。
如需安装镜像中未包含的包,可运行:
bashsudo apt-get update && sudo apt-get install <包名>
将<包名>替换为实际包名。提示时输入密码:chaste。
注意,此类安装的包在删除容器后不会保留(因相关文件未存储在/home/chaste中)。可通过省略docker run命令中的--rm标志,并使用docker start <容器名>重启容器来避免此问题。若认为某包应永久添加到Docker镜像,可发送建议邮件或提交PR。
如需检查Chaste是否编译正确,可在CHASTE_BUILD_DIR目录中运行持续测试包:
bashctest -j$(nproc) -L Continuous
用户路径中提供了便捷脚本test.sh(位于/home/chaste/scripts)。
可单独运行以下测试快速检查构建环境和依赖:
bashctest --verbose -R TestChasteBuildInfo$
测试详情见:[***]
高级开发者如需构建特定代码分支的镜像,确保Docker已运行,继续阅读!以下示例将镜像标记为chaste:custom,建议使用更具描述性的名称。
develop分支的最新提交:
bashdocker build -t chaste:custom --build-arg GIT_TAG=develop [***]
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务