docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > docker目录和本地目录互通

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

作者: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目录和本地目录互通内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文