一、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