我为定制应用程序创建了一个Docker镜像,该应用程序需要一些许可证文件(一些文件和一个目录)才能运行,因此我在Dockerfile
中使用COPY命令将许可证文件复制到镜像中:
# 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-address
参数指定它自己的MAC地址:
docker run --rm --mac-address AB:CD:EF:12:34:56 me/application-license1
我的方法可以工作,但我希望有更好、更智能的方法来管理这个:
docker-compose
与指定容器 MAC 地址类似,我是否可以只使用未经许可的基本镜像,在构建 5 个容器时复制许可文件和许可目录?
编辑:让我更好地解释一下许可文件的结构
应用程序部署在 Docker 镜像的 /opt/application
目录中。
许可文件 (*.license
) 与应用程序本身位于同级别的 /opt/application
中,因此除非我创建一些符号链接(但我必须检查应用程序是否能以这种方式工作),否则无法将其保存到 Docker 卷中。
应用程序许可目录需要位于 /var/lib/application-license-dir
,以便可以将其挂载到 Docker 卷中(我必须检查应用程序是否能工作,但我认为是可以的)。
*.license
文件以及 application-license-dir
中的文件都是二进制的,因此我无法在运行时编写脚本或创建它们。
所以:
docker-compose
是否可以在绑定和挂载到 Docker 卷之前在 Docker 主机服务器上创建一个本地目录?docker-compose
是否可以从 Git 仓库(本地克隆)将我的许可证文件和许可证目录复制到第一步创建的本地目录中?docker-compose
是否可以为存储在卷中的*.license
文件在容器的/opt/application
目录中创建一些符号链接?
app1.license
卷可以是一个文件吗?所以我的理解是Docker Compose不能动态部署容器,因此我应该创建一些脚本(例如Fabric)将许可证文件复制到卷目录中,并根据我正在部署的许可证创建Docker Compose文件(我有5个许可证,每个许可证都有不同的文件/目录,一个许可证可以有不同数量的.license
文件要复制到附加到容器的卷上)。 - Matapp1.license
文件挂载到容器中固定的/opt/application
目录中,因此您可以为每个容器重复此操作(使用不同的文件)。 - David Maze