Docker配置iraf工作环境

前段时间笔者因工作原因需要在自己的电脑上配置iraf环境,前后尝试了多种方法都安装不成功。后来师兄推荐使用Docker,笔者简单了解后(中间也踩了坑,折腾了很多细节),终于在自己的Macbook上安装并配置好了iraf。

先说说安装Docker之前的失败经历吧:

  1. 一开始我计划在macOS系统上用anaconda安装pyraf以达到目的。然而过程并不顺利,首先是网络连接特别慢(因疫情原因在家办公,民用网络远不如单位的科技网),下载环境所需的包时经常断连。最终好不容易把所有环境配置所需的包下载完成后,笔者遇到了一个无解的问题:macOS 10.15 Catalina只支持64位程序,而iraf是32位的......

  2. 既然macOS 10.15无法运行,笔者又不想回退系统(毕竟sidecar太香了),那就用Parallels Desktop跑Ubuntu系统总行了吧。实际情况并没有想象中那么顺利,先是遇到网络问题无法下载某些包,后是用离线安装的方式报出各种错误,折腾一周依旧无果(菜是原罪),放弃。

最终,笔者选择了Docker,配置好后发现,这个方式非常简单方便。毕竟已经有dalao直接上传带有iraf软件包的镜像文件,我们只需要做一个简单的配置就好。

首先要说明,笔者配置环境的机器是Macbook Pro 13-inch 2018,系统版本:macOS Catalina 10.15.3。


OK,咱们进入正题。

首先,下载Docker客户端,网址:Docker Desktop for Mac and Windows | Docker

安装运行后,在终端输入以下命令拉取镜像(因为是外国网站,速度可能比较慢,可自行搜索阿里云镜像加速以提高下载速度):

docker pull michaelcs/astrocondairaf

该镜像是michaelcs于三年前上传至dockerhub,详情请见:Docker Hub

拉取成功后,可用以下命令查看已存在的镜像:

docker images

新建容器(-d代表后台运行容器并返回容器ID,-i代表以交互模式运行容器,-t代表为容器重新分配一个伪输入终端;/bin/bash表示制定终端类型;没有参数-d的话,exit容器后就无法再次启动了,原因作者暂时没弄明白;冒号部分是共享文件夹设置,冒号前面是主机共享文件夹地址,后面是容器内地址):

docker run -dit -v /Users/xxx/workplace:/root/iraf/workplace michaelcs/astrocondairaf /bin/bash

用以下命令可以查看现有的容器:

docker ps -a
#输出如下:
  CONTAINER ID        IMAGE                      COMMAND                  CREATED            STATUS                      PORTS              NAMES
  79c1cea5ccdf        michaelcs/astrocondairaf  "/usr/bin/tini -- /b…"  2 hours ago        Up 25 minutes                                    amazing_shirley

特别说明:由于作者为减小镜像体积,故将vim等文本编辑器从镜像中移除(然并卵,镜像文件依旧很大,还增加了不必要的麻烦)。为了配置工作环境,我们可以在容器中配置好自己的工作环境后再保存为新的镜像,以后用新的镜像创建容器可以省去重新配置的麻烦。

我们刚才已经创建了容器,并且通过命令看到该容器已经在运行了(STATUS 为 Up;若没有运行,状态是Exited,则需要用命令:docker start ’容器ID’ 启动),输入命令进入容器:

docker attach ‘容器ID’      #ID只需要输入前4位就可以啦~
#例如:
docker attach 79c1

进入容器后,我们首先安装vim(方便修改login.cl等文件):

apt-get update
apt-get install vim

进入root文件夹并创建iraf文件夹,激活iraf27环境:

cd root
mkdir iraf
cd iraf
mkiraf
mkdir scripts  #可以将脚本文件放到这个文件夹

接下来编辑login.cl文件:

vim login.cl

找到’List any packages you want loaded at login time, ONE PER LINE.’将以下内容复制到该段并保存(笔者工作需要使用这些包,各位按需自行添加):

noao
digiphot
imred
crutil
spec
tv
onedspec
twodspec
ccdred
astutil
longslit
apextract
stsdas
kpnoslit
fitsutil

接下来去下载两个文件,用于去除图像中的宇宙线(若不需要用到可跳过)。进入LA-Cosmic download,下载IRAF的Imaging Version和Spectroscopic Version,下载的文件名分别为lacos_im.cl和lacos_spec.cl,将这两个文件放到/root/iraf/文件夹下。

进入stsdas.cl目录并编辑该文件:

cd /opt/conda/envs/iraf27/variants/common/iraf/stsci_iraf/stsdas/

vim stsdas.cl

将以下段复制进stsdas.cl文件并保存:

task lacos_im = "/root/iraf/lacos_im.cl"
task lacos_spec = "/root/iraf/lacos_spec.cl"

OK,环境配置完成,要使用iraf,先用‘source activate iraf27’命令激活环境,然后在/root/iraf/目录下输入'cl'即可进入iraf。

当然,想省去下次使用新容器的麻烦,可以将本次配置好的容器保存成镜像,今后用新镜像创建的新容器都是保存好的配置。

将容器保存成镜像的命令如下:

docker commit xxxxx yyyyy    #其中‘xxxxx’是你要保存成镜像的容器名称,‘yyyyy’是你创建镜像的名称
#例如:
docker commit amazing_shirley astroiraf
docker images
# 输出如下,astroiraf就是我们新建的镜像。今后就可以用astroiraf新建容器啦!
  REPOSITORY                TAG                IMAGE ID            CREATED            SIZE
  astroiraf                 latest              ad2f69ba3366        9 seconds ago      6.5GB
  michaelcs/astrocondairaf  latest              fad12202adae        3 years ago        6.45GB

完成!又可以愉快地工作啦~


最后,文中若有说得不对的地方,欢迎各位dalao指出~

你可能感兴趣的:(Docker配置iraf工作环境)