51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

保存 Docker 容器的更改

当对 Docker 容器执行 stop 时,我们在容器内所做的一些更改就会丢失。我们可以使用以下几种来保存对容器的一些更改:

  1. 使用 docker cp 命令,该命令比较适合将个别的一些更改的文件的手动备份到宿主机;
  2. 使用 docker export 命令,手动将整个容器导出到 tar 文件,包括安装的软件、数据文件等;
  3. 使用 docker commit 命令,手动将对容器的修改封装成一层文件系统,并导出为一个 image 文件,当然该镜像文件也会包含容器中所有数据;
  4. 使用 docker run 的 -v 参数设置宿主机目录和容器目录的映射,实现自动将容器数据备份到宿主机指定目录。

接下来,演示下这些命令的使用。

  1. docker cp 命令 {#title-0} ==========================
# 执行命令
docker images

# 输出结果
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
ubuntu       18.04     5a214d77f5d7   6 months ago   63.1MB
# 执行命令
docker run -it 5a214d77f5d7 /bin/bash

# 在容器中执行命令1
echo 'hello world' > demo.txt

# 在容器中执行命令2
ls
# 输出结果
bin  boot  demo.txt  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

注意:我们在根目录创建了 demo.txt 文件,接下来在不 stop 容器的情况下,使用 docker cp 命令将该文件备份到宿主机的指定目录下:

# 执行命令,获得正在运行容器ID
docker ps
# 输出结果
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS         PORTS     NAMES
c94fbd298cd7   5a214d77f5d7   "/bin/bash"   3 minutes ago   Up 3 minutes             magical_babbage

# 执行 docker cp 命令拷贝文件
# docker cp 容器ID:文件绝对路径 宿主机绝对路径
docker cp c94fbd298cd7:/demo.txt /root

当然,使用 docker cp 命令也可以将宿主机的文件拷贝到容器中,例如:

docker cp /root/test.txt c94fbd298cd7:/root
  1. docker export 命令 {#title-1} ==============================
docker export -o container.tar c94fbd298cd7

该命令是将指定 ID 的容器,导出到 tar 文件中,o 参数指定导出的 tar 包名。如何将其恢复成容器实例,使用下面的命令:

# 1. 将 tar 文件恢复成镜像文件
docker import container.tar container:1.0

# 2. 通过镜像运行容器实例
docker run -it 28dd35b0de5c /bin/bash
  1. docker commit 命令 {#title-2} ==============================

docker commit 命令可以将将对容器的改动提交为一层文件系统,叠加到原来镜像之上,从另一个角度也实现了对原来容器数据的保存。

docker commit -a "作者" -m "描述内容" 容器编号  镜像名:TAG 
  1. docker run 目录映射 {#title-3} =============================
# docker run -it -v 宿主机路径:容器路径 容器ID /bin/bash
docker run -it -v /root/bak:/root:rw 28dd35b0de5c /bin/bash

v 参数指定宿主机的绝对路径和容器的绝对路径,当容器内指定路径内的文件发生变化时,会自动将该文件同步到宿主机指定的路径。同理,当宿主机指定路径内文件发生变化,也会被同步到容器内。

rw 指定了容器内数据的读写权限,ro 表示只读。

docker run -it --volumes-from 容器 镜像名 

上面的命令表示,当我们创建新的容器实例,它也可以直接继承其他容器的 v 设置。这样就可以实现,宿主机、多个容器之间的数据同步、共享。

如果我们有多个目录需要同步,可以添加多个 v 选项。

赞(3)
未经允许不得转载:工具盒子 » 保存 Docker 容器的更改