docker run name MyContainer1 <same image id>
docker run name MyContainer2 <same image id>
docker run name MyContainer3 <same image id>
就这样
$ docker ps
CONTAINER ID IMAGE CREATED STATUS NAMES
a7e789711e62 67759a80360c 12 hours ago Up 2 minutes MyContainer1
87ae9c5c3f84 67759a80360c 12 hours ago Up About a minute MyContainer2
c1524520d864 67759a80360c 12 hours ago Up About a minute MyContainer3
每个容器使用相同的RO映像运行,但使用特定于RW容器的文件系统层。结果是每个容器都可以有自己的文件,这些文件与其他容器不同
您可以在CLI上以环境变量或唯一卷装载的形式传入配置。这是Docker的一个非常标准的用例
我认为看一些容易理解的例子可以给你最好的印象
您想要做的是完全有效的,映像应该是您需要运行的任何东西,而不需要配置
要生成配置,您可以:
a) 卷装载
在容器启动
docker run -v my.ini:/etc/mysql/my.ini percona
(与docker-compose
类似)期间使用卷并装载文件。 请注意,您可以随时重复此操作,因此将多个配置装载到您的容器中(因此映像的运行时版本)。 在运行容器之前,您将在主机上创建这些配置,并且需要随容器一起提供这些文件,这是这种方法的缺点(可移植性)b) 基于入口点的配置(生成)
大多数高级docker映像确实提供了一个复杂的所谓入口点,它使用启动映像时传递的ENV变量,为您创建配置,如https://github.com/docker-library/percona/blob/master/5.7/docker-entrypoint.sh
因此,当您运行此映像时,您可以执行
docker run -e MYSQL_DATABASE=myapp percona
,这将启动percona并为您创建数据库percona。 这一切都是由我们自己完成的当然,你可以用这个做任何你喜欢的事情。例如,这将配置一个通用端口映像:https://github.com/EugenMayer/docker-rancher-extra-catalogs/blob/master/templates/registry-slim/11/docker-compose.yml 哪个有这个入口点https://github.com/EugenMayer/docker-image-portus/blob/master/build/startup.sh
所以你看,入口点策略非常普遍,非常强大,我想只要你能,我就走这条路
c) 派生图像
可能是为了“完整性”,图像衍生策略,因此您有一个名为“myapp”的基础图像,在安装X时您创建一个新图像
把这张图片称为myapp:x——最明显的问题是,你最终会有很多图片,另一方面,与a)相比,它更便于携带
希望有帮助
只需根据需要从同一个映像运行多次即可。将创建新容器,然后可以启动和停止它们,每个容器保存自己的配置。为方便起见,最好为每个容器指定一个带有“name”的名称
F.i:
就这样
之后,您将永久创建容器,您可以像虚拟机一样启动和停止它们
相关问题 更多 >
编程相关推荐