Docker compose 指定镜像与 Dockerfile

2024-04-05

我是新来的docker-compose阅读完文档后,我仍然有一些不清楚的事情浮现在我的脑海中。

到目前为止,当我使用 docker 时,我将构建保存在以下目录树中:

builds:
    Service A:
        Dockerfile
        ServiceA.jar
    Service B:
        Dockerfile
        ServiceB.jar

因此,当我想运行所有内容时,我使用一些 shell 脚本,直到我读到docker-compose.

我看到有两种创建和运行服务的方法(以复制文件的方式)

  1. 指定build: path/to/my/build/directory并将其链接到volumes:这样它就可以看到实时代码并刷新服务
  2. 指定image:(例如java:8),然后使用volumes:如上

我想了解的是使用的最佳实践是什么docker-compose在我深入研究之前,我应该创建指定image对于每项服务(并替换为FROM在 - 的里面Dockerfile)或者我应该指定构建文件夹和卷的路径以保持实时代码更改,以及如何volumes使用时的工作及其用途image tag

Thanks!


在 Docker 中,您可以简单地将服务作为容器运行,并且可以将每个服务的状态放在一个卷中。这对您来说意味着:

  • 该服务作为运行时容器运行,将从映像启动。
  • 该服务的二进制文件位于映像内,服务本身将数据写入卷。
  • 映像可以从映像存储库中提取,也可以在目标环境上构建。
  • 可以使用以下命令构建图像docker build或 docker-compose 构建部分。

在您的示例中,这意味着:

  1. 保留目录结构。
  2. 使用 docker-compose 构建部分根据 Dockerfile 构建图像。
  3. 配置 Dockerfile 以将二进制文件放入映像中。
  4. 只需启动整个堆栈,包括构建docker-compose up -d
  5. 你的二进制文件改变了吗?只需将整个堆栈替换为docker-compose up --build --force-recreate -d。此命令将重建所有映像并替换容器。

为什么不将二进制文件放入卷中:

  • 您将失去图像版本控制的优势。
  • 如果替换二进制文件,则不能简单地回退到旧的映像版本。
  • 您可以在部署新版本之前重新标记映像,并在发生错误时回退。
  • 您可以标记并保存正在运行的容器以进行回退和错误调查。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker compose 指定镜像与 Dockerfile 的相关文章

随机推荐

  • 表达式树的实际使用[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 表达式树是一个很好的功能 但它的实际用途是什么 它们可以用于某种代码生成或元编程等吗 正如乔恩所说 我用它们来提供通用运算符 http
  • 在 Clang 中以可移植且最佳的方式将 uint64_t 转换为字节数组

    如果你想转换uint64 t to a uint8 t 8 小端 在小端架构上你可以做一个丑陋的reinterpret cast lt gt or memcpy e g void from memcpy const std uint64 t
  • 在 Woocommerce 中将 Avada Catalog 排序挂钩覆盖回默认值

    我正在尝试通过将以下代码添加到 Avada child 来修改 Woocommerce 排序选项以获得自定义排序选项function php file add custom sorting option add filter woocomm
  • 检查字母数字字符并从 HTML 表单获取输入

    我对 Perl 编程相当陌生 有几个似乎无法解决的编译问题 我的程序从这个 HTML 表单获取输入 问题 我的表单应该使用 post 方法还是 get 方法
  • 使用VS2008和Office2007将Excel转换为PDF

    我正在尝试使用 Interop Excell 将 Excel 工作簿另存为 PDF 文件 我使用的是VS2008和Office2007 并从Microsoft下载并安装了SaveAsPDFandXPS exe 这使我能够使用以下代码将 Wo
  • 如何反序列化包含无效字段名称的 JSON 对象

    我有一个 JSON 请求 其结构如下 formats flash embed http a3 vikiassets com assets vikiplayer 922746a667cfd38137a7e45df6ba1b95 swf aut
  • 密钥库操作失败:填充模式不兼容

    我正在使用 AndroidKeystore 生成 RSA 密钥对并使用该密钥对进行加密和解密 我的密钥对生成代码如下所示 var keypairGen KeyPairGenerator KeyPairGenerator getInstanc
  • CSS3“曲面”3D 变换/透视帮助

    我正在尝试为我的网站创建一种有观点的人群 它实际上是一个充满平面图像的 ul 我想创建一种 弯曲 的感觉 就像圆形的人群一样 它向内并且向内明显变小 并向末端弯曲 海报圈的例子是我能找到的最接近的http www webkit org bl
  • 如何从java通过hdfs协议访问hadoop?

    我找到了一种通过以下方式连接到hadoop的方法hftp 并且工作正常 只读 uri hftp 172 16 xxx xxx 50070 System out println uri uri Configuration conf new C
  • 如何检查 Bash 中是否存在某些文件?

    In a bash脚本 我必须检查多个文件是否存在 我知道一种尴尬的方法 如下所示 但这意味着我的主程序必须位于那个丑陋的嵌套结构中 if f FILE1 then if f FILE2 then echo OK MAIN PROGRAM
  • Python: type(i) 是 int...但 i 是 int = False

    我很确定我在做一些愚蠢的事情 但不知道那是什么 predict fn abc data In 3 predict Out 3 array 2 In 4 type predict Out 4 numpy ndarray 现在用以下内容包装我的
  • 当父div在屏幕上不可见时,jQuery UI位置函数问题

    我在 jQuery UI Position 函数方面遇到了一个奇怪的问题 有一个父 div 大于屏幕高度 其中还有另一个小 div 我的函数告诉小 div 位于其父级的底部 当底部可见时 一切正常 但是当由于窗口大小而导致底部不可见时 位置
  • Java 中函数指针最接近的替代品是什么?

    我有一个大约十行代码的方法 我想创建更多的方法来完成完全相同的事情 除了将更改一行代码的小计算之外 这是一个完美的应用程序 用于传递函数指针来替换该行 但 Java 没有函数指针 我最好的选择是什么 匿名内部类 假设你想要一个带有 a 的函
  • 使用node-sass查看所有子目录

    我见过很多使用以下命令观看特定文件夹的示例node sass 但我的 css 并不都在同一个文件夹中 我想让它像你一样监视所有子目录中的 scss 文件onchange 仅举个例子 我假设语法类似于 node sass w app scss
  • 在两个 NodeJS 微服务之间共享自定义代码

    我正在为该应用程序创建 Web 应用程序和微服务 并且两者都需要使用 Sequelize 创建相同的数据库模型 使用 NodeJS 处理此任务的方法是什么 我正在考虑创建我的数据库模型的单独模块并将其保存在私有 git 中 并将此私有 gi
  • Citrix 服务器是否支持 WebView2

    我们有一个来自第三方的应用程序 它需要WebView2 按照说明在我们的机器上安装了 WebView2 它在我们的桌面上运行良好 我们在Citrix服务器中以完全相同的方式安装 但它不起作用 知道 Citrix 服务器是否支持 WebVie
  • Flutter - 获取唯一设备 ID

    我正在制作一个带有基于令牌的系统的应用程序 因此 用户可以购买代币并使用它们进行一些操作 使用电子邮件和密码创建帐户后 每个用户免费获得 10 个代币 作为试用版 我想防止该用户每次都获得一个新帐户来获得另外 10 个令牌 我想知道 And
  • 如何注入ApplicationContext本身

    我想注射一个ApplicationContext本身就是一颗豆子 就像是 public void setApplicationContext ApplicationContect context this context context 春
  • 如何在 bash 中构建条件赋值?

    我正在寻找一种在 bash 中构建条件分配的方法 在 Java 中它看起来像这样 int variable condition 1 0 如果您想要一种在 shell 脚本中定义默认值的方法 请使用如下代码 VAR default 是的 该行
  • Docker compose 指定镜像与 Dockerfile

    我是新来的docker compose阅读完文档后 我仍然有一些不清楚的事情浮现在我的脑海中 到目前为止 当我使用 docker 时 我将构建保存在以下目录树中 builds Service A Dockerfile ServiceA ja