实现docker目录和本地目录的互通

news/2024/11/29 0:51:57/

1.docker run使用-v 绑定一个卷
来实现容器中的目录与本地某个目录的联通,这样可以让容器中的数据在容器销毁之后仍然可以被保留下来。下面是一些基本的步骤:

创建一个本地目录,用于存储容器中的数据。例如,我们可以在本地创建一个目录 /data,用于存储容器中的数据。

在运行容器时,使用 -v 参数将本地目录挂载到容器内部的目录上。例如,如果我们要运行一个 MySQL 容器,并将本地的 /data 目录挂载到容器内部的 /var/lib/mysql 目录上,可以使用如下命令:

docker run -d \--name my-mysql \-v /data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=my-secret-pw \mysql:latest

在这个命令中,我们使用 -v 参数将本地的 /data 目录挂载到容器内部的 /var/lib/mysql 目录上。这样,在容器内部的数据就会被保存到本地的 /data 目录中。

运行容器后,容器中的数据就可以和本地的 /data 目录保持联通了。例如,如果我们要在 MySQL 容器中创建一个名为 mydatabase 的数据库,可以使用如下命令:

docker exec -it my-mysql mysql -uroot -pmy-secret-pw -e "CREATE DATABASE mydatabase;"

在这个命令中,我们使用 docker exec 命令进入到运行中的 MySQL 容器中,并执行一个 SQL 命令来创建一个名为 mydatabase 的数据库。由于我们已经将容器内部的 /var/lib/mysql 目录挂载到了本地的 /data 目录上,因此在容器内部创建的数据也会被保存到本地的 /data 目录中。

总之,使用数据卷可以让容器中的目录和本地的某个目录保持联通,从而实现容器数据的持久化。

2.docker-compose.yml中使用数据卷(Volume)
在 Docker Compose 中,可以使用 volumes 来实现容器中的目录与本地某个目录的联通。下面是一个基本的例子:
假设我们有一个 Django 应用程序和一个 MySQL 数据库。我们想要将 Django 应用程序和 MySQL 数据库分别运行在两个容器中,并且想要将 MySQL 数据库中的数据保存到本地的 /data/mysql 目录中。在这种情况下,我们可以创建一个 docker-compose.yml 文件,并在其中指定 volumes,如下所示:

version: "3"services:db:image: mysqlvolumes:- /data/mysql:/var/lib/mysqlenvironment:MYSQL_ROOT_PASSWORD: my-secret-pwweb:build: .volumes:- .:/codeports:- "8000:8000"depends_on:- dbenvironment:DB_HOST: dbDB_NAME: mydatabaseDB_USER: rootDB_PASSWORD: my-secret-pw

在上面的 docker-compose.yml 文件中,我们定义了两个服务:一个 MySQL 服务(名为 db),一个 Django 服务(名为 web)。我们还定义了两个 volumes,一个用于将本地的 /data/mysql 目录挂载到 MySQL 容器中的 /var/lib/mysql 目录上,另一个用于将当前目录(即 .)挂载到 Django 容器中的 /code 目录上。

这样,在运行 Docker Compose 时,我们可以使用如下命令:

docker-compose up

Docker Compose 会自动创建并启动两个容器,并将它们连接在一起。MySQL 容器中的数据会被保存到本地的 /data/mysql 目录中,而 Django 容器中的代码会被保存到本地的当前目录中。
区别:
使用 volumes 可以让容器中的目录和本地的某个目录保持联通,从而实现容器数据的持久化。

使用 -v 参数将本地的目录挂载到容器中时,Docker 会将本地目录中的数据直接复制到容器中,但容器中的数据并不会自动同步到本地目录中。这意味着,如果容器被删除或本地目录被删除,那么数据也将被删除,无法进行持久化。

相比之下,使用 volumes 来挂载目录时,Docker 会将数据存储在 Docker 所管理的卷中。这些卷可以被 Docker Compose 管理,可以轻松地备份和恢复。此外,可以使用 docker volume 命令来管理这些卷。使用 volumes,可以更好地管理和持久化容器中的数据。

另外,使用 volumes 还可以在容器中共享数据,并且可以在多个容器之间共享。这种方法可以减少数据复制的时间和空间,并减少硬盘的使用量。

综上所述,使用 volumes 比使用 -v 参数更加灵活和可管理,可以更好地管理容器中的数据,可以减少硬盘使用量,并且可以在多个容器之间共享数据。


http://www.ppmy.cn/news/62796.html

相关文章

Altium Designer中如何在顶层中添加对应端口

转载说明: 大众深度科普 https://jingyan.baidu.com/article/c33e3f4889f327ea15cbb584.html 版权归原作者所有;感谢原作者的分享; 转载到此,主要为了后期查看方便; 本经验简要介绍Altium Designer中如何在顶层中添…

字符设备驱动开发实验

我们以 chadev 这个虚拟设备为 例,完整的编写一个字符设备驱动模块。chadev 不是实际存在的一个设备,是为了方 便讲解字符设备的开发而引入的一个虚拟设备设备有两个缓冲区,一个为读缓冲 区,一个为写缓冲区,这两个缓冲…

(六)【平衡小车制作】位置式PID、直立环与速度环编程

本篇文章我将针对位置式PID算法、直立环、速度环等的编程进行详细的讲解,让每位小伙伴能够对这三个概念的编程逻辑有更加清晰的理解。 一、直立环(PD控制器) 1.中文公式  直立环输出Kp1角度偏差Kd角度偏差的微分  // 角度偏差真实角度-期…

JMeter开发web及手机APP自动化脚本练习

(一)开发web自动化脚本练习 一、打开浏览器代理服务器设置 我这里用的是360浏览器,打开浏览器代理服务器设置,端口要与jmeter中的端口设置保持一致哦。 二、JMeter设置代理 JMeter设置代理(jmeter中的端口要与360浏览…

【设计模式】抽象工厂模式

【设计模式】抽象工厂模式 参考资料: Java设计模式 - 抽象工厂模式 重学 Java 设计模式:实战抽象工厂模式 文章目录 【设计模式】抽象工厂模式一、抽象工厂模式介绍1.1、什么是工厂方法模式1.2、角色概述 二、案例场景模拟2.1、背景一:Redis…

如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)

如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows) 如何制作 ESXi USB 启动盘 请访问原文链接:https://sysin.org/blog/create-bootable-esxi-usb-installer/,查看最新版。原创作品,转载请保留出处。 作者主页:sysi…

【SpringCloud】初始微服务

目录 一、单体架构 1、概念 2、优点 3、缺点 二、分布式架构 1、概念 2、优点 3、缺点 三、微服务 1、概念 2、优点 3、缺点 四、微服务技术对比 五、SpringCloud 六、服务拆分 1、注意事项 2、服务远程调用 一、单体架构 1、概念 业务的所有功能都集中到一个…

Triloga 的任务 — Satta 系列来袭!

谁战胜了这些凶兽,谁就获得了力量,让我们通过装备体现出来!来自神秘洞穴的疯狂昆虫外壳,黄昏之地燃烧中的部落的骨质盔甲,以及深海的美妙灯光。 Triloga 的任务——Satta 系列已在 The Sandbox 市场平台上架&#xff1…