Docker -v 挂载主机目录到容器中(及数据卷容器)

简介: Docker -v 挂载主机目录到容器中(及数据卷容器)

一、简单挂载

  • 使用 Docker 的过程中,经常需要挂载主机上的目录或文件到 Docker 容器中,以实现数据的共享或持久化。而 docker run -v 命令便是用于挂载主机目录到 Docker 容器中的常用命令。
  • 在创建启动容器时,使用-v参数设置数据卷
# 挂载单个
$ docker run ... -v [主机目录]:[容器目录] [镜像名称]
# 挂载多个
$ docker run -v [主机目录1]:[容器目录1] -v [主机目录2]:[容器目录2] -v [主机目录3]:[容器目录3] [镜像名称]
  • 注意事项:
  • 目录必须是绝对路径
  • 如果目录不存在,会自动创建
  • 可以挂载多个数据卷,写多个 -v 就行

二、简单挂载案例

  • centos 举例挂载
# 拉取最新 centos
$ docker pull centos
# 一般可以放在 root 目录下,这里为了测试,随便写个文件名 dzmtest 作为效果区分
$ docker run -it --name dzm -v /dzmtest/data:/dzmtest/data_container centos /bin/bash
  • 进入容器后,查看容器目录
# 或者 $ ls -l
$ ls
# dzmtest 文件夹就被创建了,里面还有个 data_container 文件夹
bin  dev  dzmtest  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
  • 查看宿主机目录,需要回到宿主机最外层
# 或者 $ ls -l
$ ls
# 需要通过 $ cd .. 回到宿主机文件最外层,根目录,会发现创建好了 dzmtest,里面还有个 data 文件夹
Docker  bin  boot  dev  dzmtest  etc  home  init  lib  lib32  lib64  libx32  lost+found  media  mnt  opt  proc  root  run  sbin  snap  srv  sys  tmp  usr  va
  • 测试数据同步功能,在宿主机(/dzmtest/data)或容器(/dzmtest/data_container)内添加文件,或修改文件内容都会互相同步。
# 或 $ cd /dzmtest/data_container
$ cd /dzmtest/data
# 随便创建一个文件
$ touch dzm.txt
  • 如果创建文件报错 touch: cannot touch 'dzm.txt': Permission denied 是没有权限,加个权限就行。
    如果报错 -bash: cd: data/: Permission denied 也是一样,加个最高权限就行了。
# 回到上层文件夹
$ cd ..
# 对 data 文件添加权限
# chmod 修改权限指令
# -R 对目前目录下的所有档案与子目录进行相同的权限变更
# 777 是所有用户都拥有最高权限
$ sudo chmod -R 777 ./data/
  • 然后再次执行创建文件命令,就能创建成功了
dengzemiao@DESKTOP-D06B2J2:/dzmtest/data$ ls
# 宿主机上文件就创建好了,然后去容器内的绑定文件夹内查看下是否存在文件
dzm.txt
[root@037524b9fb04 /]# cd dzmtest/data_container/
[root@037524b9fb04 data_container]# ls
# 容器内也存在同样的文件了,这样就实现了共享
dzm.txt
  • 举例挂载多个目录
# 通过 \ + 回车进行换行输入
$ docker run -it --name dzm \
> -v /dzmtest/data1:/dzmtest/data1 \
> -v /dzmtest/data2:/dzmtest/data2 \
> centos /bin/bash

三、数据卷容器

  • 如果是多容器数据共通,那么按上面的办法就是每个容器都关联宿主机的一个文件夹,这样就能多容器数据共通
    还有种方式就是 数据卷容器,就是创建一个容器专门挂载宿主机文件夹,然后其他容器关联到这个容器即可。

    1、创建启动 c3 数据卷容器,使用 -v 设置数据卷
# -v /volume 这种写法会在容器内创建一个 /volume 目录,然后 docker 会在宿主机上自动分配一个目录作为绑定目录
$ docker run -it --name=c3 -v /volume centos:7 /bin/bash
# 执行命令后,如何查看容器自动分配的宿主机绑定目录呢
$ docker inspect c3
[
    {
        ......
        "HostConfig": {
            // 如果指定数据卷目录,这里会列出绑定信息
            "Binds": null,
            ......
        },
        ......
        // 挂着信息
        "Mounts": [
            {
                "Type": "volume",
                "Name": "8d89f84aa486fcf706e180e6aa17649929147bdbc32e8aa3391b4dffdce27d09",
                // 宿主机中的目录
                "Source": "/var/lib/docker/volumes/8d89f84aa486fcf706e180e6aa17649929147bdbc32e8aa3391b4dffdce27d09/_data",
                // 容器中的目录
                "Destination": "/dzmtest1",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
        .....
    }
]
dengzemiao@DESKTOP-D06B2
  • 2、创建启动 c1 c2 容器,使用 --volumes-from 设置数据卷容器
$ docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
$ docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash
  • 3、然后就在 c1 c2 容器中正常增删改文件,实现互通了,同时也可以单独访问 c3 数据卷容器做处理。

相关文章
|
7天前
|
存储 Docker 容器
Docker-基础(数据卷、自定义镜像、Compose)
通过数据卷实现持久化存储,通过自定义镜像满足特定需求,通过Docker Compose方便地管理多容器应用
55 27
|
12天前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
84 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
8天前
|
存储 Docker 容器
Docker-基础(数据卷、自定义镜像、Compose)
通过数据卷实现持久化存储,通过自定义镜像满足特定需求,通过Docker Compose方便地管理多容器应用。掌握这些Docker基础概念和操作,可以显著提高开发和部署效率,确保应用程序的可移植性和可扩展性。
55 22
|
23天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
12天前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
76 11
|
29天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
136 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
16天前
|
存储 Ubuntu 关系型数据库
《docker基础篇:7.Docker容器数据卷》包括坑、回顾下上一讲的知识点,参数V、是什么、更干嘛、数据卷案例
《docker基础篇:7.Docker容器数据卷》包括坑、回顾下上一讲的知识点,参数V、是什么、更干嘛、数据卷案例
44 13
|
网络协议 Java Maven
docker将数据从宿主机挂载到容器的方式(二)
docker将数据从宿主机挂载到容器的方式(二)
512 0
docker将数据从宿主机挂载到容器的方式(二)
|
存储 Docker 容器
docker将数据从宿主机挂载到容器的方式(一)
docker将数据从宿主机挂载到容器的方式(一)
407 0
docker将数据从宿主机挂载到容器的方式(一)
|
10天前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
158 93