使用Docker容器快速部署ODC (Open Data Cube)
一、 整体架构
Open Data Cube (ODC)是一个新型的开源的地球观测数据(其实就是遥感照片)管理与分析平台,适合进行时间序列数据的高性能计算和探索性数据分析(其实就像个“数据库”)。
只要是Linux的软件,Docker容器都可以一把拉起来,不需要和其他人那样安装各种依赖库,方便。
所以本文全程使用Docker容器。 整体过程,按照docker-compose模板
https://github.com/opendatacube/cube-in-a-box/blob/main/docker-compose.yml
(注:但未使用docker-compose,而是单纯采用docker手动启动)
一、 准备镜像
总共需要3个镜像。
1. 前2个镜像直接下载
docker pull postgis/postgis:12-2.5
docker pull schaffdev/port_check:latest
其中后面那个镜像,好像没什么用,只是做了些“健康检查”。本次操作忽略这个镜像。
2. 第3个镜像-下载现成的
本来看ODC仓库,感觉这个odc镜像是需要自己打包的(看下一章节)。不过发现https://github.com/opendatacube/cube-in-a-box/blob/main/docker-compose-prod.yml
这个里面有个现成的,下载下来发现也可以直接用。
docker pull opendatacube/cube-in-a-box:latest
3. 第3个镜像-自己打包方式
注:如果要自己打包odc镜像,可以参考当前章节。偷懒的话,就跳过。
因为开发环境是内网不方便联网,直接手动执行如下dockerfile内容
https://github.com/opendatacube/cube-in-a-box/blob/main/Dockerfile
首先下载tini程序:
https://github.com/krallin/tini/releases/download/v0.19.0/tini
下载基础镜像
docker pull osgeo/gdal:ubuntu-small-3.3.1
重新dockerfile
FROM osgeo/gdal:ubuntu-small-3.3.1
ENV DEBIAN_FRONTEND=noninteractive \
LC_ALL=C.UTF-8 \
http_proxy=http://100.173.102.252:3128/ \
LANG=C.UTF-8
COPY ./tini /tini
RUN chmod +x /tini
RUN cp -a /etc/apt/sources.list /etc/apt/sources.list.bak && \
sed -i "s@http://.*archive.ubuntu.com@http://mirrors.tools.huawei.com@g" /etc/apt/sources.list && \
sed -i "s@http://.*security.ubuntu.com@http://mirrors.tools.huawei.com@g" /etc/apt/sources.list
RUN apt-get update && \
apt-get install -y \
build-essential \
git \
# For Psycopg2
libpq-dev python3-dev \
python3-pip \
wget \
&& apt-get autoclean \
&& apt-get autoremove \
&& rm -rf /var/lib/{apt,dpkg,cache,log}
COPY requirements.txt /conf/
COPY products.csv /conf/
RUN http_proxy=http://100.173.102.252:3128/ pip3 install --no-cache-dir --requirement /conf/requirements.txt
WORKDIR /notebooks
ENTRYPOINT ["/tini", "--"]
CMD ["jupyter", "notebook", "--allow-root", "--ip='0.0.0.0'", "--NotebookApp.token='secretpassword'"]
使用该dockerfile,使用docker build构建镜像。
或者按照dockerfile的内容,一步一步执行,在最后使用commit模式完成打包。
docker commit --change='ENTRYPOINT ["/tini", "--"]' --change='CMD ["jupyter", "notebook", "--allow-root", "--ip='0.0.0.0'", "--NotebookApp.token='secretpassword'"]' d3ad84b28a50 odc-jupyter:tsj
生产一个 odc-jupyter:tsj 的镜像
总共3个镜像准备好了。
二、 启动ODC组件
这里整个启动过程,参考 docker-compose.yml 内容
1. 启动postgres
docker run -d -e POSTGRES_DB=opendatacube -e POSTGRES_PASSWORD=opendatacubepassword -e POSTGRES_USER=opendatacube -v /home/tsjsdbd/cube-in-a-box/tsjsdbd/data/pg:/var/lib/postgresql/data postgis/postgis:12-2.5
获取数据库Postgres容器的IP地址(odc需要连接这个地址),通过docker inspect 命令
我这里查到postgres容器IP为:172.17.0.7
2. 启动ODC
这里用我手动打包的odc镜像启动(下一章节,是直接下载的odc镜像验证)
docker run -d -e DB_HOSTNAME=postgres -e DB_USERNAME=opendatacube -e DB_PASSWORD=opendatacubepassword -e DB_DATABASE=opendatacube -e AWS_NO_SIGN_REQUEST=true -e CIABPASSWORD=tsjsdbd -v /home/tsjsdbd/cube-in-a-box/notebooks:/notebooks -v /home/tsjsdbd/cube-in-a-box/products.csv:/products.csv -v /home/tsjsdbd/cube-in-a-box/tini:/tini --add-host=postgres:172.17.0.7 -p 8080:8888 odc-jupyter:tsj
注意上面的
--add-host=postgres:172.17.0.7
表示,域名“postgres”的解析结果为 “172.17.0.7”,即指向刚才启动的db容器。
ODC启动成功后,登录到odc容器内部,执行初始化操作:
datacube system init
三、 验证ODC
这里直接使用官方打好的镜像镜像验证
docker run -d -p 443:8888 -e DB_HOSTNAME=postgres -e DB_USERNAME=opendatacube -e DB_PASSWORD=opendatacubepassword -e DB_DATABASE=opendatacube -e AWS_NO_SIGN_REQUEST=true -e CIABPASSWORD=tsjsdbd -v /home/tsjsdbd/cube-in-a-box/odctest:/home/odctest --add-host=postgres:172.17.0.7 opendatacube/cube-in-a-box
启动后,在容器里面,执行odc的功能验证,如:
datacube product add DEM_product.yaml
同时,还可以通过Chrome浏览器(如上面我使用443端口),登录刚才odc容器。
打开 Notebook ,对odc进行交互式的使用。
登录密码是:secretpassword,可以从 docker inspect 看到:
- 点赞
- 收藏
- 关注作者
评论(0)