如何在服务启动之前加载Docker镜像?

我花了一些时间与Vagrant和CoreOS和Docker,有这么多的学习…

我在一个开发环境中工作,经常UPDESTROY操作,所以我不想每次下载docker图像 …它需要太多的时间,图像是非常重的。

那么,我拉我最经常使用的图像,并保存它们。

core@core-01 ~ $ docker save ubuntu:latest > /home/core/share/ubuntu.tar core@core-01 ~ $ docker save mysql > /home/core/share/mysql.tar core@core-01 ~ $ docker save wordpress:latest > /home/core/share/wordpress.tar 

如果需要,我再次加载它们。

 core@core-03 ~ $ docker load -i=/home/core/share/wordpress.tar core@core-04 ~ $ docker load -i=/home/core/share/mysql.tar 

到目前为止一切正常。

但是当我尝试构build集群时,我遇到了问题。

我有两个简单的服务数据库和Web

database.1.service

 [Unit] Description=Run database_1 After=docker.service Requires=docker.service [Service] Restart=always RestartSec=10s ExecStartPre=/usr/bin/docker ps -a -q | xargs docker rm ExecStart=/usr/bin/docker run --rm --name database_1 -e "MYSQL_DATABASE=demo" -e "MYSQL_ROOT_PASSWORD=password" -p 3306:3306 mysql ExecStartPost=/usr/bin/docker ps -a -q | xargs docker rm ExecStop=/usr/bin/docker kill database_1 ExecStopPost=/usr/bin/docker ps -a -q | xargs docker rm [Install] WantedBy=local.target 

web.1.service

 [Unit] Description=Run web_1 After=database.1.service Requires=database.1.service [Service] Restart=always RestartSec=10s ExecStartPre=/usr/bin/docker ps -a -q | xargs docker rm ExecStart=/usr/bin/docker run --rm --name web_1 --link database_1:database_1 -e "DB_USER=root" -e "DB_PASSWORD=password" -p 80:80 wordpress ExecStartPost=/usr/bin/docker ps -a -q | xargs docker rm ExecStop=/usr/bin/docker kill web_1 ExecStopPost=/usr/bin/docker ps -a -q | xargs docker rm [Install] WantedBy=local.target 

如何在服务启动之前加载mysql镜像(/home/core/share/mysql.tar)。 如果服务启动,然后再次下载图像。

 $ fleetctl start database.1.service $ fleetctl start web.1.service 

我可以加载图像如下?

 ExecStartPre=/usr/bin/docker load -i=/home/core/share/mysql.tar 

问题是;

如何在没有互联网连接的情况下创build开发环境?

我想你可能会过分复杂的事情。 您不必明确地要求保存和/或重用图像。

根据CoreOS文档

覆盖文件系统的工作方式类似于git:我们的图像现在基于ubuntu基础构build,并在顶部添加了另一个包含Apache的图层。 这些层分别被caching,这样你就不用多次拉下Ubuntu基地了

虽然这仍然需要互联网连接的初始图像下载,容器的后续启动应重新使用caching的图像。

如果您需要更多的控制,您可能需要考虑在CoreOS集群中维护一个私有Dockerregistry。 我发现这样做的最好方法是使用Deis ,它带有一些好东西,包括集群范围的容错文件系统和私有Dockerregistry作为标准。