git pull、docker compose build和docker compose up-d是在空机器上部署完整解决方案的好方法吗

git pull、docker compose build和docker compose up-d是在空机器上部署完整解决方案的好方法吗,docker,docker-compose,Docker,Docker Compose,最近,我们刚刚使用Docker完成了web应用程序解决方案 (实际的解决方案托管在私有存储库中。本例只是简单介绍一下我们的项目结构) 我们计划在部署时购买一台空的Linux机器。我们可能会在未来购买更多的机器,但根据目前的流量,1台机器就足够了 我在单个空机器上的部署计划是 git pull <from private code repository> docker-compose build docker-compose up -d git拉 docker组合构建 docker

最近,我们刚刚使用Docker完成了web应用程序解决方案

(实际的解决方案托管在私有存储库中。本例只是简单介绍一下我们的项目结构)

我们计划在部署时购买一台空的Linux机器。我们可能会在未来购买更多的机器,但根据目前的流量,1台机器就足够了

我在单个空机器上的部署计划是

git pull <from private code repository>
docker-compose build
docker-compose up -d
git拉
docker组合构建
docker compose up-d
由于我们将在不久的将来部署到多台机器上,我想知道,将docker应用程序部署到一台新的空机器上是一种常见的做法吗


在部署阶段,我们是否可以从中利用任何东西,而无需执行
git pull

您不想在每台机器上执行
git pull
——您的直觉是正确的

相反,您希望使用远程docker注册表(例如docker hub)

因此,每次更改源代码(git repo)时,正确的流程是:

  • git从所有相关回购中提取
  • docker compose build
    生成所有相关图像
  • docker compose push
    将所有图像(差异)推送到远程注册表
  • docker compose pull
    在您的生产机器中,以获取最新更新的图像
  • docker组合
    启动所有容器
  • 前3个步骤应该在CI机器中完成(例如,作为jenkins作业)。生产机器中的步骤4-5


    <强>编辑< /强>:要考虑的一件事。我认为通过docker compose构建是不好的。直接考虑使用代码> DOCK-Buff-F Doc文件-T RePo/图像:TAG。< /COD> >在代码> DOCKER撰写< /COD>只指定图像名。< /P> < P>在一台新机器上或其他方式部署它将是很好的。 最好的办法是进行私人回购,并将您的图像推送到那里

    建立和运输形象

    • git pull
    • docker构建
    • docker登录
    • docker推式回购/image
    拉取附带的映像并部署

    • docker登录服务器上的
    • docker pull repo/image
    • docker compose up-d

    虽然我建议您使用
    kubernetes
    查看集装箱调度,并使用
    jenkins
    设置
    CI/CD
    堆栈以实现此过程的自动化,但如果发生了不好的情况,它可能是一个救命稻草。

    我的意见是,您不应该在生产机器上构建映像。因为图像可能与您预期的不同,您应该限制自己在生产机器上的操作。。话虽如此,我建议:

  • 更新本地计算机上的代码(开发)
  • 当您将代码推送到git时,应该使用一些软件来构建 推送的图像。例如Gitlab CI(连续 集成工具)
  • gitlab ci将构建映像,然后可以对其运行一些测试 映像,然后将其部署到生产环境(此生成映像)
  • 在您的生产机器上只需执行
    docker编写拉&&
    docker编写up-d
    ,就是这样

  • 我强烈建议在生产机器以外的其他机器上构建映像,并在部署之前使用一些CI工具测试映像。例如

    对于步骤4,我如何知道应该将哪些服务拉到空机器?我需要手动操作吗?不,你不需要手动操作。这就是docker compose pull为您所做的。将您的每个图像与远程注册表中现有的图像进行比较是非常困难的,如果有更新的版本,他将提取图像差异并为您进行更新。我的意思是,最初,我的生产机器是完全空的。My docker hub包含10个服务的10个图像。所以,当我第一次在生产机器上运行时,我需要运行
    docker compose pull service0
    docker compose pull service1
    ?不需要。您不必指定每个服务。
    docker compose pull
    命令将为您执行此操作。它将比较您的
    docker compose.yml
    文件中指定的每个图像,并验证它是否是最新的。