Docker chapter 3 colume mount VS bind mount

note1:

create a volume

docker volume create myvolume

note 2 :

run a container and mount a volume to persist data

docker run -dp 127.0.0.1:3000:3000 --mount type=volume,src=todo-db,target=/etc/todos getting-started
  • --mount type=volume,src=todo-db,target=/etc/todos 参数挂载了一个 Docker 卷(volume)。这个卷的名字是 todo-db,它被挂载到 Docker 容器的 /etc/todos 目录。这意味着 Docker 容器可以在 /etc/todos 目录中读写数据,这些数据实际上被存储在 Docker 宿主机的 todo-db 卷中。

note 3 :

inspect a volume particular message 

docker volume  inspect  myvolume

 [
    {
        "CreatedAt": "2024-02-07T07:05:59Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/todo-db/_data",
        "Name": "todo-db",
        "Options": null,
        "Scope": "local"
    }
]

The Mountpoint is the actual location of the data on the disk. Note that on most machines, you will need to have root access to access this directory from the host

note 4: 

本地docker volume 的 数据 会 push到 远程吗

不会。Docker 的 push 命令只会将 Docker 镜像推送到远程的 Docker Registry,而不会推送 Docker 容器的数据,包括挂载的 volume。

Docker volume 中的数据是存储在 Docker 宿主机上的,它们是与 Docker 容器分开管理的。当你推送一个 Docker 镜像时,你只是推送了用于创建 Docker 容器的镜像,而不是容器的运行状态或者数据。

如果你需要将 Docker volume 中的数据备份或者迁移到其他地方,你需要使用其他的方法,例如使用 docker cp 命令来复制数据,或者使用 tar 命令来创建数据的归档文件,然后将归档文件复制到其他地方。

 note 5 :

volume mount 和 bind mount 两者的使用场景的区别

Docker 提供了两种主要的挂载类型:volume mount 和 bind mount。它们都可以将数据持久化并共享到容器之外,但是使用场景和特性有所不同。

Volume Mounts

  • Volume mounts 是 Docker 管理的挂载,数据存储在 Docker 宿主机的 /var/lib/docker/volumes/ 目录下。
  • 适用于你不需要或不关心数据在宿主机上存储的具体位置,但希望 Docker 管理数据的生命周期。
  • 可以很容易地在容器之间共享和重用。
  • 可以使用 Docker CLI 或者 Docker API 来备份、恢复或迁移数据。
  • 适用于生产环境。

Bind Mounts

  • Bind mounts 可以将宿主机上的任何文件或目录挂载到容器中。
  • 适用于你需要控制数据在宿主机上存储的具体位置。
  • 可以用于开发环境,例如,将本地的源代码目录挂载到容器中,这样你就可以在本地编辑代码,而容器可以立即看到并使用这些更改。
  • 不适合在生产环境中使用,因为它可能会带来安全和文件权限的问题。

总的来说,如果你在开发环境中,需要在容器和宿主机之间共享文件,你可能会选择使用 bind mounts。如果你在生产环境中,需要数据持久化,你可能会选择使用 volume mounts。

note 6:

docker run -it --mount type=bind,src="$(pwd)",target=/src ubuntu bash

  • -it 参数让 Docker 容器在交互模式下运行,这意味着你可以在终端中输入命令并看到输出。

    -it 是两个 Docker 命令行参数的缩写:

  • -i 或 --interactive:保持 STDIN 开启,即使没有附加到容器。
  • -t 或 --tty:为容器分配一个伪终端。
  • 这两个参数通常一起使用(-it 或 -ti),以便在新容器中启动一个交互式 shell。这样,你就可以在终端中输入命令并看到输出,就像在本地终端中一样

  • --mount type=bind,src="$(pwd)",target=/src 参数挂载了一个 bind mount。这个 bind mount 将当前工作目录($(pwd) 是一个 shell 命令,用于获取当前工作目录的路径)挂载到 Docker 容器的 /src 目录。这意味着 Docker 容器可以在 /src 目录中读写数据,这些数据实际上被存储在 Docker 宿主机的当前工作目录中。

  • ubuntu 是 Docker 容器的基础镜像,这里使用的是 Ubuntu Linux。

  • 所以,这个 docker run 命令的作用是:启动一个新的 Docker 容器,将当前工作目录挂载到 /src 目录,然后在容器中启动一个 bash shell

  • bash 是在 Docker 容器中运行的命令,这个命令启动了一个 bash shell,你可以在这个 shell 中输入命令并看到输出。

 

 copy everything in current folder   to target  /path

相关推荐

  1. 3.11笔记3

    2024-02-08 08:00:03       18 阅读
  2. 3.3 语法规则

    2024-02-08 08:00:03       15 阅读
  3. <span style='color:red;'>3</span>-Mybatis

    3-Mybatis

    2024-02-08 08:00:03      40 阅读
  4. vue 3

    2024-02-08 08:00:03       32 阅读
  5. Ansible<span style='color:red;'>3</span>

    Ansible3

    2024-02-08 08:00:03      39 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-08 08:00:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-08 08:00:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-08 08:00:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-08 08:00:03       18 阅读

热门阅读

  1. SQL 注入 - http头注入之UA头注入探测

    2024-02-08 08:00:03       37 阅读
  2. Android 自定义BaseActivity

    2024-02-08 08:00:03       31 阅读
  3. django的基本使用(一)

    2024-02-08 08:00:03       29 阅读
  4. TensorFlow 的基本概念和使用场景

    2024-02-08 08:00:03       34 阅读
  5. ubuntn20 搭建 redmine

    2024-02-08 08:00:03       34 阅读
  6. 20240206作业

    2024-02-08 08:00:03       18 阅读
  7. QT学习(五)C++函数重载

    2024-02-08 08:00:03       29 阅读
  8. Redis——面试+思想+应用

    2024-02-08 08:00:03       32 阅读
  9. 【Eclipse插件开发】3工作台workbench探索【下篇】

    2024-02-08 08:00:03       34 阅读
  10. 算法学习系列(三十二):背包问题

    2024-02-08 08:00:03       27 阅读