Docker 容器数据卷用 V 命令添加|学习笔记

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 快速学习 Docke r容器数据卷用 V 命令添加

开发者学堂课程【Docker 快速入门Docker 容器数据卷用 V 命令添加】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/850/detail/14042


Docker 容器数据卷用 V 命令添加


内容介绍

一、容器内添加的方法


上一节讲到容器数据卷的理念。容器停止或者关闭以后,对于部分数据的持久化工作如果想把它保存下来,就把它保存在容器圈里,就相当于外置的活动硬盘。

它的功能主要是做容器数据的持久化加容器间数据的共享、甚至宿主机和容器之间的数据共享。接下来怎么添加相关的容器卷呢?


一、容器内添加的方法

有两种方法:

1、直接命令添加 

--命令 docker run-it-v/宿主机绝对路径目录:/容器内目录 镜像名

//先退:docker run-it 镜像名。如果上一讲布置的作业大家动手去练,你的本机应该通过某个镜像 run-it 有个交互性的终端开启,能够连上各自的容器在这个命令的基础上docker run-it-v,v 是 value,是宿主机绝对路径目录:/容器内目录

宿主机是我们的虚拟机上的这个 centos6.8这是根目录:

image.png

在终端中打开,起名为 host:

image.png

[root@atguigu/]#ls

root@atguigu /]# myDataVolume

当前宿主机下面建一个 myDataVolume,是宿主机的目录,这个目录留着。现在的根目录下面没有 myDataVolume 这个文件夹如果一会有就是 docker 建的

容器内目录指的是什么?

image.png

下面用最简单的方式来演示:

image.png

[root@atguigu桌面] #docker images

image.png

[root@atguigu 桌面]#

[root@atguigu桌面]#docker run-it centos/bin/bash

[root@f6a41a6b3758/]#pwd

/

[root@f6a41a6b375/]#

image.png

现在是在容器里的 centos。

[root@f6a41a6b3758/]#ll

image.png

请看它下面没有一个叫 dataVolumeContainer 的文件夹假设以最原始的命令去登录 centos 镜像,默认的根目录镜像里面,docker 登录由镜像生成的 centos 容器,它的根目录下面当前没有准备写的这个文件夹 dataVolumeContainer。

下面把它退出:

[root@f6a41a6b3758/]#exit

exit

在container:

Iroot@atguigu 桌面]# docker ps

root@atguigu 桌面]#

docker ps 是当前正在运行的容器实验,是空的。

这个时候请看,在主机执行这个镜像:

[root@atguigu/] #docker run-it-v/myDataVolume:/dataVolumeContainer centos

centos6.8 这个根目录下面要新建一个 myDataVolume,然后跟 docker centos容器里的根目录下面dataVolumeContainer这个文件夹达成连接,相当于一个活动硬盘插到笔记本上开始容器之间容器和主机之间数据的共享

注意:根目录下没有 myDataVolume

[root@atguigu/] #docker run-it-v/myDataVolume:/dataVolumeContainer centos

[root@f89b5db98ede/]#

以 centos 为镜像,生成了一个尾号是 8ede 的容器在 docker 上跑着。

此时这直接刷新一下,执行命令后,名字互换:

image.png

[root@atguigu桌面] # cd

[root@atguigu/] # ll

drwxr-xr-x. 117 root  root12288 7月 12 21:56 etc

drwxr-xr-x.   2 root  root 4096 9月 23 2011 home

dr-xr-xr-x.   13 root  root 4096 2月 2 20:09 lib

dr-xr-xr-x.    9 root  root 12288 7月 6 03: 18 lib64

drwx------.   2 root  root 16384 1月 19 04:44 lost+found

drwxr-xr-x.   3 root  root 4096 7月 12 21:56 media

drwxr-xr-x.   2 root  root 0 7月 12 21:46 misc

drwxr-xr-x.   3 root  root 4096 1月 18 21:00 mnt

drwxr-xr-x.   2 root  root 4096 7月 12 22:51myDataVolume

drwxr-xr-x.   6 root  root 4096 3月 31 04:02 myzookeeper

drwxr-xr-x.   2 root  root 0 7月 12 21:46 net

drwxr-xr-x.   7 root  root 4096 7月 5 10:45 opt

dr-xr-xr-x.  294 root root 07月 12 21:45 proc

dr-xr-x---.  29 root root 40967月 12 21:56 root

dr-xr-xr-x.   2 root root 12288 7月 6 03: 18 sbin

drwxr-xr-x.  7 root root 0 7月 12 21:45 selinux

有了一个 myDataVolume

根目录里也有了:

image.png

因此说明-v 含有新建的功能。

主机:

[root@atguigu/]#ls-l/myDataVolume/

总用量0

[root@atguigu/]# ls-D/myDataVolume/

[root@atguigu/]# ls-d/myDataVolume/

myDataVolume

[root@atguigu/]#

有了 myDataVolume

Container 里:

{root@atquiqu /]#docker run-it-V/myDataVolume:/dataVolumeContainer centos root@f89b5db98ede/]# pwd

/

root@f89b5db98ede/]#ll

total 48

lrwxrwxrwx. 1 root root7 May 31 18:02 bin-> usr/bin

drwxr-xr-x. 2 root root 4096 Jul 1302:51dataVolumeContainer

drwxr-xr-x. 5 root root 380 Jul 1302:51 dev

drwxr-xr-x. 47 root root 4096 Jul 13 02:51etc

drwxr-xr-x. 2 root root 4096 Apr 1104:59home

Lrwxrwxrwx. 1 root root 7 May 31 18:02 lib -> usr/lib

lrwxrwxrwx. 1 root root9 May 31 18:02 lib64-> usr/lib64

drwxr-xr-x. 2 root root 4096 Apr 11 04:59 media

drwxr-xr-x. 2 root root 4096 Apr 11 04:59 mnt

drwxr-xr-x. 2 root root 4096 Apr 11 04: 59 opt

dr-xr-xr-x.294 root root Jul 1302:51 proc

dr-xr-x---. 2 root root 4096 May 31 18:03root

drwxr-xr-x. 10 root root 4096 May 31 18:03 run

lrwxrwxrwx. 1 root root 8 May 31 18:02 sbin ->usr/sbin

drwxr-xr-x. 2 root root 4096 Apr 11 04:59 srv

drwxr-xr-x 13 root root 0 Jul 13 01:45 sys

这里有 dataVolumeContainer。上面的是主机 myDataVolume这个是容器里面的根目录下面的 dataVolumeContainer

myDataVolume dataVolumeContainer 这两个相当于进行了数据的共享和对接,下面请看查看数据卷是否挂载成功。

2、查看数据卷是否挂载成功

//myDataVolumedataVolumeContainer 以前没有现在有了,因此挂载成功了。如果你还是不相信,那就再启用一个窗口来证明:

Docker inspect :以json串的模式来描述容器。

[root@atguigu桌面]# docker ps

[root@atguigu 桌面]# docker inspect f89b5db98ede

点击回车:

image.png

容器内的 dataVolumeContainer 数据容器跟 yDataVolume 宿主机的绑定。为什么呢? 

   image.png

主机配置 binds,是主机的 myDataVolume 跟容器里面的 dataVolumeContainer的绑定。从这个描述上可以清楚地看到

如果在 docker inspect 加入容器 ID 之后能看到这一小段说明绑定成功

"ProcessLabel”:"Volumes”: {

/dataVolumeContainer”:”/myDataVolume

},

"VolumesRW”:{

"/dataVolumeContainer": true

},

"AppArmorProfile”: "","ExecIDs”: null,"HostConfig”: {

"Binds”:[

/myDataVolume:/dataVolumeContainer],

Volumes RWRW 是读写的意思,说明可以对容器里面的 dataVolumeContainer文件夹读写操作均可

3、容器和宿主机之间数据共享

//先看主机:

[root@atguigu/]#cd/myDataVolume/

[root@atquigu myDataVolume]#

现在是在宿主机上的根目录的 myDataVolume 文件夹下面 

[root@atguigu myDataVolume]# pwd

/myDataVolume

[root@atguigu myDataVolume]# touch host.txt

root@atguigu myDataVolume]# ll

总用量0

-rw-r--r--.1 root root0 7月12 22:56 host.txt

[root@atguigu myDataVolume]#

当前在容器的路径下:

[root@f89b5db98ede/]# cd/dataVolumeContainer/

[root@f89b5db98ede dataVolumeContainer]# pwd

/dataVolumeContainer

[root@f89b5db98ededataVolumeContainer]#ll

total 0

-rw-r--r--. 1 root root 0 Jul 13 02: 56 host.txt [root@f89b5db98ede dataVolumeContainer]# vim host.txt

bash: vim: command not found

[root@f89b5db98ede dataVolumeContainer]#

抱歉,因为 centos 不支持 vim,是一个精简版的,它没有这个功能。把 vim 改成vi:

[root@f89b5db98ede dataVolumeContainer]# vi host.txt

[root@f89b5db98ede dataVolumeContainer]# touch container.txt

[root@f89b5db98ede dataVolumeContainer]#ll

total 4

-rw-r--r--. 1 root root 0 Jul 13 02:57 containertxt

-rw-r--r-. 1 root root 20 Jul 13 02:57 host.txt

[root@f89b5db98ededataVolumeContainer]#

container update 01

[root@atguigu myDataVolume]#

容器内第一修改了主机的文件,第二自己建了一个。那么主机实现了宿主机和容器之间的数据共享。 image.png

4、容器停止退出后,主机修改后数据是否同步

//[root@f89b5db98ede dataVolumeContainer]# exit

exit

[root@atguigu 桌面]# docker ps

[root@atquigu桌面]#

[root@atguigu myDataVolume]# touch host02.txt

[root@atguigu myDataVolume]# vim container.txt

[root@atguigu myDataVolume]# vim host.txt

Container update01

host update 01

保存退出

主机:

[root@atguigu myDataVolume]#ll

总用量4

-rw-r--r--. 1 root root07月1222: 57 container.txt

-rw-r--r--. 1root root07月1222:59 host02.txt

-rW-r--r-- 1root root 357月12 22:59 hosttxt root@atguigu myDataVolume]#

如果把 container 重新启动,重新进入会不会有新数据呢?

重新进去:

image.png

5、命令(带权限) dockerrun-it-v/宿主机绝对路径目录:/容器内目录:ro 镜像名

"Volumes”:{

/mydataVolume2”:"/mydataValume”},

"VolumesRW:{

/mydataVolume2”:false

docker·run·-it··-v·/myDataVolume:/dataVolumeContainer:ro….镜像名

[root@atguigu myDataVolume]# cd.

[root@atguigu/]#rm-rfmyDataVolume/ root@atguigu /]#

主机删了以后 container 也就变成了0, 但是文件夹并没有删掉

[root@f89b5db98ede/]#l1 total 48

lrwxrwxrwx. 1 root root 7 May 31 18:02 bin-> usr/bin

drwxr-xr-x. O root root 0 Jul 13 03:05 dataVolumeContainer

drwxr-xr-x. 5 root root 380 Jul 13 03:02 dev

drwxr-xr-x. 47 root root 4096 Jul 13 02: 51 etc

drwxr-xr-x. 2 root root 4096 Apr 11 04:59 home

lrwxrwxrwx. 1 root root 7 May 31 18:02 lib -> usr/lib

lrwxrwxrwx. 1 root root 9 May 31 18:02 2 lib64 -> usr/lib64

drwxr-xr-x. 2 root root 4096 Apr 11 04:59 media

drwxr-xr-x. 2 root root 4096 Apr 11 04:59 mnt

drwxr-xr-x. 2 root root 4096 Apr 11 04: 59 opt

dr-xr-xr-x 296 root root 0 Jul 13 03:02 proc

dr-xr-x---. 2 root root 4096 Jul 1302: 58 root

drwxr-xr-x. 10 root root 4096 May 31 18:03run

lrwxrwxrwx. 1 root root 8 May 31 18:02 sbin -> usr/sbin

drwxr-xr-x. 2 root root 4096 Apr 11 04:59 srv

drwxr-xr-x 13 root root 0 Jul 13 1: 45 sys

drwxrwxrwt. 7 root root 4096 May 31 18:03 tmp

drwxr-xr-x. 13 root root 4096 May 31 18:02 2usr

drwxr-xr-x.18 root root 4096 May 31 18:02 var[root@f89b5db98ede/]#

后面新建的会覆盖它如果大家怕出问题可以把 dataVolumeContainer 删掉

[root@atguigu/]#docker run-it -V

/myDataVolume:/dataVolumeContainer ro centos

[root@1c95e7d533f0/]# total 48

rwxrwxrwx. 1 root root7 May 31 18:02 bin -> usr/bin

drwxr-xr-x. 2 root root 4096 Jul 13 03:06 dataVolumeContainer

drwxr-xr-x. 5 root root 380 Jul 13 03:06 dev

drwxr-xr-x. 47 root root 4096 Jul 13 03:06 etc

drwxr-xr-x. 2 root root 4096 Apr 1104:59 9 home

lrwxrwxrwx. 1 root root 7 May 31 18:02 lib -> usr/lib

lrwxrwxrwx. 1 root root9 May 31 18:02 lib64->usr/lib64

drwxr-xr-x. 2 root root 4096 Apr 11 04:59 media

drwxr-xr-x. 2 root root 4096 Apr 11 04:59mnt

drwxr-xr-x. 2 root root 4096 Apr 11 04:59 opt

dr-xr-xr-x. 295 root root 0 Jul 13 03:06 proc

dr-xr-x---. 2 root root 4096 May 31 18:03 root

drwxr-xr-x. 10 root root 4096 May 31 18:03 run

lrwxrwxrwx. 1 root root 8 May 31 18:02 sbin -> usr/sbin

drwxr-xr-x. 2 root root 4096 Apr 1104:59 srv

drwxr-xr-x 13 root root 0 Jul 13 01:45 sys

host:

[root@atguigu myDataVolume]# ll

总用量0[root@atguigu myDataVolume]# touch host.txt [root@atguigu myDataVolume]# vim hosttxt

[root@atguigu myDataVolume# cat hosttxt host update

[root@atguigu myDataVolume]#

[root@1c95e7d533fodataVolumeContainer#pwd /dataVolumeContainer

[root@1c95e7d533f0dataVolumeContainer]#ll total 0

[root@1c95e7d533f0 dataVolumeContainer]#ll total 4

rw-r--r--. 1 root root 12 Jul 1303:08 hosttxtr[oot@1c95e7d533f0 dataVolumeContainer]# cat hosttxt host update

[root@1c95e7d533fo dataVolumeContainer]#touch container txt

touch: cannot touch’containertxt: Read-only file system[root@1c95e7d533f0 dataVolume Container]#

现在强制保存退出,不能够打开文件,对于写的过程当中,换而是写操作不支持啊,因为我Read-only以及容器内的数据只允许主机单向的写操作传给他,他只可以看容器止渴

},

VolumesRW”:{

"/dataVolumeContainer”:false},

"AppArmorProfile”:"”,"ExecIDs”: null,”HostConfig”:{

"Binds”:[

/myDataVolume:/dataVolumeContainerro

7

touch: cannot touchcontainertxt: Read-only file system [root@1c95e7d533f0 dataVolumeContainer]#vi hosttxt

[root@1c95e7d533f0dataVolumeContainer]#

相关实践学习
DataV Board用户界面概览
本实验带领用户熟悉DataV Board这款可视化产品的用户界面
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3 )前置知识要求   课程大纲 第一章 了解数据仓库概念 初步了解数据仓库是干什么的 第二章 按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章 数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章 采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章 用户行为数据仓库 严格按照企业的标准开发 第六章 搭建业务数仓理论基础和对表的分类同步 第七章 业务数仓的搭建  业务行为数仓效果图  
目录
打赏
0
0
0
0
214
分享
相关文章
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
287 93
面试官想听的不仅是命令——如何结构化回答“容器无Shell时如何测试外网”?
“说说看,如果一个Pod的容器没有Shell,如何测试它能否访问外网?”
面试官想听的不仅是命令——如何结构化回答“容器无Shell时如何测试外网”?
Docker+consul容器服务的更新与发现
通过本文的介绍,我们详细探讨了如何结合Docker和Consul来实现容器服务的更新与发现。通过Consul的服务注册和发现功能,可以高效地管理和监控容器化服务,确保系统的高可用性和可扩展性。希望本文能帮助您在实际项目中更好地应用Docker和Consul,提高系统的可靠性和管理效率。
65 23
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
344 15
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
218 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
108 8
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
78 17
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
135 12
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
324 11