Docker容器数据管理实验(数据卷)

创建镜像

docker  run  -tid --name 容器名  -p  宿主机端口:容器端口   镜像  命令 (和-v一致,也可多个-p)

(宿主机端口在前,访问宿主机的某个端口【服务】,通过iptables规则,映射到容器内的端口)

-p:是映射端口的(将容器内的服务端口映射到宿主机上,因为外部访问的时候是访问的宿主机的ip地址;容器是基于宿主机内核创建的一个进程)

容器内服务之间的一个相互通信协作是通过docker0这个虚拟网桥(类交换机)进行实现的

参数分析

 -t 创建容器的时候,-t是创建了一伪终端~ (非常重要)

-i是标准输入(非常重要)

-v是容器内/var/lib/registry和宿主机的myregistry进行映射的

(映射可以映射多个;多个-v,同时从宿主机映射的文件在容器内也可也看到)

-d:后台运行

在run运行容器的时候,后面的/bin/bash命令解释器需要作为容器标准输入解释命令,进而执行的!

删除容器的时候docker rm 短id/容器名称(可同时删除多个;空格隔开)

进入容器是attach;exit退出时候,容器也相对应的结束(要进入容器前需要启动容器)

Docker start 短ID/名字(查看短id可以通过docker ps -a)进行查看

不进入容器只是执行命令的:exec(联想find 的执行命令-exec)

容器数据管理(实验)

 将docker宿主机上的目录或者文件映射给容器,相当于linux系统中的挂载操作

1) 创建容器时,指定容器使用目录作为数据卷

docker  run  -tid  --name  c1  -v  /root/CS:/root/test  centos  /bin/bash

查看 c1容器/root下test文件存在 

docker exec c1 ls /root

宿主机touch一个f1文件(touch CS/f1)

查看 f1 文件存在 

docker exec c1 ls /root/test

也就相当于在容器内挂载了一个宿主机的目录,在宿主机对应下目录的操作(可以放入程序或者文件,容器内也可以使用)

2) 创建容器时,指定容器使用文件作为数据卷

docker run -tid --name 容器名 -v 宿主机文件:容器内部文件 镜像名 命令

首先 宿主机创建一个文件

echo  aaaaaaaaa > /root/file1

然后创建容器,并挂载文件

docker run -tid  --name c2  -v   /root/file1:/root/file2  centos /bin/bash

备注:宿主机上的文件需要事先存在

查看容器里面file2文件存在

docker exec  c2  ls  /root

查看容器c2 文件追加的内容

docker   exec  c2   cat  /root/file2

宿主机再追加bbbbbbbbbbb内容

echo  bbbbbbbbbbb >> file1

在次查看追加内容

docker exec  c2  cat  /root/file2

数据卷


数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多可用的特征

数据卷可以在容器之间共享和重用。
对数据卷的修改会立马生效。
对数据卷的更新,不会影响镜像。
卷会一直存在,直到没有容器使用。


对数据卷的使用,类似于 Linux 下对目录或文件进行 mount 操作

数据卷容器(实验)

构建一个容器,然后后续的容器是基于这个创建的容器进行继续创建的,再来创建c2和c3的时候,不让他找宿主机做映射了,直接让他找容器c1。

将一个容器专门用作其他容器的数据卷使用

创建其他容器使用的数据卷容器

docker  run -tid  --name  容器名  -v  宿主机目录:容器内部目录  镜像名  命令

创建容器并指定使用的数据卷容器

docker  run  -tid  --name  容器名  --volumes-from  数据卷容器名   镜像名  命

例子如下

docker run -tid --name c1 -v /root/CS:root/test centos /bin/bash

docker run -tid --name c2 --volumes-from c1 centos /bin/bash

docker run -tid --name c3 --volumes-from c1 centos /bin/bash

创建数据卷容器 c1

docker run -tid --name c1 -v /root/CS:/root/test centos /bin/bash

(/root/test宿主机里没有的话,它会自己创建。)

查看已经创建的容器 (docker ps -a)

ls 查看当前目录下的宿主机里有CS测试 (ls)

查看 c1容器 /root目录下多了一个test (docker exec c1 ls /root)

接下来我们再来创建c2和c3的时候,不让他找宿主机做映射了,直接让他找容器c1

docker run -tid --name c2 --volumes-from c1 centos /bin/bash

再看一下docker exec c2下的root 下是否有test (docker exec c2 ls /root)

再创建c3容器

docker run -tid --name c3 --volumes-from c1 centos /bin/bash

查看c3 (docker exec c3 ls /root)

在宿主机下touch一个文件 (touch CS/1.txt)

查看容器c1 c2 c3

docker exec c1 ls /root/test

docker exec c2 ls /root/test

docker exec c3 ls /root/test

以上都有1.txt文件

猜你喜欢

转载自blog.csdn.net/m0_72264240/article/details/130426802