docker -用-v方式创建容器数据卷

一、什么是容器数据卷

1、先回顾一下什么是镜像:是应用和应用所需要环境的一个包

2、数据:如果数据放在容器中,只要容器删除,那数据也就完蛋了,比如说费劲巴拉整了10000条测试用例放到容器里,结果别人手一抖,删除了,我估计你掐死对方的心都有

因此我们需要产生一个数据共享技术,即Docker容器中产生的数据,同步到本地,相当于做一个备份。

docker -用-v方式创建容器数据卷_第1张图片

比如说,我在docker服务器中创建了三个容器,其中一个是mysql,我把我的数据写在了容器中的“opt/mysql”下,那我在我的本机的linux中也创建 一个/home/mysql,然后利用上面说的容器数据卷,将“opt/mysql”的数据内容,同步到/home/mysql中

卷技术,就是一种目录挂载,将我们容器内的目录,挂载到本地(突然想到网红词儿内卷是不是就这意思,镜像文件夹里有啥,你本地也得同步出个啥)

1、为了容器的同步操作

2、如果多个容器都挂载到本机的同一个目录,就可以实现数据共享

3、重点的是容器卷是双向的,容器的修改的内容可以同步到本机,本机修改的内容也可以同步到容器

这样其实就解决了一个问题

比如说我们在写python代码,我每次还要进容器,再去操作,有了这层双向同步,我就可以直接在我本机的linux文件里改,改完了以后,就会自动同步到容器里

二、使用数据卷

挂载方式:直接使用命令挂载 -v

docker run it -v   主机目录:容器内目录 (是不是很像上个文章的-p 端口映射) 

实践 一下

1、 我们来运行一个centos的镜像,生成一个容器,然后在容器中的/home映射到本机的/opt/monkey
[root@localhost opt]# docker run -it -v /opt/monkey:/home centos /bin/bash
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
a1d0c7532777: Pull complete 
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest 

2、我们退出容器,查看centos的容器信息

[root@3fdde6e6ae2c home]# exit
exit
[root@localhost opt]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED              STATUS                        PORTS     NAMES
3fdde6e6ae2c   centos    "/bin/bash"   About a minute ago   Exited (127) 13 seconds ago             kind_tharp
[root@localhost opt]# docker inspect 3fdd

docker -用-v方式创建容器数据卷_第2张图片

 3、现在我们进入容器,在home文件夹中创建一个文件abc.txt
[root@localhost opt]# docker start 3fdd
3fdd
[root@localhost opt]# docker exec -it 3fdd /bin/bash
[root@3fdde6e6ae2c /]# cd /home/
[root@3fdde6e6ae2c home]# ls 
[root@3fdde6e6ae2c home]# touch abc.txt

4、现在我们看一下本地linux /opt/monkey里也会有一个

 5、那我在本地里创建一个文件,同样也会同步到容器中

docker -用-v方式创建容器数据卷_第3张图片

三 、配置mysql

1、下载mysql,并同时创建容器,运行容器

docker run -d -p 8888:3306 -v /opt/mysql02/conf:/etc/mysql/conf.d -v /home/mysql02/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=114207 --name mysql02 mysql:5.7.37

-d:后台启动运行mysql容器

-p 8888:3306 :指定容器和外网的ip映射

-v /opt/mysql02/conf:/etc/mysql/conf.d :将mysql容器中的/etc/mysql/conf.d,映射到本地linux的/opt/mysql02/conf

-v /home/mysql02/data:/var/lib/mysql: 将mysql容器中的数据库,映射到本地

-e MYSQL_ROOT_PASSWORD=114207 :设置mysql初始密码是114207

--name mysql02:容器启名叫mysql02

mysql:5.7.37:我要的版本是mysql :5.7.37版本(ps试了最新版,连接navicat总报错,试了5.7版,docker一启动mysql就闪退,就5.7.37版本没毛病)

2、测试一下

我用navicat远程连接一下mysql并创建一个数据库demo

docker -用-v方式创建容器数据卷_第4张图片

linux本机的data路径也同步出现了数据库demo

docker -用-v方式创建容器数据卷_第5张图片

四、理解匿名挂载和具名挂载

挂载的几种方式

1、 -v 容器内路径   匿名挂载

2、-v  卷名:容器内路径  具名挂载   (常用)

3、-v  容器外路径: 容器内路径    路径挂载(常用)
 

1、先说匿名挂载

1、先运行一个centos容器

 这个地方我只指定了一个内部容器地址,没指定外部,也没指定挂截名子,这时候docker就会给你生成一个随机的名子,为卷名

2、我们现在查一下卷的信息,发现不知道哪个,卷名是随机生成的一个字符串

docker -用-v方式创建容器数据卷_第6张图片

2、具名挂载

这个地方我启动时,指定了一个卷名(我没有加 “/" 证明他是一个名子,不是路径)

现在我们查看一下挂载信息

docker -用-v方式创建容器数据卷_第7张图片

 那他被挂载到了什么地方呢

docker -用-v方式创建容器数据卷_第8张图片

 现在我们来测试一下
进到容器内,在opt下新建一个demo.txt

 我们进到他挂载的目录/var/lib/docker/volumes/centos_demo/_data

docker -用-v方式创建容器数据卷_第9张图片

五、容器权限的区分

docker run -P -v centos_demo:/opt/:ro  -it  --name centos03 centos /bin/bash

docker run -P -v centos_demo:/opt/:rw  -it  --name centos03 centos /bin/bash

ro:只读:这个是对容器的权限的制定,一旦设定了只读,那这个内部的容器只能通过外部映射的容器来操作,在本容器内部是无法操作的

rw:读写:容器的默认权限,就是这个容器可以读和写

你可能感兴趣的:(docker,docker,容器,运维)