docker基础知识之挂载本地目录的方法

Docker可以支持把一个宿主机上的目录挂载到镜像里。

代码如下:

docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash

通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径。

现在镜像内就可以共享宿主机里的文件了。

默认挂载的路径权限为读写。如果指定为只读可以用:ro

代码如下:

docker run -it -v /home/dock/Downloads:/usr/Downloads:ro ubuntu64 /bin/bash

docker还提供了一种高级的用法。叫数据卷。

数据卷:“其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的”。感觉像是由一个容器定义的一个数据挂载信息。其他的容器启动可以直接挂载数据卷容器中定义的挂载信息。
看示例:

代码如下:

docker run -v /home/dock/Downloads:/usr/Downloads  --name dataVol ubuntu64 /bin/bash

创建一个普通的容器。用--name给他指定了一个名(不指定的话会生成一个随机的名子)。

再创建一个新的容器,来使用这个数据卷。

docker run -it --volumes-from dataVol ubuntu64 /bin/bash

--volumes-from用来指定要从哪个数据卷来挂载数据。

如何在Docker容器内外互相拷贝数据?

从容器内拷贝文件到主机上

代码如下:

docker cp <containerId>:/file/path/within/container /host/path/target

从主机上拷贝文件到容器内

1.用-v挂载主机数据卷到容器内

docker run -v /path/to/hostdir:/mnt $container 

在容器内拷贝

cp /mnt/sourcefile /path/to/destfile 

2.直接在主机上拷贝到容器物理存储系统

A. 获取容器名称或者id :

$ docker ps 

B. 获取整个容器的id

$ docker inspect -f  '{{.Id}}' 步骤A获取的名称或者id 

C. 在主机上拷贝文件:

代码如下:

$ sudo cp path-file-host /var/lib/docker/aufs/mnt/FULL_CONTAINER_ID/PATH-NEW-FILE

或者

代码如下:

$ sudo cp path-file-host /var/lib/docker/devicemapper/mnt/123abc<<id>>/rootfs/root

例子:

$ docker ps 

CONTAINER ID   IMAGE  COMMAND    CREATED   STATUS    PORTS    NAMES 

d8e703d7e303  solidleon/ssh:latest   /usr/sbin/sshd -D           cranky_pare 

$ docker inspect -f  '{{.Id}}' cranky_pare

or

$ docker inspect -f  '{{.Id}}' d8e703d7e303 

d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5 

$ sudo cp file.txt /var/lib/docker/aufs/mnt/**d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5 

3.用输入输出符

代码如下:

docker run -i ubuntu /bin/bash -c 'cat > /path/to/container/file' < /path/to/host/file/

或者

代码如下:

docker exec -it <container_id> bash -c 'cat > /path/to/container/file' < /path/to/host/file/

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 8个你可能不知道的Docker知识

    自从上世纪 90 年代硬件虚拟化被主流的技术广泛普及之后,对数据中心而言,发生的最大的变革莫过于容器和容器管理工具,例如:Docker.在过去的一年内,Docker 技术已经逐渐走向成熟,并且推动了大型初创公司例如 Twitter 和 Airbnb 的发展,甚至在银行.连锁超市.甚至 NASA 的数据中心都赢得了一席之地.当我几年前第一次直到 Docker 的时候,我还对 Docker 的未来持怀疑的态度,我认为他们是把以前的 Linux 容器的概念拿出来包装了一番推向市场.但是使用 Docke

  • Docker 学习文档(知识结构整理)

    一.Docker 简介 Docker 两个主要部件: Docker: 开源的容器虚拟化平台Docker Hub: 用于分享.管理 Docker 容器的 Docker SaaS 平台 -- Docker Hub Docker 使用客户端-服务器 (C/S) 架构模式.Docker 客户端会与 Docker 守护进程进行通信.Docker 守护进程会处理复杂繁重的任务,例如建立.运行.发布你的 Docker 容器.Docker 客户端和守护进程可以运行在同一个系统上,当然你也可以使用 Docker

  • Docker 教程之获取镜像基础知识详解

    获取镜像 在之前的介绍中,我们知道镜像是 Docker 的三大组件之一. Docker 运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker 会从镜像仓库下载(默认是 Docker Hub 公共注册服务器中的仓库). 本章将介绍更多关于镜像的内容,包括: 从仓库获取镜像: 管理本地主机上的镜像: 介绍镜像实现的基本原理. 可以使用 docker pull 命令来从仓库获取所需要的镜像. 下面的例子将从 Docker Hub 仓库下载一个 Ubuntu 12.04 操作系统的镜像.

  • docker基础知识之挂载本地目录的方法

    Docker可以支持把一个宿主机上的目录挂载到镜像里. 复制代码 代码如下: docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash 通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径. 现在镜像内就可以共享宿主机里的文件了. 默认挂载的路径权限为读写.如果指定为只读可以用:ro 复制代码 代码如下: docker run -it -v /home/dock/Downloads:/u

  • 详解Docker挂载本地目录及实现文件共享的方法

    docker挂载本地目录的方法总结: Docker容器启动的时候,如果要挂载宿主机的一个目录,可以用-v参数指定. 譬如我要启动一个centos容器,宿主机的/test目录挂载到容器的/soft目录,可通过以下方式指定: # docker run -it -v /test:/soft centos /bin/bash 这样在容器启动后,容器内会自动创建/soft的目录.通过这种方式,我们可以明确一点,即-v参数中,冒号":"前面的目录是宿主机目录,后面的目录是容器内目录. 貌似简单,其

  • docker挂载本地目录和数据卷容器操作

    1.docker挂载本地目录 docker可以支持把一个宿主机上的目录挂载到镜像里. 交互模式运行 docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash 后台运行 docker run -d -v /home/dock/Downloads:/usr/Downloads --name ubuntu1 ubuntu64 通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径. 现在镜像内就

  • VirtualBox实现虚拟机中共享本地目录的方法

    VirtualBox VirtualBox 是一款开源虚拟机软件.VirtualBox 是由德国 Innotek 公司开发,由Sun Microsystems公司出品的软件,使用Qt编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox.Innotek 以 GNU General Public License (GPL) 释出 VirtualBox,并提供二进制版本及 OSE 版本的代码.使用者可以在VirtualBox上安装并且执行Solaris.Win

  • python基础知识之私有属性和私有方法

    私有权限 面向对象三大特性:封装.继承.多态 封装的意义: 将属性和方法放到一起做为一个整体,然后通过实例化对象来处理: 隐藏内部实现细节,只需要和对象及其属性和方法交互就可以了: 对类的属性和方法增加 访问权限控制. 私有权限:在属性名和方法名 前面 加上两个下划线 __ 类的私有属性 和 私有方法,都不能通过对象直接访问,但是可以在本类内部访问: 类的私有属性 和 私有方法,都不会被子类继承,子类也无法访问: 私有属性 和 私有方法 往往用来处理类的内部事情,不通过对象处理,起到安全作用.

  • Docker中运行nginx并挂载本地目录到镜像中的方法

    1 从hup上pull镜像 docker pull nginx 2 创建将要挂载的目录 mkdir -p /data/nginx/{conf,conf.d,html,logs} 3 先要有配置文件才能启动容器 3.1 vim /data/conf/nginx.conf user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_co

  • 详解Docker挂载本地目录

    docker可以支持把一个宿主机上的目录挂载到镜像里. docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash 通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径. 现在镜像内就可以共享宿主机里的文件了. 默认挂载的路径权限为读写.如果指定为只读可以用:ro docker run -it -v /home/dock/Downloads:/usr/Downloads:ro ubuntu

  • Docker基础知识之Linux namespace图文详解

    前言 Docker 是"新瓶装旧酒"的产物,依赖于 Linux 内核技术 chroot .namespace 和 cgroup.本篇先来看 namespace 技术. Docker 和虚拟机技术一样,从操作系统级上实现了资源的隔离,它本质上是宿主机上的进程(容器进程),所以资源隔离主要就是指进程资源的隔离.实现资源隔离的核心技术就是 Linux namespace.这技术和很多语言的命名空间的设计思想是一致的(如 C++ 的 namespace). 隔离意味着可以抽象出多个轻量级的内核

  • 详解docker nginx 容器启动挂载到本地

    首先nginx容器内部的结构: 进入容器: docker exec -it b511b6049f57 bash 查看容器的结构目录:其实每一个容器就相当于一个独立的系统. root@b511b6049f57:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr nginx的结构目录在容器中: 日志位置:/var/log/nginx/ 配置文件位置:/etc/nginx/

  • docker 启动elasticsearch镜像,挂载目录后报错的解决

    从docker hub下载了一个es的镜像,版本为6.4.2,详细信息如下: 比较重要的就是这两条,第一个是工作目录,挂载目录也需要和这里对应:第二个是启动命令,这里是指定了一个预先写好的启动脚本.所以我启动了一个空容器去查看了下容器内的情况: 容器内部目录结构如上图,data是用来存放数据,logs用来存放日志. 接着查看下启动脚本 /usr/local/bin/docker-entrypoint.sh 前半部分我也是看的一知半解,不过真正和挂载目录相关的是最后这部分,这里处理了挂载目录后的操

随机推荐