Docker 的 image 存放位置通过修改服务的 -g 选项进行修改。

ubuntu 上修改 /etc/default/docker.io,内容为:

1
DOCKER_OPTS="-g /path/to/docker/you/want/put"

Docker 会记录 image 所有 build 的历史,所以 build 的过程尽量精简。
Docker 允许一个 image 的操作历史不可以大于 127 次。
Docker 在完成一个项目的 image 基础版本 build 后,为了去除 build 过程中的历史以及当前 image 依赖的基础 image 的历史,需要从可运行的 containerdocker export 一份 image 的包,然后通过 docker import 进行导入,这样生成的新的 image 没有任何历史,可以作为项目的基础镜像。

导出过程:

1
$ docker export [container-id] |gzip > /path/to/file.tar.gz

导入过程:

1
$ cat /path/to/file.tar.gz | docker import - [image-name:image-tag]

用以上方式导出会丢弃历史记录以及 曾经 build 过程中的 ENV, 所以基于此镜像进行更新操作时需要重新定义 ENV
项目镜像后续的更新最好始终基于此项目基础镜像,更新 build 的过程中打一个不同的 tag 以与 基础版本区分,这样能保证后续更新镜像的精简。
可以使用 SSH 等方法登入项目基础镜像进行修正。

修正后需要:

1
$ docker commit [container-id] [image-name:image-tag]

注意修改版本应当随时同步到远程。
运行失败的 container 及时进行删除
可以使用 busybox 来设置一个最基础的文件环境

建立方法:

1
$ docker run --name [volume-container-name] -v /path/you/want/create busybox:latest true

然后在别的 container 中可以使用这个最基本的文件系统, 多个使用此文件环境的 container 之间的修改是同步的。

使用过程:

1
$ docker run --volumes-from [volume-container-name] -i -t [image-name:image-tag] /bin/bash

此时指定挂载的 container 的目录就会出现在当前 container 相对应的位置, 你可以在这里进行任何操作。

但是我们所做的操作并不会更新到我们用 busybox 建立的 container 中,而且这份文件环境中的数据的生命周期 不是 在 这个 busybox containerdocker rm 掉后就结束的,他是在所有对他有引用的 container 都被 docker rm 后才会消失的。

我们要通过以下办法进行数据的备份和还原。 备份的时候使用精简无 entryimage 来进行压缩。

这里使用 busybox

1
$ docker run --volumes-from [volume-container-name] -v /host/path/to/put/backup/file:/backup busybox:latest tar cvf /backup/backup_file.tar /path/need/to/backup

这样就会把这份文件环境中的数据打一个 tar 的包备份到你指定的位置。

恢复时要先建立一个基础文件环境:

1
$ docker run --name [volume-container-name] -v /path/you/want/create busybox:latest true

然后同样使用没有 entryimages 建立 container 解压,这里同样使用 busybox

1
$ docker run --volumes-from [volume-container-name] -v /host/path/to/backup/file:/backup busybox:latest tar xvf /backup/backup_file.tar

这样文件环境的内容就回来了,你可以在其他 container 中进行 volumes-from 来使用了。