Docker基础之九: 管理容器的数据
管理容器的数据
(对Docker感兴趣的朋友可以加我的微信ghostcloud2016,然后我把你加到我们的一个Docker爱好者群组里面。)
到目前为止,我们已经介绍了Docker的一些基本概念,如:容器的操作,镜像的操作和网络的操作等。在本节,我们将介绍如何管理容器内部的数据,以及容器间的数据交互。我们将介绍如何创建:
- 数据卷
- 数据型容器
1 数据卷
数据卷是一个经过特殊设计的文件夹,提供给容器使用。数据卷并不由UnionFS管理,因此数据卷可以用作持久化和数据分享,它具有以下特性:
- 数据卷在容器创建的时候进行初始化。如果容器的镜像在特定的Mount点下有数据,那么已有的数据将被拷贝到指定目录。
- 数据卷可以在容器间共享和复用
- 对数据卷的改变是直接操作,不会回滚。
- 当你更新镜像时,数据卷的改变不会被保存。
- 即使容器被删除了,数据卷也不会丢失。
因此,数据卷是用来持久化数据的,跟容器本身的生命周期是无关的。Docker删除容器的时候,不会自动删除数据卷,因此当你使用数据卷的时候也要注意不要产生过多的垃圾数据。
2 添加数据卷
数据卷是通过-v来指定的,在docker create和docker run的时候可以使用多个-v参数,指定多个数据卷。
$ docker run -d -P --name web -v /webapp training/webapp python app.py
这条命令在创建容器时,会创建一个/webapp目录。 注意:我们也可以通过VOLUME指令在Dockerfile中指定需要Mount的数据卷。 默认情况下,数据卷是可读可写的,但是你也可以设置为只读:
$ docker run -d -P --name web -v /opt/webapp:ro training/webapp python app.py
3 定位卷的位置
$ docker inspect web
...
Mounts": [{"Name": "fac362...80535","Source": "/var/lib/docker/volumes/fac362...80535/_data","Destination": "/webapp","Driver": "local","Mode": "","RW": true}
]
...
其中source是文件系统在主机上的地址(注意这个地址是随机分配的,因此一定要注意垃圾回收),Destination是容器中的地址。
4 Mount本地文件夹作为数据卷
通过-v我们可以给容器添加一个随机的数据卷,但是这种卷是不好控制的,因此我们可以Mount一个本地文件夹作为数据卷。
$ docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
上面这条命令,我们将本地的/src/webapp映射到了容器的/opt/webapp目录。由于将主机的文件系统映射到了容器中,因此容器有了主机的完全访问权限,因此一定要注意安全。
5 Mount本地文件到容器中
-v参数除了可以Mount文件夹,还可以做文件的映射。比如:
$ docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash
这条命令,将把主机的~/.bash_histroy映射到容器中,因此主机和容器可以共享Bash命令的历史数据。如果将~/.bash_profile映射进去,那就可以共享Bash的配置。
6 数据型容器
如果你希望在容器间共享卷,那么就可以使用数据型容器。我们可以先创建一个命名容器:
$ docker create -v /dbdata --name dbdata ubuntu
接下来,我们通过--volumes-from选项来进行数据卷的复用:
$ docker run -it --volumes-from dbdata --name db1 ubuntu
然后再建一个容器:
$ docker run -it --volumes-from dbdata --name db2 ubuntu
之后我们就可以在db1和db2中同时对/dbdata进行操作了。
7 数据备份、还原和迁移
我们可以通过下面的命令进行数据备份:
$ docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
- --volumes-from将把dbdata容器的数据卷Mount到当前容器;
- -v 将当前目录映射到/backup目录
- tar命令将/dbdata打包
接下来,我们可以对容器进行数据恢复:
$ docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
$ docker run --volumes-from dbstore2 -v $(pwd):/backup ubuntu bash -c "cd /dbdata && tar xvf /backup/backup.tar"
通过上面的操作,我们就可以自动备份、还原和迁移数据了。
8 注意事项
由于数据卷的共享,会出现多个容器同时写一个卷的情况,因此可能会导致数据丢失,这里面一定要特别注意。可以采取一定的同步机制来保证数据的一致性。
Docker基础之九: 管理容器的数据相关推荐
- docker 容器运行 golang程序_「Docker」 - 运行 amp; 管理容器
容器是基于容器技术所建立和运行的轻量级应用运行环境,它是Docker封装和管理应用程序或微服务的「集装箱」,在Docker中,容器是最核心的部分. 一.容器的创建和启动 Docker容器的生命周期里分 ...
- docker系列--1.docker基础--1.4.启动时挂载数据卷-v
Docker 数据卷 启动时挂载 将主机路径与容器路径绑定(双向),数据双向同步 1.docker run -it -v 宿主机路径:容器内路径:权限 镜像名 docker run -it -v -v ...
- 天池比赛——Docker基础镜像搭建,容器导出镜像
天池Docker 文章目录 天池Docker 一. 通过基础的Dockerfile,只有python的镜像 二. 然后build构建镜像,再运行镜像进容器 三. 进入容器,安装环境 四. 退出容器, ...
- Docker基础15--3.2.11容器的其它操作
3.2.11容器的其它操作 3.2.11.1在主机和容器之间复制文件 docker container cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH docker ...
- Docker基础讲解狂神笔记:容器数据卷,docker compose,docker swarm(2/2)未修订版欢迎留言补漏
L06 容器数据卷 相对于01-05难度加大 什么是容器数据卷 Docker理念:将应用和环境打包成一个镜像! 程序要保存数据,数据并不能放在容器里面,因为一旦数据放在容器,误操作删除掉容器,数据也随 ...
- 浅谈Docker:DockerLinux安装,镜像管理命令,镜像制作命令,容器管理命令,数据卷,DockerFile,Docker-compose
什么是Docker? Docker 概念 • Docker 是一个开源的应用容器引擎 • 诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后改名为Docker Inc) • ...
- Docker——使用docker工具管理软件/组件的运行,镜像、容器、数据卷的基本概念,常用指令,使用docker搭建Java微服务运行环境
Docker--使用docker工具管理软件/组件的运行,镜像.容器.数据卷的基本概念,常用指令,使用docker搭建Java微服务运行环境 一.docker的安装和卸载 1.卸载 2.安装 3. 导 ...
- docker管理应用程序数据、容器网络
管理应用程序数据 Docker提供三种方式将数据从宿主机挂载到容器中: • volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes).保存数据的最佳方式 ...
- Docker 基础知识 - 使用绑定挂载(bind mounts)管理应用程序数据
绑定挂载(bind mounts)在 Docker 的早期就已经出现了.与卷相比,绑定挂载的功能有限.当您使用绑定挂载时,主机上的文件或目录将挂载到容器中.文件或目录由其在主机上的完整或相对路径引用. ...
最新文章
- 使用objdump objcopy查看与修改符号表
- poj2528贴海报(线段树离散化)
- 每天拖地好麻烦?用这几招,地板每天光亮如新!
- Android 音视频开发入门指南
- 服务器机房有哪些重要系统
- 利用Swift语言特性,随手写个伪随机数生成器
- 2007年分区联赛提高组之一 统计数字
- 设计模式之_动态代理_02
- 计算机技能鉴定操作试题,计算机操作员中级操作技能考核试卷职业技能鉴定国家题库...
- ApacheCN 安卓译文集(二)20211226 更新
- 别再瞎学 Python 了!
- Windows Server 2016-Wbadmin命令行备份域控制器
- Softmax分类函数
- freeswitch 录音录像模块和内核
- Python菜鸟教程
- 关闭OneNote从浏览器复制粘贴时包含链接的方法
- kafak集群python外网无法访问:kafka.errors.NoBrokersAvailable: NoBrokersAvailable
- 未经授权,直接划扣资金!这些支付机构的用户要小心
- 使用Session+Cookie实现7天免登录
- 华为---ACL配置