Docker3️⃣数据卷 & 挂载

1、数据卷

Docker 容器存在问题:容器与数据耦合

  1. 不易修改:需要先进入容器才可修改文件,且没有 vi 等编辑工具。
  2. 不易维护:假设容器升级改版,旧容器的数据无法迁移到新容器。
  3. 不可复用:容器的数据仅当前容器可用。

1.1、volume

数据卷(volume)用于管理容器数据

  • 本质:虚拟目录,指向宿主机文件系统中的某个目录(类似软链接)。

    (数据卷 → 宿主机目录)

  • 使用:创建容器时将数据卷挂载到某个容器目录,间接建立容器目录宿主机目录的关系。

    (容器目录 → 数据卷 → 宿主机目录

    image-20220531155029955

1.2、命令(❗)

docker volume [COMMAND]
  • 创建:create

  • 查看

    • ls:列出所有
    • inspect:查看详情
  • 删除

    • prune:删除未使用的
    • rm:删除指定的

1.2.1、创建 & 查看

默认挂载点:宿主机文件系统的 /var/lib/docker/volumes/

  • create:创建

    docker volume create 数据卷名
    
  • ls:列出所有数据卷

    docker volume ls
    
  • inspect:查看数据卷详情,重点关注 Mountpoint

    docker volume inspect 数据卷名
    

1.2.2、删除

  • prune:删除未使用的数据卷,输入 y 确认。

    docker volume prune
    
  • rm:删除指定的数据卷,参数 -f 强制删除。

    docker volume rm [-f]
    

2、挂载(❗)

挂载(Mount

将容器目录挂载到数据卷或容器上,实现数据的同步和复用

2.1、挂载形式

2 种形式:挂载到数据卷,直接挂载到宿主机目录

挂载到数据卷 直接挂载
关系 容器目录 → 数据卷 → 宿主机目录 容器目录 → 宿主机目录
挂载点 /var/lib/docker/volumes/ 人为指定
挂载点管理 Docker 统一管理 人为管理
耦合性

image-20220531164141350

2.2、语法

创建容器时使用 -v 选项

  • 挂载到数据卷:若指定数据卷不存在则会自动创建

    docker run -v 数据卷名称:容器目录 [其它选项] 镜像名
    
  • 直接挂载

    docker run -v 宿主机目录:容器目录 [其它选项] 镜像名
    docker run -v 宿主机文件:容器文件 [其它选项] 镜像名
    

2.3、case

Nginx 挂载数据卷

示例:创建并运行一个 Nginx 容器,

将容器内的 /usr/share/nginx/html 目录挂载到数据卷。

  1. 拉取镜像

    docker pull nginx
    
  2. 创建并运行容器:换行符 \ 提高可读性

    • --name:容器名:myNginx

    • -v:数据卷名 html,容器目录 /usr/share/nginx/html

    • -p:端口号映射

    • -d:后台运行

      docker run \
       --name myNginx \
       -v html:/usr/share/nginx/html \
       -p 80:80 \
       -d \
       nginx
      
  3. 查看挂载情况:通过 Xftp 查看,宿主机中已同步了 Nginx 容器目录的数据。

    image-20220531172200661

MySQL 直接挂载

示例:创建并运行一个 MySQL 容器,

将 MySQL 容器的数据目录 /var/lib/mysql 直接挂载到宿主机目录。

① 创建挂载点

在宿主机 /tmp 目录下创建 MySQL 容器挂载点。

# 数据目录的挂载点
mkdir -p /tmp/mysql/data

② 挂载

  1. 拉取镜像

    docker pull mysql
    
  2. 创建并运行 MySQL 容器(参考 DockerHub

    • -e:环境变量,此处指定 root 用户密码

    • -V:挂载点 /tmp/mysql/data,容器目录 /var/lib/mysql

      docker run \
       --name mysql \
       -e MYSQL_ROOT_PASSWORD=123456 \
       -v /tmp/mysql/data:/var/lib/mysql \
       -p 3306:3306 \
       -d \
       mysql
      
  3. 查看挂载情况:宿主机中已同步了 MySQL 数据目录的数据。

    image-20220531181556954

Hint:此处仅展示 MySQL 数据目录的挂载。

基于 CentOS 安装 MySQL 的详细教程:Linux:CentOS7安装MySQL8

posted @ 2022-05-31 18:24  Jaywee  阅读(80)  评论(0编辑  收藏  举报

👇