如何在服务启动之前加载 docker 映像



我花了一些时间在Vagrant&CoreOS和Docker上,有很多东西需要学习......

我在开发环境中工作,并不断启动销毁操作,所以我不想每次都下载 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

到目前为止,一切都很好。

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

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

数据库.1.服务

[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

网络.1.服务

[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

问题是;

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

我认为

你可能把事情复杂化了。您不必明确要求保存和/或重复使用图像。

根据 CoreOS 文档

覆盖文件系统的工作方式类似于 git:我们的镜像现在建立在 ubuntu 基础上,并在上面添加了另一层 Apache。这些层是单独缓存的,这样你就不必多次拉下 ubuntu 基础

虽然这仍然需要互联网连接才能下载初始映像,但容器的后续启动应重用缓存的映像。

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

最新更新