Docker:用docker-compose复制文件和目录。

问题描述 投票:1回答:1

我为一个自定义应用程序创建了一个Docker Image,它需要一些许可证文件(一些文件和一个目录)来运行,所以我使用COPY命令在 Dockerfile 复制许可证文件到图像上。

# Base image: Application installed on Debian 10 but unlicensed
FROM me/application-unlicensed

# Copy license files
COPY *.license /opt/application/
COPY application-license-dir /var/lib/application-license-dir

我用这个 Dockerfile 构建一个新的镜像,并为一个容器提供许可证。由于我有5个不同的许可证,我创建了5个不同的镜像,每个镜像都有一个特定的许可证文件和目录。

许可证也被固定在一个 MAC地址因此,当我运行五个容器中的一个时,我指定它自己的MAC地址与 --mac-address 参数。

docker run --rm --mac-address AB:CD:EF:12:34:56 me/application-license1

但我希望有一个更好更聪明的方法来管理它。

就像... docker-compose 是否可以指定容器的MAC地址,我是否可以只使用未授权的基本镜像,并在我用 docker-compose?


编辑:让我更好地解释许可证文件的结构。

该应用程序部署到 /opt/application 目录到Docker镜像中。

许可证文件(*.license)都进入了 /opt/application 在应用程序本身的同一级别,它们不能被保存到Docker卷中,除非我创建一些符号链接(但我必须检查应用程序是否能以这种方式工作)。

目录application-license-dir需要位于 /var/lib/application-license-dir因此,它可以被挂载到一个Docker卷(我必须检查应用程序是否会工作,但我认为是这样)。

这两个 *.license 文件,并将文件放入 application-license-dir 是二进制的,所以我不能在运行时编写脚本或创建它们。

所以。

  1. 可以 docker-compose 在绑定和挂载到Docker卷之前,在Docker主机服务器上创建一个本地目录?
  2. 可以 docker-compose 将我的许可证文件和我的许可证目录从GIT仓库(本地克隆)复制到步骤1中创建的本地目录?
  3. 可以 docker-compose 创建一些符号链接到container的 /opt/application 目录中的 *.license 文件存储到卷中?
docker docker-compose
1个回答
3
投票

对于每次运行容器或在不同系统上运行容器时都不一样的东西,一般不希望在Dockerfile中指定这些。 这包括你上面显示的许可证文件;像用户ID这样的东西也符合这种模式;根据你的配置文件的固定程度,它们也可以算作。 (对于那些 一样 每次运行容器时,你都希望在你的映像中加入这些内容;尤其是这是应用程序的源代码。)

你可以使用一个Docker 绑定安装 来在运行时将文件注入容器中。 Compose 语法中,有一个使用 volumes: 指令。

这样你就会得到一个类似于Compose的文件。

version: '3'
services:
  app1:
    image: me/application-unlicensed
    volumes:
      - './app1.license:/opt/application/app.license'
      - './application-license-dir:/var/lib/application-license-dir'
    mac_address: 'AB:CD:EF:12:34:56'

像这样的绑定挂载是将配置文件推送到容器中的好办法。 它们可以提供一个空的主机目录,将日志文件写入其中,但并不是将数据从镜像中复制出来的机制。 如果你的应用程序不能将其所有的状态都存储在外部数据库中,那么它们也很有用,可以作为存储需要超过容器寿命的数据的地方。


3
投票

根据 本次提交 docker-compose有 mac_address 支持.安装许可证文件 -v 可以是一个选项。


2
投票

你可以将不同容器的mac_address设置为mac_address: AB:CD:EF:12:34:12. 参考文件 见此

如果要从同一个镜像中创建多个实例,你必须在你的docker-compose文件中复制粘贴每个应用块5次,并且在每个应用块中你可以设置不同的mac_adddress。

© www.soinside.com 2019 - 2024. All rights reserved.