docker容器与宿主机的数据交互

在生产环境中使用 Docker ,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作。方式一、Docker cp命令

docker cp :用于容器与主机之间的数据拷贝。语法# 容器内文件 copy to 宿主机docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-# 宿主机文件 copy to 容器内docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATHOPTIONS说明:-L :保持源目标中的链接

操作示例:宿主机到容器

容器到宿主机

注:此方式虽然他也可以管理但是数据不交融,基本不会使用,仅做了解方式二、Docker数据卷1. 什么是volume想要了解Docker Volume,首先我们需要知道Docker的文件系统是如何工作的。Docker镜像是由多个文件系统(只读层)叠加而成。当我们启动一个容器的时候,Docker会加载镜像层并在其上添加一个读写层。如果运行中的容器修改了现有的一个已存在的文件,那该文件将会从读写层下的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏。当删除Docker容器,并通过该镜像重新启动时,之前的更改将会丢失。在Docker中,只读层以及在顶部的读写层的组合被称为Union FIle System(联合文件系统)。为了能够保存(持久化)数据以及共享容器间的数据,Docker提出了Volume的概念。简单来说,Volume就是目录或者文件,它可以绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。2. 数据卷的特性· 数据卷 可以在容器之间共享和重用· 对数据卷的修改会立马生效· 对数据卷的更新,不会影响镜像· 数据卷 默认会一直存在,即使容器被删除3. 数据卷相关操作

Usage:  docker volume COMMANDManage volumesCommands:  create      Create a volume  inspect     Display detailed information on one or more volumes  ls          List volumes  prune       Remove all unused local volumes  rm          Remove one or more volumes

创建数据卷Usage:  docker volume create [OPTIONS] [VOLUME]Create a volumeOptions:  -d, --driver string   Specify volume driver name (default "local")      --label list      Set metadata for a volume  -o, --opt map         Set driver specific options (default map[])查看所有数据卷

Usage:  docker volume ls [OPTIONS]List volumesAliases:  ls, listOptions:  -f, --filter filter   Provide filter values (e.g. 'dangling=true')      --format string   Pretty-print volumes using a Go template  -q, --quiet           Only display volume names

查看单一或多个数据卷详情Usage:  docker volume inspect [OPTIONS] VOLUME [VOLUME...]Display detailed information on one or more volumesOptions:  -f, --format string   Format the output using the given Go template删除单一数据卷Usage:  docker volume rm [OPTIONS] VOLUME [VOLUME...]Remove one or more volumes. You cannot remove a volume that is in use by a container.Aliases:  rm, removeOptions:  -f, --force   Force the removal of one or more volumes删除所有闲置数据卷Usage:  docker volume prune [OPTIONS]Remove all unused local volumesOptions:      --filter filter   Provide filter values (e.g. 'label=<label>')  -f, --force           Do not prompt for confirmation操作示例:

4. 数据卷使用数据卷的使用,类似于 Linux 下对目录或文件进行 mount。用户可以通过docker run的--volume/-v或--mount选项来创建带有数据卷的容器官方文档说明连接:https://www.xiaoyuani.com/4.1 --volume使用详述参数--volume(或简写为-v)只能创建bind mount。示例:docker run --name $CONTAINER_NAME -it \-v $PWD/$CONTAINER_NAME/app:/app:rw \-v $PWD/$CONTAINER_NAME/data:/data:ro avocado-cloud:latest /bin/bash注释:· 命令格式:[[HOST-DIR:]CONTAINER-DIR[:OPTIONS]]]· 如果指定HOST-DIR则必须是绝对路径,如果路径不存在则会自动创建· 实例中的rw为读写,ro为只读如果没有通过-v指定,那么Docker会默认帮我们创建匿名数据卷进行映射和挂载。4.2 --mount 使用详述对于--moun选项,目前Docker提供了三种不同类型的数据卷从宿主机挂载到容器中:(1)volume:普通数据卷(默认即这种类型),Docker管理宿主机文件系统的一部分,默认位于 /var/lib/docker/volumes 目录中;(2)bind mount:绑定数据卷,意为着可以存储在宿主机系统的任意位置;*注意:Dockerfile 中不支持这种用法,这是因为 Dockerfile 是为了移植和分享用的。然而,不同操作系统的路径格式不一样,所以目前还不能支持。(3)tmpfs:临时数据卷,挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统;三种方式的示意图如下所示:

4.3 -v与-mount的区别-mount可以支持创建集群服务的数据卷,而-v不行。4.4 补充说明(1)Docker 挂载数据卷的默认权限是读写,用户也可以通过 :ro 指定为只读。(2)(--mount基本包含了--volume的可选属性内容)官方建议使用--mount的方式,原文如下:Even though there is no plan to deprecate --volume, usage of --mount is recommended.方式三、Docker数据卷容器数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载,如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。

(0)

相关推荐

  • docker容器备份、恢复和迁移volume方案

    volume作为数据的载体,在很多情况下需要对其中的数据进行备份.迁移或是恢复.下面一docker容器的volume为例,说一下备份的技巧. 我们先建立一个容器vol_simple,该容器在/date ...

  • Docker 数据持久化Volume

    Docker镜像是基于联合文件系统(Union File System)的一种层式结构,由一系列指令一步一步构建出来.Docker镜像被存储在一系列的只读层中.当我们创建一个容器时,Docker会读取 ...

  • Portainer

    一.基本介绍 (1)Portainer 是一款轻量级的图形化管理工具,通过它我们可以轻松管理不同的 docker 环境.Portainer 部署和使用都非常的简单,它由一个可以运行在任何 docker ...

  • Docker storage driver(十四)

    一.storage driver 作用 正常情况下,只有很少量的数据被写入到容器最上层的写入层,并且通过 volume 来写数据,然而我们也会遇到一些情况需要我们可以直接写入到容器的写入层,这我们就需 ...

  • Docker 深入浅出

    Docker 概述 Docker 为什么会出现 我们在学习 Docker 之前,可以先来思考一下 Docker 为什么会出现? 如果大家已经接触过编程,并且自己上线过项目.可能会遇到一个问题,就是自己 ...

  • Docker 持久存储介绍(十三)

    一.Docker 数据存储 我们都知道 Docker 的数据可以存在容器的可写层,但是也存在以下几点不足: 当该容器不再运行时,数据将不会持久存储,如果另一个进程需要它,就很难将数据从容器中取出. 容 ...

  • Docker学习笔记之--安装mysql 并持久化数据到本地,最后使用Navicat连接测试(环境:centos7)

    在docker中 安装 mysql 8.0版本,参考文档:https://www.runoob.com/docker/docker-install-mysql.html 第一步:安装 docker p ...

  • docker容器与宿主机的数据交互方式总结

    这篇文章主要给大家介绍了关于docker容器与宿主机的数据交互,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 前言 在生产环境中 ...

  • 详解如何解决docker容器无法通过IP访问宿主机问题

    这篇文章主要介绍了详解如何解决docker容器无法通过IP访问宿主机问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧问题起源在使用 docker 的过程中我不幸需要在 ...

  • 如何恢复docker容器数据

    更新时间:2021年05月21日 11:01:46   作者:tianyucxh项目测试环境数据库数据丢失, 我们可以利用数据卷可以进行恢复数据,下面我来记录一下,希望此文章对各位有所帮助项目测试环境 ...

  • 创建用于AI和机器学习的Docker容器

    容器技术(例如Docker)极大地简化了依赖性管理和软件的可移植性.在本系列文章中,我们将探讨Docker在机器学习(ML)场景中的用法. 本系列假定您熟悉ML,一般的容器化,尤其是Docker.欢迎 ...

  • 在启用GPU的Docker容器中运行AI模型

    容器技术(例如Docker)极大地简化了依赖性管理和软件的可移植性.在本系列文章中,我们将探讨Docker在机器学习(ML)场景中的用法. 本系列假定您熟悉ML,一般的容器化,尤其是Docker.欢迎 ...

  • 群晖NAS安装Docker容器版emby(zishuo版)

    原文链接 『原汁原味的官方Docker容器用法,只是单纯的进行破解及插件源,内置刮削补丁穿墙方案,改善大陆地区的用户体验,本镜像不用任何插件即可硬件转码和外网播放(小白不懂就多看看教程,不显示硬件转码 ...

  • WEB前端第五十九课——时间戳、数据交互小案例

    WEB前端第五十九课——时间戳、数据交互小案例

  • Shell脚本控制docker容器启动顺序

    Shell脚本控制docker容器启动顺序

  • docker容器和虚拟化有什么区别?Linux云计算学习

    Linux容器是与系统其他部分隔离开的一系列进程,从另一个系统镜像运行,并由该镜像提供支持进程所需的全部文件(环境文件).那容器是虚拟化吗?docker容器和虚拟化有什么区别? 容器镜像包含了应用的所 ...