文章链接https://bitbucket.org/fenics-project/docker
此存储库包含各种用于Fenics构建的各种脚本,构建的图像 可在quay.io上获得.
安装Docker后,可以使用以下命令运行下面的任何镜像:
docker run -ti quay.io/fenicsproject/<image-name>:latest
首先你可能想尝试stable:current包含FENCS的完整稳定版本的图像,其中已经编译了PETSc,SLEPc,petsc4py和slepc4py.此镜像由FEniCS项目团队检查.
如果想要将当前目录共享到容器中,请使用一下命令:
cd $HOME/project-1
docker run -ti --name project-1 -v $(pwd):/home/fenics/shared quay.io/fenicsproject/dev
另一个终端:
cd $HOME/project-2
docker run -ti --name project-2 -v $(pwd):/home/fenics/shared quay.io/fenicsproject/stable
注意到 --name 参数 ,它允许我们设计一个容易 去记住的名字到我们的容器中.而不是CONTAINER ID.现在我们有两个容器,运行两个不容版本的FEniCS. CONTAINER ID.
4.2 在一个容器中运行多个
您可以通过运行 一下命令获取所有正在运行的容器的列表:
docker ps
在 容器内不 运行另一个bash容器project-1.我们使用以下命令 在容器中执行新进程:docker exec
docker exec -ti -u fenics project-1 /bin/bash -l
其中-l很重要,可确保正确设置容器中对的环境一遍FEniCS运行.您还可已使用 ipython3立即进入提示:
docker exec -ti -u fenics project-1 /bin/bash -l -c ipython3
该-c标志使得bash从 字符串 中读取命令.
4.3 重启一个退出的容器
开启一个容器一个 正常的方式
docker run -ti --name new-project -v $(pwd):/home/fenics/shared quay.io/fenicsproject/dev
使用 docker ps
使用exit 退出容器
在使用docker ps
再次启动new-project容器 运行命令:
docker start new-project
我们可以以命令在容器中创建一个新shell
docker exec -ti new-project -u fenics /bin/bash -l
相反,您可以使用以下命令停止使用的容器.
docker stop new-project
4.4 在docker 容器中运行FEniCS 像应用一样
您不必通过Docker中启动shell并运行python3以执行FEniCS脚本来运行FEniCS.也可以从命令直接在容器中执行任何可执行文件 docker run.
假设 我们my-code.py在主机上的当前工作目录中有一个python文件,我们希望python3在一次性FEniCS容器中直接运行它.可以执行如下操作.
docker run --rm -v $(pwd):/home/fenics/shared -w /home/fenics/shared quay.io/fenicsproject/stable "python3 my-code.py"让我们run逐个标记打破这个复杂的命令
--rm 表示do
cker 在退出容器后 删除容器,旧的和未使用的容器不会弄乱您的机器
--v $(pwd):/home/fenics/shared 像以前一样将当前工作目录共享$(pwd)到容器
--w 将容器中的当前工作目录设置为共享目录/home/fenics/shared
"python3 my-code.py"是传递给Docker容器的命令 .容器立即在工作目录中执行此命令.
在my-code.py 中我有以以下简单的python/FEniCS代码:
from dolfin import *
print("Running FEniCS...")
mesh = UnitSquareMesh(10, 10)
V = FunctionSpace(mesh, "P", 1)
u = interpolate(Constant(1.0), V)
with XDMFFile("f.xdmf") as f:
f.write(u)
运行上面命令 然后给我输出 docker run