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

相关推荐
团象科技1 小时前
指标口径如何校准?多币种云充值重塑2026出海云运维收益
运维
jran-1 小时前
Docker dockerfile镜像制作&compose服务编排&私有仓库
java·docker·容器
云达闲人2 小时前
搭建DevOps企业级仿真实验环境:012容器运行时 containerd 详解
运维·kubernetes·containerd·devops·proxmox ve·容器运行时·容器部署
CCPC不拿奖不改名2 小时前
PostgreSQL数据库部署linux服务器流程
linux·服务器·数据库·windows·python·docker·postgresql
MXsoft6182 小时前
**运维标准化建设:让杂乱无章的工作变成可复制****流程**
运维
cgsthtm2 小时前
openEuler release 24.03 (LTS-SP2) 安装 docker
docker·systemctl·dnf·openeuler 24.03
云游牧者2 小时前
K8S安全框架深度解析-从认证到RBAC实战完全指南
安全·容器·kubernetes·rbac·kubeconfig·rolebinding
maosheng11462 小时前
第二次作业(RHCE(https+http))
运维
古城小栈2 小时前
K8s 核心知识 讲解
docker·容器·kubernetes