在一个容器中运行Postgres 9.5和Django,用于CI(竹)



我正在尝试在bamboo上配置DJANGO应用程序的CI作业,该测试要依靠数据库(Postgres 9.5(。似乎要解决的一种审慎方法是它在Docker容器中运行整个测试,因为我不控制代理环境,因此我无法在此处安装Postgres。

我发现的大多数指南都建议在两个单独的容器中运行Postgres和Django,并使用Docker-Compose轻松管理它们。在这种情况下,每个Docker映像仅运行一项服务,从CMD开始。在竹子中,我不能使用docker-compose,但是我只需要使用一个图像,所以我试图让Postgres和Django在一个容器中很好地一起运行,但到目前为止很少成功。

我的问题是,我看不到启动Postgres作为Docker内部的服务的简单方法Docker Docs但是我尚不清楚如何实施它。感谢您的帮助!

好吧,基本上您将在docker-entrypoint shell脚本中启动postgres作为背景过程,否则会启动您的django应用程序。

这里唯一的技巧是您需要在其中添加"陷阱"命令,以便可以在主过程停止时将关闭/杀死发送到背景过程中。

尽管我已经完成了一千次,但我知道这是编程错误的好来源。通常,我确实只使用我的docker-systemctl-replacement,它可以照顾多个应用程序作为服务,就像容器是托管多个应用程序的虚拟机一样。

您唯一的其他选项是在Dockerfile中添加启动脚本,或将其作为docker run ...命令的一部分启动。我们通常不使用" docker"任务,因为我发现它们... discanteful (这也是为什么我通常会落后运行"脚本"任务,而直接在该脚本中直接调用docker run任务(

无论如何,您必须让您的Docker容器执行一个脚本:

  1. 启动Postgres(例如sudo systemctl start postgresql(
  2. 执行您的测试。

您的Dockerfile必须安装PostgreSQL并做一些我想象的次要设置工作(例如,使用适当的所有者创建相关用户和数据库(。既然我们都是好公民,我们记得永远不要将您的容器作为根,对吗?

注意 - 您始终可以在不使用docker-compose的情况下互相交谈。有点方便,但是您可以做类似的事情:

docker run --detach --cidfile=db_cidfile --name ci_db postgresql_image
...
docker run --link ci_db testing_image

确保您的 EXPOSE postgresql映像上的右端口到testing_image容器。

编辑:我正在更多地查看我的特定情况 - 我们只需将PostgreSQL安装到基本CentOS主机中,而不是使用PostgreSQL默认映像(使用yum install http://yum.postgresql.org/..../pgdg-centos...rpm,然后只需从那里安装postgresql-serverpostgresql-contrib软件包(。我们的Dockerfile也有一个CMD [ "/usr/pgsql-ver/bin/postgres", "-D", "/var/lib/pgsql/ver/data"]。不过,我们不会使用Docker容器做任何事情。 Note :我们根本不使用它,这严格是针对本地和CI测试的。

最新更新