Docker

pycsw可用作 Docker图像。图像被寄存在 Docker Hub. 上。

假设已经安装了docker,可以通过发出以下命令来启动和运行pycsw实例:

docker run -p 8000:8000 geopython/pycsw

Docker将从 Docker集线器(如果需要)检索 pycsw 映像,然后在端口8000上启动侦听新容器.

默认配置将运行pycsw, sqlite存储库后端装载来自CITE测试套件的一些测试数据。您可以使用它来测试pycsw。

检查日志

Docker映像的默认配置将日志输出到stdout。这是对接容器的常见做法,并使 docker logs 命令检查日志成为可能:

# run a pycsw container in the background
docker run \
    --name pycsw-test \
    --publish 8000:8000 \
    --detach \
    geopython/pycsw

# inspect logs
docker logs pycsw-test

注解

为了将pycsw日志发送到标准输出,必须在pycsw配置文件中设置 server.logfile=

使用PYCSW管理

pycsw-admin can be executed on a running container by using docker exec:

docker exec -ti <running-container-id> pycsw-admin.py -h

运行自定义PysCW容器

pycsw 配置

可以为pycsw提供自定义配置文件作为绑定安装或作为docker秘密(在docker群集的情况下)。配置文件在 PYCSW_CONFIG 环境变量的值处进行搜索,该环境变量默认为 /etc/pycsw/pycsw.cfg

通过绑定安装提供配置文件::

docker run \
    --name pycsw \
    --detach \
    --volume <path-to-local-pycsw.cfg>:/etc/pycsw/pycsw.cfg \
    --publish 8000:8000 \
    geopython/pycsw

通过docker 机密提供配置文件:

# first create a docker secret with the pycsw config file
docker secret create pycsw-config <path-to-local-pycsw.cfg>
docker service create \
    --name pycsw \
    --secret src=pycsw-config,target=/etc/pycsw/pycsw.cfg \
    --publish 8000:8000
    geopython/pycsw

sqlite 存储库

默认的数据库存储库是用于运行pycsw测试套件的CITE数据库。Docker卷可以用来指定自定义sqlite数据库路径。它应该安装在 /var/lib/pycsw:

# first create a docker volume for persisting the database when
# destroying containers
docker volume create pycsw-db-data
docker run \
    --volume db-data:/var/lib/pycsw \
    --detach \
    --publish 8000:8000
    geopython/pycsw

PostgreSQL存储库

指定PostgreSQL存储库只是用正确的规范配置自定义pycsw.cfg 文件的问题。

查看 pycsw's github repository ,例如 docker-compose/stack文件,该文件将postgis数据库与pycsw实例一起旋转。

用docker建立开发环境

使用docker处理pycsw的代码可以实现一个隔离的环境,它有助于确保可重现性,同时使您的基本系统免受pycsw相关依赖项的影响。这可以通过以下方式实现:

  • 在本地克隆pycsw的储存库;
  • 使用适当的绑定安装启动docker容器。此外,pycsw docker映像支持 reload 标志,当代码发生变化时,该标志将自动重新加载gunicorn web服务器;
  • 与root用户一起使用 docker exec 安装开发依赖项;

以下说明建立了一个完整工作的开发环境:

# clone pycsw's repo
git clone https://github.com/geopython/pycsw.git

# start a container for development
cd pycsw
docker run \
    --name pycsw-dev \
    --detach \
    --volume ${PWD}/pycsw:/usr/lib/python3.5/site-packages/pycsw \
    --volume ${PWD}/docs:/home/pycsw/docs \
    --volume ${PWD}/VERSION.txt:/home/pycsw/VERSION.txt \
    --volume ${PWD}/LICENSE.txt:/home/pycsw/LICENSE.txt \
    --volume ${PWD}/COMMITTERS.txt:/home/pycsw/COMMITTERS.txt \
    --volume ${PWD}/CONTRIBUTING.rst:/home/pycsw/CONTRIBUTING.rst \
    --volume ${PWD}/pycsw/plugins:/home/pycsw/pycsw/plugins \
    --publish 8000:8000 \
    geopython/pycsw --reload

# install additional dependencies used in tests and docs
docker exec \
    -ti \
    --user root \
    pycsw-dev pip3 install -r requirements-dev.txt

# run tests (for example unit tests)
docker exec -ti pycsw-dev py.test -m unit

# build docs
docker exec -ti pycsw-dev sh -c "cd docs && make html"

注解

请注意,pycsw映像只使用python 3.5,而且它也不以可编辑模式安装pycsw。因此,不可能使用 tox .

由于docs目录是从主机绑定到容器中的,所以在构建docs之后,您可以可视化地检查它们的内容,例如,通过运行:

firefox docs/_build/html/index.html