Docker: 文件系统更改未导出
Docker: filesystem changes not exporting
TL;DR 我的 docker save/export
不工作,我不知道为什么。
我正在为 Mac 使用 boot2docker。
我已经创建了一个 Wordpress 安装概念证明,并且正在使用 BusyBox 作为 MySQL 容器和主文件系统容器。我使用以下方法创建了这些容器:
> docker run -v /var/lib/mysql --name=wp_datastore -d busybox
> docker run -v /var/www/html --name=http_root -d busybox
运行 docker ps -a
显示两个容器,均基于 busybox:latest
。到目前为止,一切都很好。然后我创建 Wordpress 和 MySQL 容器,指向它们各自的数据容器:
>docker run \
--name mysql_db \
-e MYSQL_ROOT_PASSWORD=somepassword \
--volumes-from wp_datastore \
-d mysql
>docker run \
--name=wp_site \
--link=mysql_db:mysql \
-p 80:80 \
--volumes-from http_root \
-d wordpress
我转到我的 url (boot2docker ip
),那里有一个全新的 Wordpress 应用程序。我继续通过添加主题和一些图像来设置 Wordpress 站点。然后我 docker inspect http_root
果然文件系统更改都在那里。
然后我提交更改的容器:
>docker commit http_root evilnode/http_root:dev
>docker commit wp_datastore evilnode/wp_datastore:dev
我确认我的新图像在那里。然后我保存图像:
> docker save -o ~/tmp/http_root.tar evilnode/http_root:dev
> docker save -o ~/tmp/wp_datastore.tar evilnode/wp_datastore:dev
我确认 tar 文件也在那里。到目前为止,还不错。
这是我有点困惑的地方。我不确定是否需要,但我也导出了容器:
> docker export http_root > ~/tmp/http_root_snapshot.tar
> docker export wp_datastore > ~/tmp/wp_datastore_snapshot.tar
所以我现在有 4 个 tar 个文件:
- http_root.tar(保存的图像)
- wp_datastore.tar(已保存图片)
- http_root_snapshot.tar(出口集装箱)
- wp_datastore_snapshot.tar(出口集装箱)
我将这些tar文件SCP到另一台机器上,然后继续构建如下:
>docker load -i ~/tmp/wp_datastore.tar
>docker load -i ~/tmp/http_root.tar
图像 evilnode/wp_datastore:dev
和 evilnode/http_root:dev
已加载。
>docker run -v /var/lib/mysql --name=wp_datastore -d evilnode/wp_datastore:dev
>docker run -v /var/www/html --name=http_root -d evilnode/http_root:dev
如果我没理解错的话,容器只是根据我的图像创建的。
果然,容器在那里。但是,如果我 docker inspect http_root
,然后转到别名为 /var/www/html
的文件位置,该目录将完全是空的。 好的...
所以我认为我需要导入到新容器中,因为图像不包含文件系统更改。我这样做:
>cat http_root.snapshot.tar | docker import - http_root
我理解这意味着我正在将文件系统增量从一个容器导入另一个容器。但是,当我返回到别名为 /var/www/html
的位置时,我看到了相同的空目录。
如何从这些容器中导出更改?
新图像不导出卷。在 Docker 中管理数据的正确方法是使用数据容器并使用 docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
或 docker cp
之类的命令来备份数据并四处传输。 https://docs.docker.com/userguide/dockervolumes/#backup-restore-or-migrate-data-volumes
TL;DR 我的 docker save/export
不工作,我不知道为什么。
我正在为 Mac 使用 boot2docker。
我已经创建了一个 Wordpress 安装概念证明,并且正在使用 BusyBox 作为 MySQL 容器和主文件系统容器。我使用以下方法创建了这些容器:
> docker run -v /var/lib/mysql --name=wp_datastore -d busybox
> docker run -v /var/www/html --name=http_root -d busybox
运行 docker ps -a
显示两个容器,均基于 busybox:latest
。到目前为止,一切都很好。然后我创建 Wordpress 和 MySQL 容器,指向它们各自的数据容器:
>docker run \
--name mysql_db \
-e MYSQL_ROOT_PASSWORD=somepassword \
--volumes-from wp_datastore \
-d mysql
>docker run \
--name=wp_site \
--link=mysql_db:mysql \
-p 80:80 \
--volumes-from http_root \
-d wordpress
我转到我的 url (boot2docker ip
),那里有一个全新的 Wordpress 应用程序。我继续通过添加主题和一些图像来设置 Wordpress 站点。然后我 docker inspect http_root
果然文件系统更改都在那里。
然后我提交更改的容器:
>docker commit http_root evilnode/http_root:dev
>docker commit wp_datastore evilnode/wp_datastore:dev
我确认我的新图像在那里。然后我保存图像:
> docker save -o ~/tmp/http_root.tar evilnode/http_root:dev
> docker save -o ~/tmp/wp_datastore.tar evilnode/wp_datastore:dev
我确认 tar 文件也在那里。到目前为止,还不错。
这是我有点困惑的地方。我不确定是否需要,但我也导出了容器:
> docker export http_root > ~/tmp/http_root_snapshot.tar
> docker export wp_datastore > ~/tmp/wp_datastore_snapshot.tar
所以我现在有 4 个 tar 个文件:
- http_root.tar(保存的图像)
- wp_datastore.tar(已保存图片)
- http_root_snapshot.tar(出口集装箱)
- wp_datastore_snapshot.tar(出口集装箱)
我将这些tar文件SCP到另一台机器上,然后继续构建如下:
>docker load -i ~/tmp/wp_datastore.tar
>docker load -i ~/tmp/http_root.tar
图像 evilnode/wp_datastore:dev
和 evilnode/http_root:dev
已加载。
>docker run -v /var/lib/mysql --name=wp_datastore -d evilnode/wp_datastore:dev
>docker run -v /var/www/html --name=http_root -d evilnode/http_root:dev
如果我没理解错的话,容器只是根据我的图像创建的。
果然,容器在那里。但是,如果我 docker inspect http_root
,然后转到别名为 /var/www/html
的文件位置,该目录将完全是空的。 好的...
所以我认为我需要导入到新容器中,因为图像不包含文件系统更改。我这样做:
>cat http_root.snapshot.tar | docker import - http_root
我理解这意味着我正在将文件系统增量从一个容器导入另一个容器。但是,当我返回到别名为 /var/www/html
的位置时,我看到了相同的空目录。
如何从这些容器中导出更改?
新图像不导出卷。在 Docker 中管理数据的正确方法是使用数据容器并使用 docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
或 docker cp
之类的命令来备份数据并四处传输。 https://docs.docker.com/userguide/dockervolumes/#backup-restore-or-migrate-data-volumes