本地文件上传至docker容器 文件挂载

方式二、Docker数据卷

  1. 什么是volume

想要了解Docker
Volume,首先我们需要知道Docker的文件系统是如何工作的。Docker镜像是由多个文件系统(只读层)叠加而成。当我们启动一个容器的时候,Docker会加载镜像层并在其上添加一个读写层。如果运行中的容器修改了现有的一个已存在的文件,那该文件将会从读写层下的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏。当删除Docker容器,并通过该镜像重新启动时,之前的更改将会丢失。在Docker中,只读层以及在顶部的读写层的组合被称为Union
FIle System(联合文件系统)。

为了能够保存(持久化)数据以及共享容器间的数据,Docker提出了Volume的概念。简单来说,Volume就是目录或者文件,它可以绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。

  1. 数据卷的特性

• 数据卷 可以在容器之间共享和重用

• 对数据卷的修改会立马生效

• 对数据卷的更新,不会影响镜像

• 数据卷 默认会一直存在,即使容器被删除

  1. 数据卷相关操作
docker volume

在这里插入图片描述

创建数据卷
docker volume create [OPTIONS] [VOLUME]  (如果不指定,则创虚拟volume)

查看所有数据卷
docker volume ls

查看单一或多个数据卷详情
docker volume inspect [OPTIONS] VOLUME [VOLUME...]
删除单一数据卷
docker volume rm [OPTIONS] VOLUME [VOLUME...]
删除所有闲置数据卷
docker volume prune [OPTIONS]

可以看到创建的 Volume my-vol 保存在目录/var/lib/docker/volumes/下,以后所有针对该 Volume 的写数据都会保存中目录/var/lib/docker/volumes/my-vol/_data下。
在这里插入图片描述

文件挂载 先解释 -v /d/dev/test:/home/test
,表示将宿主机的D:/dev/test目录与容器内部的/home/test目录映射起来,在该目录下的操作的双向影响的

在这里D:/dev/test要写成/d/dev/test的形式

4.1.1 根据 ## 数据卷名称 ## 进行挂载
docker run -itd -v VOLUME_NAME:CONTAINER-DIR IMAGE [COMMAND] [ARG…]
示例:
将宿主机数据卷 my_vol 挂载到容器的/data/docker/volume/my_vol 目录

docker run -itd --name=vol1_ubuntu -v my_vol:/data/docker/volume/my_vol ubuntu /bin/bash

注:如果数据卷my_vol 存在将直接进行挂载,如果不存在 docker 将先自动创建数据卷再进行挂载。

挂载成功后,容器从 /data/docker/volume/my_vol目录下读取或写入数据,实际上都是从宿主机的 my_vol 数据卷中读取或写入数据。因此 Volumes 或 Bind mounts 也可以看作是容器和宿主机共享文件的一种方式。

4.1.2 宿主机文件目录绝对路径进行挂载****
docker run -it -v ABSOLUTE-HOST-DIR:CONTAINER-DIR IMAGE [COMMAND] [ARG…]
示例:

将宿主机文件目录 /opt/common/docker/volumes/my_vol2 挂载到容器的/data/docker/volume/my_vol 目录

docker run -itd --name=vol2_ubuntu -v /opt/common/docker/volumes/my_vol2:/data/docker/volume/my_vol ubuntu /bin/bash
注:宿主机的文件目录必须为绝对路径。

4.1.3 根据宿主机文件绝对路径进行挂载

docker run -itd -v VOLUME_NAME:CONTAINER-DIR IMAGE [COMMAND] [ARG…]
示例:

将宿主机文件 ~/.bash_history 挂载到容器的/.bash_history

docker run -itd --name=vol3_ubuntu -v ~/.bash_history:/.bash_history ubuntu /bin/bash
4.1.4 挂载匿名卷

v 参数如果不加任何宿主机相关卷信息docker将创建一个匿名卷进行挂载
docker run -itd -v CONTAINER-DIR IMAGE [COMMAND] [ARG…] 示例:

挂载匿名卷到容器的/data/docker/volume/my_vol 目录

docker run -itd --name=vol4_ubuntu -v /data/docker/volume/my_vol ubuntu /bin/bash

## 本地文件上传至docker容器 文件上传到docker容器 本地与容器互传 服务器的文件复制到docker容器内
**注:此方式虽然也可以管理但是数据不交融,基本不会使用,仅做了解**

> 问题 在往docker容器中直接使用rz上传文件时,速度很慢,所以考虑使用从本地上传至容器

拿到容器ID

docker ps -a

在这里插入图片描述

将本地文件上传到容器的指定目录中 一定要写绝对路径而不是相对路径 容器名字使用容器id

docker cp 本地文件路径 ID全称(容器id):容器路径

1
在这里插入图片描述
在这里插入图片描述

容器到宿主机 一定要写绝对路径而不是相对路径 容器名字使用容器id

在这里插入图片描述
注:此方式虽然他也可以管理但是数据不交融,基本不会使用,仅做了解

docker宿主机与容器的交互 文件互传 数据交互 数据传输
docker映射外部文件夹

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
文件上传Docker 容器的步骤如下: 1. 在本地创建一个文件夹,例如:`mydata`,并将需要上传到容器中的文件放入该文件夹中。 2. 使用以下命令启动 Docker 容器,并将本地文件夹 `mydata` 挂载容器的 `/data` 目录下: ```bash docker run -it -v /path/to/mydata:/data my-image-name ``` 其中,`-v /path/to/mydata:/data` 表示将本地的 `/path/to/mydata` 目录挂载容器的 `/data` 目录下,`my-image-name` 是要启动的 Docker 镜像名称。 3. 进入容器后,使用以下命令将本地文件夹 `/data` 中的文件复制到容器内部的指定目录中,例如:`/app`。 ```bash docker cp /data/myfile.txt container-id:/app/myfile.txt ``` 其中,`/data/myfile.txt` 是本地文件夹中的文件路径,`container-id` 是容器的 ID,可以使用 `docker ps` 命令查看容器的 ID,`:/app/myfile.txt` 是容器内部文件路径。 4. 退出容器后,使用以下命令保存容器的状态为一个新的 Docker 镜像: ```bash docker commit container-id my-new-image-name ``` 其中,`container-id` 是容器的 ID,`my-new-image-name` 是你自己定义的新的 Docker 镜像名称。 5. 最后,使用以下命令将新的 Docker 镜像上传到 Docker Hub 中: ```bash docker push my-docker-id/my-new-image-name ``` 其中,`my-docker-id` 是你在 Docker Hub 上的账号名,`my-new-image-name` 是你自己定义的新的 Docker 镜像名称。上传完成后,其他人可以使用该新的 Docker 镜像来运行包含上传文件容器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生信小博士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值