如何在服务启动之前加载Docker镜像?
我花了一些时间与Vagrant和CoreOS和Docker,有这么多的学习…
我在一个开发环境中工作,经常UP和DESTROY操作,所以我不想每次下载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作为标准。