Docker撰写指定图像与Dockerfile

时间:2017-08-20 19:54:47

标签: docker-compose

我是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:
  3. 我想了解的是使用docker-compose的最佳做法是什么 在我深入研究它之前,我应该为每个服务创建指定image(并替换为FROM内的Dockerfile),还是应该指定构建文件夹和卷的路径以保持生命代码更改,volumes在使用image代码

    时如何运作及其用法

    谢谢!

1 个答案:

答案 0 :(得分:2)

在Docker中,您只需将服务作为容器运行,您就可以将每个服务的状态放在卷中。这意味着你:

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

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

  1. 保留目录结构。
  2. 使用docker-compose构建部分根据您的Dockerfiles构建您的immages。
  3. 配置Dockerfile以将二进制文件放入图像中。
  4. 只需使用docker-compose up -d
  5. 启动整个堆栈,包括构建
  6. 您的二进制文件已更改?只需用docker-compose up --build --force-recreate -d替换整个堆栈即可。此命令将重建所有映像并替换容器。
  7. 为什么不将二进制文件放在卷中:

    • 您失去了图像版本控制的优势。
    • 如果您更换二进制文件,则无法简单地回退到较旧的图像版本。
    • 您可以在部署新版本之前重新映像图像,如果发生错误则可以回退。
    • 您可以标记并保存正在运行的容器以进行后备和错误调查。