您的位置:首页 > 其它

【华为云技术分享】气象模拟WRF容器化操作实践

2020-04-20 12:28 1046 查看

【摘要】 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为例(其他的网上随便一搜一大堆):

[code]apt install docker.io

然后可以敲:

[code]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

[code]docker pull davegill/wrf-coop:eighthtry

这样咱们就有了这个名叫:davegill/wrf-coop,版本是:eighthtry 的镜像了。

可以通过:

[code]docker images

命令查看

3.2      打包wrf镜像

然后咱们用这个基础镜像,打包一个包含wrf的最终目标镜像。

Ps:这里作者也说了,分成基础镜像+wrf软件,是为了可以方便一些。不至于wrf软件稍微更新一下,就得所有东西全部打包(不然时间会比较久)。有了基础镜像,后面有变化只需要更新第二部分就行了。

根据:https://github.com/davegill/wrf-coop 的描述

基础镜像,就是Dockerfile-first_part那个,这个咱们偷懒,已经直接下载了现成的。所以现在咱们开始搞Dockerfile-second_part。

下载那个Dockerfile-second_part文件,运行以下命令:

[code]cp Dockerfile-second_part Dockerfile

docker build -t wrftest .

这时就会打包好一个 wrftest的目标镜像。

可以通过

[code]docker images

命令查看。

3.3      编译wrf

启动一个刚才打包好的wrf镜像,并进入到容器内部。

[code]docker run -it --name test_001 wrftest

这样就进入到一个容器里面了。

执行编译命令:

[code]./script.csh BUILD CLEAN 34 1 em_real -d J=-j@3

成功后,我们就可以开始执行wrf的功能了~

3.4      执行WRF测试用例

在上一步的编译成功后,咱们跑一跑它自带的测试用例:

[code]./script.csh RUN em_real 34 em_real 01 NP=3 ; set OK = $status ; echo $OK for test 01

运行没问题。

实际执行的应该是:

即:

[code]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

  • 点赞
  • 收藏
  • 分享
  • 文章举报
华为云 企业博客 发布了1143 篇原创文章 · 获赞 5530 · 访问量 128万+ 他的留言板 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐