Docker 数据卷&应用部署

什么是数据卷?

简单来说,数据卷就像是容器的一个外部挂载的U盘共享文件夹,容器可以往里面读写数据,这个U盘不随容器的删除而消失

数据卷本质上就是宿主机上的一个目录或者文件,目录与宿主机里的容器挂载后变成数据卷

为什么需要数据卷?

  • 容器中的数据是临时的;比如说我们创建了一个MySQL容器,这个容器一旦被删除,里面存储的数据表也会被删除

  • 容器之间数据不共享;每个容器有自己的独立文件系统,一个容器里写入的文件,另一个容器看不到

  • 容器与宿主机隔离;容器内部的文件系统是独立的,宿主机无法方便地访问容器内产生的文件(比如日志、配置文件)

数据卷目录和容器目录绑定过后,双方的修改可以立马同步:

  • **持久化:**数据卷独立于容器生命周期,删除容器后数据卷中仍然保留数据

  • 共享:多个容器可以挂载同一个数据卷(同样,一个容器可以挂载多个数据卷)

  • 可访问:宿主机可以直接访问数据卷的内容

数据卷配置

创建数据卷并挂载

复制代码
docker run -v 宿主机目录:容器内目录 ...

这里的宿主机目录就是数据卷

  • 目录必须是绝对路径

  • 如果目录不存在,则会自动创建

  • 可以挂载多个数据卷

具名数据卷

这种方式你不需要关心数据存在 Windows 硬盘的哪个精确的犄角旮旯,你只需要给这个数据卷起一个好记的名字,Docker 官方会把它集中存放在 WSL2 内部

复制代码
docker run -v 数据卷名:容器内目录 ...

一个容器挂载多个数据卷

复制代码
docker run -it --name=c2 \ 
-v ~/data2:/root/data2 \
-v ~/data3:/root/data3 \
centos:7

反斜杠"\"是Linux的续行符号,表示这个语句还没有结束。

查看本地所有的数据卷名字:

复制代码
docker volumn ls

两个(或多个)容器同时挂载同一个数据卷,实现数据共享

复制代码
#创建两个容器并共享数据卷
docker run -d --name=c1 -v common_share:/usr/share/nginx/html nginx
docker run -it --name=c2 -v common_share:/root/shared_data centos:7
#往c2里面塞一个文件
echo "Hello from c2" > /root/shared_data/index.html
exit
#在c1中查看文件
docker exec c1

容器c1和c2通过数据卷 实现了数据传输和共享,只需要保证数据卷目录(挂载路径)相同就行了。

数据卷容器

要实现多容器之间的数据传输,除了多个容器共同挂载到同一个数据卷,还可以通过数据卷容器实现

数据卷容器是什么?

数据卷容器是一个专门为了"提供一个或多个数据卷"而运行的容器,它本身不运行任何服务,只是作为一个其他容器挂载和共享数据的"中央存储点"

  • 其他容器与数据卷容器挂载后相当于与数据卷进行挂载

  • 即使数据卷容器出问题了,依然不影响其他容器的使用

  • 数据卷容器仅仅用来声明它挂载了哪些数据卷

配置数据卷容器

创建启动数据卷容器

复制代码
docker run -it --name=c3 -v /volume centos:7 /bin/bash

这里没有写本地路径 与**:** ,这种叫做匿名数据卷

Docker会在容器内部的根目录下建立一个叫 /volume 的文件夹,同时Docker 会在你的宿主机上生成一个随机名字的文件夹绑定数据卷。

复制代码
docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash

启动c1和c2,它们看到-from c3就会去找c3容器,c3容器挂载了一个/volumn文件,c1和c2也会在内部产生一模一样的/volumn文件

docker应用部署

应用部署步骤:

  1. 搜索镜像

  2. 拉取镜像

  3. 创建容器

  4. 进入容器并操作容器

部署redis

  1. 搜索镜像

    docker search redis

  2. 拉取镜像

    docker pull redis:5.0

  3. 创建容器设置端口映射

这里解释一下,外部机器是无法与宿主机里的容器进行交互的,也就是说容器暴露的端口外部无法访问,这个时候我们可以让外部与宿主机的某个端口建立连接,然后该主机端口与容器端口再建立连接形成端口映射。

复制代码
docker run -id --name=c_redis -p 6739:6739 redis 5.0
  1. 使用外部机器连接redis

    redis-cli.exe -h 192.168.149.135 -p 6379

相关推荐
工业HMI实战笔记30 分钟前
【拯救HMI】:低碳制造:自动化技术如何助力企业节能降耗
运维·前端·自动化·交互·制造
小宏运维有点菜34 分钟前
JumpServer
linux·运维
是个西兰花1 小时前
Linux:死锁与生产者消费者模型解析
linux·运维·服务器·c++·死锁·生产者消费者模型
RisunJan2 小时前
Linux命令-rsync(远程/本地文件同步 —— 增量传输的备份与镜像神器)
linux·运维·服务器
nuo5342022 小时前
基础 6 —— Docker 容器数据卷
docker·容器
Sinclair2 小时前
安企CMS的安装-常见安装问题排查
运维·后端
Sinclair2 小时前
安企CMS的安装-安装引导与初始化
运维·后端
Sinclair2 小时前
安企CMS的安装-源码编译安装
运维·后端·go
Sinclair2 小时前
安企CMS的安装-同一服务器多站点部署
运维·后端
Sinclair2 小时前
安企CMS的安装-Docker 部署
运维·docker·容器