Docker 宿主机和容器之间文件拷贝 docker copy
Docker 数据管理
在生产环境中使用 Docker , 往往需要对数据进行持久化, 或者需要在多个容器之间进行
数据共享, 这必然涉及容器的数据管理操作
容器中的管理数据主要有两种方式:
数据卷 Data Volumes 容器内数据直接映射到本地主机环境;
数据卷容器 (Data Volume Containers 使用特定容器维护数据卷
当然还有最原始的 copy 方式, 这个也是管理数据的方式, 但是基本不会用到;
最原始的 copy 方式管理数据:
宿主机文件 copy to 容器内
docker cp 需要拷贝的文件或者目录 容器名称: 容器目录
实例:
docker cp 2374e28fa313:/lingerqi/aaa.txt /lingerqi
容器内 copy to 宿主机
docker cp 容器名称: 容器目录 宿主机目录
数据卷
数据卷 (Data Volumes)
数据卷是一个可供一个或多个容器使用的特殊目录, 它将主机操作系统目录直接映射进容器,
它可以提供很多有用的特性:
1. 数据卷 可以在容器之间共享和重用
2. 对数据卷的修改会立马生效
3. 对数据卷的更新, 不会影响镜像
4. 数据卷 默认会一直存在, 即使容器被删除
数据卷相关操作
1. 创建数据卷
docker volume create my-vol
此时, 数据卷默认会放到 / var/lib/docker/volumes 路径下, 会发现所新建的数据卷位置, 查看命令如下:
- ## 参数可以为数字 "1", 字母 L: 大小写均可, 但效果不一样
- ls -1 /var/lib/docker/volumes
2. 查看所有的数据卷
docker volume ls (ll)
3. 查看指定数据卷的详细信息 (显示一个 JSON 格式的数据)
docker volume inspect my-vol
4. 删除一个 volume
docker volume rm my-vol
注 1: 数据卷 是被设计用来持久化数据的, 它的生命周期独立于容器, Docker 不会在容器被删除后自动删除数据卷,
并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷, 无主的数据卷可能会占据很多空间,
所以要及时删除
挂载数据卷, 最好是通过 run 而非 create/start 创建启动容器
create/start 命令创建启动容器后, 再挂载数据卷相当麻烦, 要修改很多配置文件, 但并非不可以
5. 启动一个挂载数据卷的容器
- ## demo1
- docker run -d \
- -it \
- --name tomcat01 \
- --mount source=my-vol,target=/webapp \
- CentOS:7
注意: 此行命令执行后的效果是, 宿主机路径 / var/lib/docker/volumes/my-vol/_data 与 tomcat01 容器路径 / webapp 完成映射
数据卷容器
数据卷容器
如果用户需要在多个容器之间共享一些持续更新的数据, 最简单的方式是使用数据卷容器.
数据卷容器也是一个容器, 但是它的目的是专门提供数据卷给其他容器挂载
数据卷容器相关操作
1. 新建数据卷容器
docker run -di --name db_data -v /db_data CentOS:7
注:-v 后面接的共享数据真实存放路径
2. 用容器 db1,db2 测试数据卷容器是否可用
- docker run -di --name db1 --volumes-from db_data CentOS:7
- docker exec -it db1 bash
- cd db_data
- docker run -di --name db2 --volumes-from db_data CentOS:7
- docker exec -it db2 bash
- cd db_data
随便创建一个 aaa.txt 文件就可以查看效果了
效果: 上面例子中 db1,db2 通过 db_data 来共享了数据
- ## demo2
- docker run -d \
- -it \
- --name mycentos002 \
- --mount type=bind,source=/wwww/data,target=/root/webapp02 \
- CentOS:7
注 1:Linux 命令结尾加斜杠有什么用
加了 "\" 意为将最后的回车换行给注释了, 系统理解为命令还没有结束, 因而是继续等待用户进行输入, 直到读到结束符, 如回车
注 2:source=my-vol,target=/webapp
my-vol 为要挂载的数据卷, 如果数据卷不存在, docker 会自动创建
/webapp 为容器上目录, 如果目录不存在, Docke 会自动创建
注 3:mount 选项高级用法
--mount 选项的 type 参数支持三种类型的数据卷
--mount 标志: 由多个名值对组成, 逗号分隔, 每个键值由 < key> = <value > 元组组成
1.type=volume 普通数据卷 (默认即这种类型), 映射到主机 / var/lib/docker/volumes 路径下;
--mount type=volume,source=my-vol,target=/webapp
注: 这是 type 的默认值
2.bind: 绑定数据卷, 映射到主机指定路径下;
--mount type=bind,source=/webapp,destination=/webapp2
3.tmpfs : 临时数据卷, 只存在于内存中
- docker run -d \
- -it \
- --name tmptest \
- --mount type=tmpfs,destination=/App \
- nginx:latest
来源: http://www.bubuko.com/infodetail-3333264.html