我花了一些时间在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 注册表作为标准。