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

时间:2014-11-21 19:37:14

标签: vagrant docker coreos

我花了一些时间与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

到目前为止一切正常。

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

我有两个简单的服务数据库和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

问题是;

如何创建开发环境以使无需连接互联网

1 个答案:

答案 0 :(得分:1)

我认为你可能过于复杂了。您不必明确要求保存和/或重复使用图像。

根据CoreOS文档

  

The overlay filesystem works similar to git: our image now builds off of the ubuntu base and adds another layer with Apache on top. These layers get cached separately so that you won't have to pull down the ubuntu base more than once.

虽然这仍然需要互联网连接以进行初始图像下载,但容器的后续启动应该重复使用缓存的图像。

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