气象模拟WRF容器化操作实践

举报
tsjsdbd 发表于 2020/04/09 14:03:14 2020/04/09
【摘要】 WRF全称Weather Research and Forecasting Model, 是一个天气研究与预报模型的软件。咱们使用Docker容器化的方式走一个,方便使用。

 

1      WRF介绍

WRF全称Weather Research and Forecasting Model, 是一个天气研究与预报模型,可以用来进行精细尺度的天气模拟与预报。参考:https://xg1990.com/blog/archives/190

但是这个软件的安装比较复杂,要包含WPSWRF两大模块,其中WPS又包含geogridungribmetgrid三小步骤,并且还有一大堆的依赖包,贼麻烦。所以使用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

运行没问题。

实际执行的应该是:

image.png

即:

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的输入数据,输出结果啊,都可以直接读写到这个挂载的共享目录里面。

 


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。