【摘要】 WRF全称Weather Research and Forecasting Model, 是一个天气研究与预报模型的软件。咱们使用Docker容器化的方式走一个,方便使用。
1 WRF介绍
WRF全称Weather Research and Forecasting Model, 是一个天气研究与预报模型,可以用来进行精细尺度的天气模拟与预报。参考:https://xg1990.com/blog/archives/190
但是这个软件的安装比较复杂,要包含WPS和WRF两大模块,其中WPS又包含geogrid,ungrib,metgrid三小步骤,并且还有一大堆的依赖包,贼麻烦。所以使用Docker轻量级容器来确保软件使用环境的一致性,是个非常不做的方式。一旦做好镜像,随处可以运行wrf,这一点可以从WRF官方GitHub网站上也可以看出来,他们自己就提供了容器化操作的详细指导。https://github.com/NCAR/WRF_DOCKER/blob/master/README_tutorial.md
2 安装Docker软件
要跑docker容器,得先安装docker软件。我这里使用Ubuntu 18.04为例(其他的网上随便一搜一大堆):
apt install docker.io
然后可以敲:
docker ps
确定docker安装好了
3 安装&启动WRF容器
整体还是参考wrf仓库指导:
https://github.com/NCAR/WRF_DOCKER/blob/master/README_tutorial.md
(这个里面的Dockerfile编译会失败,有issue跟踪)
和
https://github.com/davegill/wrf-coop
(主要是参考这个,不过跟上面那个仓库都是同一个作者)
3.1 下载包含依赖包的基础镜像
本应该按照它的第一部分Dockerfile-first_part构建基础镜像。
不过作者做了一个现成的,咱们就偷懒,直接下载了:https://hub.docker.com/r/davegill/wrf-coop/tags
docker pull davegill/wrf-coop:eighthtry
这样咱们就有了这个名叫:davegill/wrf-coop,版本是:eighthtry 的镜像了。
可以通过:
docker images
命令查看
3.2 打包wrf镜像
然后咱们用这个基础镜像,打包一个包含wrf的最终目标镜像。
Ps:这里作者也说了,分成基础镜像+wrf软件,是为了可以方便一些。不至于wrf软件稍微更新一下,就得所有东西全部打包(不然时间会比较久)。有了基础镜像,后面有变化只需要更新第二部分就行了。
根据:https://github.com/davegill/wrf-coop 的描述
基础镜像,就是Dockerfile-first_part那个,这个咱们偷懒,已经直接下载了现成的。所以现在咱们开始搞Dockerfile-second_part。
下载那个Dockerfile-second_part文件,运行以下命令:
-
cp Dockerfile-second_part Dockerfile
-
-
docker build -t wrftest .
这时就会打包好一个 wrftest的目标镜像。
可以通过
docker images
命令查看。
3.3 编译wrf
启动一个刚才打包好的wrf镜像,并进入到容器内部。
docker run -it --name test_001 wrftest
这样就进入到一个容器里面了。
执行编译命令:
./script.csh BUILD CLEAN 34 1 em_real -d J=-j@3
成功后,我们就可以开始执行wrf的功能了~
3.4 执行WRF测试用例
在上一步的编译成功后,咱们跑一跑它自带的测试用例:
./script.csh RUN em_real 34 em_real 01 NP=3 ; set OK = $status ; echo $OK for test 01
运行没问题。
实际执行的应该是:
即:
mpirun -np 3 -oversubscribe real.exe
类似这种命令,具体含义,相信你应该比我熟了。(我们搞容器的,不怎么关系容器里面跑的软件长什么样。跟搞操作系统的,应该对所有app一视同仁一个道理)
详细内容,可以看一下:./script.csh 这个脚本,里面包装了一些脚本参数。
3.5 挂载外部存储卷,到WRF容器内
根据Docker容器的功能,用户可以把外部的共享存储,挂载到容器里面去(跟nfs挂载
类似)。如果能借助Kubernetes就更厉害了,可以挂载更多的共享存储类型。
可以参考这个https://github.com/NCAR/WRF_DOCKER/blob/master/README_tutorial.md#example-2 。
使用docker的 -v 参数可以把主机的目录,挂载到容器里面去。那么WRF的输入数据,输出结果啊,都可以直接读写到这个挂载的共享目录里面。
作者:华为云享专家 tsjsdbd
转载:https://blog.csdn.net/devcloud/article/details/105628580