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

 更新时间:2023年08月10日 11:43:10   作者:liulanba  
本文介绍了如何实现Docker目录和本地目录互通,通过这种方式,可以轻松地在Docker容器和本地文件系统之间共享数据,感兴趣的可以了解一下

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: mysql
    volumes:
      - /data/mysql:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: my-secret-pw
  web:
    build: .
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db
    environment:
      DB_HOST: db
      DB_NAME: mydatabase
      DB_USER: root
      DB_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 参数更加灵活和可管理,可以更好地管理容器中的数据,可以减少硬盘使用量,并且可以在多个容器之间共享数据。

到此这篇关于docker目录和本地目录互通的实现的文章就介绍到这了,更多相关docker目录和本地目录互通内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Centos7上安装docker的方法

    Centos7上安装docker的方法

    Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE。这篇文章给大家介绍了Centos7上安装docker的方法,感兴趣的朋友一起看看吧
    2018-07-07
  • 如何解决报错unable to remove volume问题

    如何解决报错unable to remove volume问题

    这篇文章主要介绍了如何解决报错unable to remove volume问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • 使用Docker启动mysql成功后,使用docker ps查不到的问题及解决

    使用Docker启动mysql成功后,使用docker ps查不到的问题及解决

    这篇文章主要介绍了使用Docker启动mysql成功后,使用docker ps查不到的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Docker中的镜像详细介绍

    Docker中的镜像详细介绍

    这篇文章主要介绍了Docker中的镜像详细介绍的相关资料,需要的朋友可以参考下
    2017-05-05
  • docker容器因报错无法启动问题的检查及修复容器错误并重启

    docker容器因报错无法启动问题的检查及修复容器错误并重启

    随着容器技术的发展,现在很多的应用程序系统都会选择使用docker容器进行部署,下面这篇文章主要给大家介绍了关于docker容器因报错无法启动问题的检查及修复容器错误并重启的相关资料,需要的朋友可以参考下
    2023-03-03
  • docker常用命令总结(推荐)

    docker常用命令总结(推荐)

    这篇文章主要介绍了docker常用命令总结(推荐),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Docker中运行nginx并挂载本地目录到镜像中的方法

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

    这篇文章主要介绍了Docker中运行nginx并挂载本地目录到镜像中的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Docker容器数据卷技术介绍

    Docker容器数据卷技术介绍

    这篇文章主要为大家介绍了Docker容器数据卷技术介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • docker安装MinIO全过程

    docker安装MinIO全过程

    这篇文章主要介绍了docker安装MinIO全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • docker基本命令及使用实例详解

    docker基本命令及使用实例详解

    这篇文章主要介绍了docker基本命令及使用实例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03

最新评论