【问题标题】:Running postgres 9.5 and django in one container for CI (Bamboo)在 CI (Bamboo) 的一个容器中运行 postgres 9.5 和 django
【发布时间】:2019-05-22 13:10:01
【问题描述】:

我正在尝试在 Bamboo 上为 Django 应用程序配置 CI 作业,要运行的测试依赖于数据库(postgres 9.5)。似乎一个谨慎的方法是在 docker 容器中运行整个测试,因为我不控制代理环境,所以我不能在那里安装 Postgres。

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

我的问题是我看不到简单的方法来将 Postgres 作为 docker 内的服务而不是作为 docker CMD 命令启动,官方 postgre image 使用 entrypoint.sh 方法,也在官方docker docs 但我不清楚如何实现这一点。非常感谢您的帮助!

【问题讨论】:

    标签: django postgresql docker continuous-integration bamboo


    【解决方案1】:

    好吧,基本上你会在 docker-entrypoint shell 脚本中将 postgres 作为后台进程启动,否则它会启动你的 django 应用程序。

    这里唯一的技巧是您需要在其中放置一个“陷阱”命令,以便您可以在主进程停止时向后台进程发送关闭/终止。

    虽然我已经这样做了一千次,但我知道它是编程错误的好来源。一般来说,我只使用我的docker-systemctl-replacement,它负责将多个应用程序作为服务运行,就像容器是托管多个应用程序的虚拟机一样。

    【讨论】:

    • 谢谢!我会试一试,让你知道它是否在未来几天有效。
    【解决方案2】:

    您唯一的其他选择是在您的Dockerfile 中添加一个启动脚本,或者将其作为docker run ... 命令的一部分启动。我们通常不使用“Docker”任务,因为我发现它们...那个脚本任务)

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

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

    您的Dockerfile 将不得不安装 Postgresql 并进行一些我想象中的小规模设置工作(例如创建具有适当所有者的相关用户和数据库)。既然我们都是好公民,我们记得永远不要以 root 身份运行您的容器,对吧?

    注意 - 您总是可以在不使用 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 容器做任何花哨的事情。 注意:我们根本不会在生产中使用它,这仅用于本地和 CI 测试。

    【讨论】:

    • systemctl(或任何其他初始化系统)在 Docker 中不起作用,所以恐怕我不能使用这种方法。
    猜你喜欢
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    相关资源
    最近更新 更多