Docker数据管理,端口映射与容器互联(二)

127 阅读3分钟

1.Docker数据管理

通常在使用Docker过程中往往需要对Docker数据进行持久化或者在多个容器之间实现数据共享。

容器中对数据的管理主要有两种方式:

  • 数据卷(Data Volumes):直接将容器内的数据映射到本地主机
  • 数据卷容器(Data Volumes Containers):使用一个特定的容器统一管理维护数据卷

1.1 数据卷(Data Volumes)

数据卷是一个可供容器使用的特殊目录,它可以将本地主机操作系统文件目录直接映射进容器。

特性:

  • 可以在容器间共享及重用
  • 修改数据卷内的数据会马上生效
  • 修改数据卷不影响镜像
  • 数据卷会一直存在,直到未被使用时,可以手动的安全卸载

1.1.1 数据卷创建管理

使用volume子命令管理数据卷

docker volume create -d local VOLUME_NAME

在主机目录/var/lib/docker/volumes下创建数据卷

docker volume 同时支持inspect(查看详细信息),ls(列举已有数据卷),prune(清理未使用的数据卷),rm(删除数据卷)等。

1.1.2 绑定数据卷

创建容器时将主机本地的任意目录挂载到容器内的数据卷被称为绑定数据卷

在创建容器的时候使用--mount选项来使用数据卷,它支持三种类型的数据卷:

  • volume: 普通数据卷,同使用volume子命令创建的数据卷
  • bind: 绑定数据卷,可以指定主机和容器的映射目录
  • tmpfs: 临时数据卷,存在于内存中

创建一个容器,并创建一个指定类型的数据卷挂载到容器的指定目录

docker run --mount type=VOLUME_TYPE,source=SOURCE_DIR,destination=DEST_DIR CONTAINER[:VERSION]

若创建绑定数据卷挂载到容器,等同使用-v标记

docker run -v SOURCE_DIR:DEST_DIR CONTAINER[:VERSION]

1.1.3 数据卷容器

一个专门提供数据卷给其它容器挂载的容器

当需要在多个容器之间共享一些持续更新的数据时最简单的方式就是使用数据卷容器

  1. 创建数据卷容器ALIAS_A

    docker run -itd -v VOLUME --name ALIAS_A CONTAINER[:VERSION]

  2. 其它容器使用--volume-from挂载数据卷容器ALIAS_A中的数据卷

    docker run -itd --volume-from ALIAS_A --name ALIAS_B CONTAINER[:VERSION]

可以多次使用--volume-from选项来从多个容器中挂载数据卷

2.端口映射与容器互联

Docker不仅允许通过网络访问,还支持映射容器内的端口到本地的宿主机和通过互联机制实现多个容器间通过容器名快速访问。

2.1 端口映射

在创建容器时使用-P-p选项来指定容器的端口映射规则。

使用-P选项时,Docker会随机映射端口到内部容器开放的网络端口

docker run -itd -P CONTAINER[:VERSION]

使用-p选项指定需要映射的端口,一个端口只能绑定一个容器,可多次使用该选项

docker run -itd -p SOURCE_PORT:DEST_PORT CONTAINER[:VERSION]

使用docker port查看指定容器映射的端口配置

docker port CONTAINER PORT

2.2 容器互联机制

容器互联是一种让多个容器中的应用快速交互的方式,通过在源容器与目标容器之间建立连接关系,目标容器可以通过容器名快速访问到源容器

  1. 容器别名

    创建容器时使用--name选项为容器指定别名

    docker run -itd --name ALIAS CONTAINER[:VERSION]

  2. 容器互联

    创建容器时使用--link选项设置容器互联

    先创建数据库容器

    docker run -itd -P --name db CONTAINER

    创建web容器,并连接到数据库容器

    docker run -itd -P --name web --link db:db CONTAINER

    格式: --link name:alias

    name: 源容器的名称,alias: 别名

通过docker ps命令可以查看容器names信息确认源容器与目标容器建立互联

Docker是通过更新容器环境变量及/etc/hosts文件两种方式为容器公开连接信息,实现容器间的互联机制