gpt4 book ai didi

docker - 什么是好的 docker webdev 工作流程?

转载 作者:IT老高 更新时间:2023-10-28 12:33:09 35 4
gpt4 key购买 nike

我有预感 docker可以极大地改善我的 webdev 工作流程——但我还没有完全理解如何处理将 docker 添加到堆栈的项目。

基本的软件堆栈如下所示:

软件

  • 提供自定义 LAMP 堆栈的 Docker 镜像

    • 具有多个模块的 Apache
    • MYSQL
    • PHP
    • 一些 CMS,例如Silverstripe
  • GIT

工作流程

我可以想象工作流程看起来有点像以下:

发展

  1. 编写一个 Dockerfile 来定义一个满足上述要求的 LAMP 容器
    • 要求:机器应该在启动后立即启动 apache/mysql
  2. 构建 docker 镜像
  3. 将运行 CMS 所需的文件复制到例如~/dev/cmsdir
    • ~/dev/cmsdir/置于版本控制之下
  4. 运行 docker 容器,并以某种方式将 ~/dev/cmsdir 挂载到容器上的 /var/www/
  5. 填充数据库
  6. /dev/cmsdir/
  7. 中工作
  8. 提交并关闭 docker 容器

部署

  1. 设置远程主机(例如使用 ansible)
  2. 将容器镜像推送到远程主机
  3. 通过 git 获取 cmsdir-project
  4. 运行docker容器,拉入数据库并将cmsdir挂载到/var/www

现在,这在纸面上看起来都不错,但我不太确定这是否是正确的方法。

问题:

  1. 在本地开发时,如何让数据库在容器实例重启之间保持不变?或者我是否需要在每次关闭容器之前运行 sql-dump?

  2. 我应该为 db 和 apache 服务器有单独的容器实例吗?还是为上述用例提供一个容器就足够了?

  3. 如果为数据库和服务器使用单独的容器,我如何能够自动同时上下旋转它们?

  4. 我如何将 /dev/cmsdir/ 实际挂载到容器 /var/www/ 目录中?我应该使用 data-volumes为此?

  5. 我是否遗漏了任何陷阱?有什么可以简化的吗?

最佳答案

  1. 如果您需要独立于 CMS 容器的数据库持久性,您可以为 MySQL 使用一个容器,为 CMS 使用一个容器。在这种情况下,您可以让您的 MySQL 容器仍在运行,并且您可以根据需要独立重新部署您的 CMS。

    对于开发 - 另一种选择是使用数据卷从您的主机/开发机器映射 mysql 数据目录。通过这种方式,您可以使用 git(在主机上)和“重新加载”初始状态(在启动 mysql 容器之前)随时(在启动 mysql 容器之前)管理 mysql(在 docker 中)的数据文件。

  2. 是的,我认为您应该有一个单独的 db 容器。

  3. 我只使用基本脚本:

    #!/bin/bash

    $JOB1 = (docker run ... /usr/sbin/mysqld)
    $JOB2 = (docker run ... /usr/sbin/apache2)
    echo MySql=$JOB1, Apache=$JOB2
  4. 是的,您可以使用 data-volumes -v 开关。我会用它来开发。您可以使用只读挂载,因此如果您愿意,不会对此目录进行任何更改(您的应用程序应该将数据存储在其他地方)。

    docker run -v=/home/user/dev/cmsdir:/var/www/cmsdir:ro image /usr/sbin/apache2

    无论如何,对于最终部署,我将使用带有 ADD/home/user/dev/cmsdir/var/www/cmsdir

    的 dockerfile 构建和镜像
  5. 我不知道 :-)

关于docker - 什么是好的 docker webdev 工作流程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20164466/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com