您的位置:

Docker 持久化

一、Docker Volumes

Docker Volumes 是 Docker 中持久化数据的主要方式之一。它通过在容器和主机之间创建一个虚拟文件系统,使得数据在容器删除后依然存在于主机之中。

1、使用 Docker Volumes 命令创建 Volume:

docker volume create my_volume

2、将 Volume 挂载到容器中:

docker run -v my_volume:/data my_image

3、使用自定义 Volume 配置文件:

// docker-compose.yml
version: '3'
services:
  my_service:
    image: my_image
    volumes:
      - my_volume:/data
volumes:
  my_volume:

二、Docker Bind Mounts

Docker Bind Mounts 是另一种 Docker 中持久化数据的方式。它直接将主机文件系统中的目录或文件挂载到容器中,主机文件删除后容器中的数据也会消失。

1、使用 Docker Bind Mounts 命令将主机目录挂载到容器中:

docker run -v /host/dir:/container/dir my_image

2、在 Docker Compose 中使用 Bind Mounts:

// docker-compose.yml
version: '3'
services:
  my_service:
    image: my_image
    volumes:
      - /host/dir:/container/dir

三、Docker Named Volumes 和 Bind Mounts 的比较

Docker Named Volumes 和 Docker Bind Mounts 是持久化数据的两种方式,各有优劣。

1、Named Volumes:

a、更加简单易用,不需要考虑本地文件目录的位置等。

b、不需要担心文件系统的权限问题。

c、可以在多个容器之间共享数据。

d、需要 Docker 引擎管理 Volume 的生命周期,对使用者透明。

2、Bind Mounts:

a、可以直接挂载主机上的文件或目录,更加方便。

b、可以方便地进行本地开发。

c、更加灵活,可以从主机上的任意位置挂载文件系统。

d、需要手动管理文件系统权限。

四、Docker 数据卷容器

Docker 数据卷容器是一种使用数据卷来存放持久化数据的方式。它是在多个容器之间共享数据的另一种方式。

1、创建数据卷容器:

docker create -v /data --name my_data_container my_image /bin/true

2、将数据卷容器挂载到应用容器中:

docker run --volumes-from my_data_container my_image

3、在 Docker Compose 中使用数据卷容器:

// docker-compose.yml
version: '3'
services:
  my_service:
    image: my_image
    volumes_from:
      - my_data_container
volumes:
  my_data_container:

五、Docker 镜像仓库

当需要在不同的主机之间分发 Docker 镜像时,可以将它们存储到 Docker 镜像仓库中。

1、使用 Docker 命令将镜像推送到 Registry:

docker login
docker tag my_image username/my_image
docker push username/my_image

2、在 Docker Compose 中使用 Registry:

// docker-compose.yml
version: '3'
services:
  my_service:
    image: registry.example.com/username/my_image

六、Docker Swarm

Docker Swarm 是 Docker 自带的容器编排工具。它可以快速构建一个由多个 Docker 容器组成的集群。

1、初始化 Docker Swarm:

docker swarm init --advertise-addr IP_ADDRESS

2、在 Swarm 中使用数据卷:

// docker-compose.yml
version: '3'
services:
  my_service:
    image: my_image
    volumes:
      - my_volume:/data
volumes:
  my_volume:
    driver: local

3、在 Swarm 中使用配置文件:

// docker-compose.yml
version: '3'
services:
  my_service:
    image: my_image
    configs:
      - my_config
configs:
  my_config:
    file: ./config.ini