小言_互联网的博客

Docker——数据卷命令

407人阅读  评论(0)

目录

一、数据卷

1.1  便于修改

1.2  数据共享

1.3 安全问题

1.4 数据卷的基本语法

二、 创建数据卷,并查看数据卷在宿主机的目录位置

 2.1 创建数据卷

 2.2 查看所有数据卷

 2.3 查看数据卷详细信息卷

 2.4  删除数据卷

三、挂载数据卷

3.1 创建容器并挂载数据卷到容器内的HTML目录

3.2 进入html数据卷所在位置,并修改HTML内容

3.3 数据卷不创建时是否会挂载成功?

四、创建并运行一个MYSQL容器,将宿主机目录直接挂载到容器

4.1 添加mysql镜像

4.2 添加目录及文件

4.3 创建MySQL容器

 4.4 与数据卷挂载方式的对比


一、数据卷

  容器与数据耦合的问题

   数据卷:volume,是一个虚拟的目录,指向宿主机文件系统中的某个目录

   数据卷的作用:将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全

     数据卷操作:

   1.1  便于修改

       比如说,我们在宿主机文件系统中修改,一定会立即反应到数据卷(volumes)对应的容器内部,不用再进入容器内部修改

   

 1.2  数据共享

也方便了数据的共享第二个容器的config目录也来挂载config数据卷,也就是说两个容器可以挂载同一个卷,我们在宿主机文件系统中做的一切修改,这两个容器也能看到,这就是数据共享

1.3 安全问题

    还有一个就是安全问题,比如说我们不小心把容器给删掉了,但是数据卷还没有删,所有的数据都还在,我们可以创建一个容器,然后接着挂载到数据卷上去,就可以了

1.4 数据卷的基本语法

 

二、 创建数据卷,并查看数据卷在宿主机的目录位置

 2.1 创建数据卷

docker volume create 数据卷名称

 2.2 查看所有数据卷

docker volume ls

发现有我们刚刚创建的html

 2.3 查看数据卷详细信息卷

docker volume inspect 数据卷名

可以看出挂载点在:/var/lib/docker/volumes/html/_data

 2.4  删除数据卷

命令:删除所有的本地未使用的卷

docker volume prune

命令: 删除指定数据卷

docker volume rm  数据卷名

三、挂载数据卷

我们在创建容器时,可以通过-v参数来挂载一个数据卷到某个容器目录

案例:创建一个nginx容器,修改容器内html目录内的index.html内容

需求说明:

        上个案例中,我们进入nginx容器内部,已经知道nginx的html目录所在位置

/usr/share/nginx/html,我们需要把这个目录挂载到html这个数据卷上,方便操作其中的内容。

提示:运行容器时使用-v参数挂载数据卷

3.1 创建容器并挂载数据卷到容器内的HTML目录

查看一下是否有nginx,发现并没有,下面我们就可以安心的创建nginx容器

Docker——容器命令介绍、创建Nginx容器与Redis容器_我爱布朗熊的博客-CSDN博客

 不熟悉容器命令,可以看一下上面这篇文章

创建nginx容器

      docker run 创建容器

      --name mn  容器的名字是mn 

      -p:将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口(如果没有  这个,没有人能访问这个容器),宿主机的端口只要没有被占用就可写(我的80端口被占用了,我用的81),容器内往往取决于应用程序本身,一般Nginx是80

    -v 数据卷名称(html):容器内目录(/usr/share/nginx/html)

    -d  : 后台运行程序 

    nginx:镜像的名称,例如:some-content-nginx,没写tag就是最新

docker run --name mn -p 81:80 -v html:/usr/share/nginx/html -d nginx

如果不记得了/usr/share/nginx/html,去官网查

我们先查看一下数据卷的位置:/var/lib/docker/volumes/html/_data

进入到数据卷的位置我们电脑下面

 \\wsl$\docker-desktop-data\data\docker\volumes

  在下面这个路径下的html/_data

或者直接从我们的可视化界面查看 ,如果出现的话,就说明挂载成功了

 
 

3.2 进入html数据卷所在位置,并修改HTML内容

\\wsl$\docker-desktop-data\data\docker\volumes\html\_data

 之后我们修改一下代码,我是在这个文件下用vscode编译器打开修改的,记得保存!!!


  
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Welcome to nginx! </title>
  6. <style>
  7. html { color-scheme: light dark; }
  8. body { width: 35em; margin: 0 auto;
  9. font-family: Tahoma, Verdana, Arial, sans-serif; }
  10. </style>
  11. </head>
  12. <body>
  13. <h1>风里雨里,山东等你 </h1>
  14. <p>If you see this page, the nginx web server is successfully installed and
  15. working. Further configuration is required. </p>
  16. <p>For online documentation and support please refer to
  17. <a href="http://nginx.org/">nginx.org </a>. <br/>
  18. Commercial support is available at
  19. <a href="http://nginx.com/">nginx.com </a>. </p>
  20. <p> <em>Thank you for using nginx. </em> </p>
  21. </body>
  22. </html>

然后我们来页面看一下,因为我配置的是81,配置的什么端口号,这里就填什么端口号

  3.3 数据卷不创建时是否会挂载成功?

  在我们刚刚完成的案例中,我们的数据卷是创建好的,如果数据卷不存在,会不会成功?

先删除之前的容器和清楚数据卷

再次创建nginx容器(在此之前不创建html数据卷)

 创建容器并挂载数据卷到容器内的HTML目录

 

我们查看一下数据卷,发现是是存在的,说明自动把卷创建出来了

页面也恢复了之前的内容

四、创建并运行一个MYSQL容器,将宿主机目录直接挂载到容器

这个地方写的不好,我也没太理解

提示: 目录挂载与数据卷挂载的语法是类似的

  • -v[宿主机目录]:[容器内目录]
  • -v[宿主机文件]:[容器内文件]

4.1 添加mysql镜像

   如果对添加镜像陌生,可以查看下面这篇博客

Docker——镜像操作命令_我爱布朗熊的博客-CSDN博客

我们查看一下镜像,也确实存在

4.2 添加目录及文件

 创建两个目录

 在conf文件夹下添加下面的文件

 

4.3 创建MySQL容器

去dockerhub查阅资料,创建并运行mysql容器

  要求:挂载/tmp/mysql/data到mysql容器内数据存储目录

             挂载/tep/mysql/conf/hmy.cnf到mysql容器的配置文件

             设置MySQL密码

Docker Hub

docker run --name mysql -e MYSQL_ROOT_PASSWORD=12  -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d    -v /tmp/mysql/data:/var/lib/mysql     -p 3306:3306    -d mysql

 我们可以看到,已经创建出来了

 

然后我们在Navicat连接一下试试

 

 切记:当我们连接的时候,我们运行时创建的什么密码,下面的密码就填写什么,否则就会报错

 

 4.4 与数据卷挂载方式的对比

数据卷的方式相当于全交给了docker去管理,我们不用关系但是劣势是目录不是我们创建的,我们想要找就比较的麻烦

  目录挂载的优势就是我们可以很好的知道文件在哪

 

 


转载:https://blog.csdn.net/weixin_51351637/article/details/128024122
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场