非常教程

Docker 17参考手册

撰写 | Compose

Compose网络 | Networking in Compose

注意:只有在使用 Compose 文件格式的版本2或更高版本时,本文才适用。网络功能不支持版本1(传统)撰写文件。

默认情况下,组合设置一个网络你的应用程序。服务的每个容器都加入了默认网络,并且两者都是。可达网络上的其他容器,以及可发现由它们在主机名上与容器名称相同。

:您的应用程序的网络是根据“项目名称”命名的,该名称基于它所在的目录的名称。可以使用--project-name标志或者COMPOSE_PROJECT_NAME环境变量。

例如,假设应用程序位于一个名为myapp,而你的docker-compose.yml看起来是这样的:

version: "3"
services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres
    ports:
      - "8001:5432"

当运行docker-compose up的时候,发生如下情况:

  • myapp_default被创造了。
  • 容器是使用web的配置。它加入了网络myapp_default以这个名字web
  • 容器是使用db的配置。它加入了网络myapp_default以这个名字db

每个容器现在都可以查找主机名。webdb并获取适当容器的 IP 地址。例如,web的应用程序代码可以连接到 URL postgres://db:5432然后开始使用 Postgres 数据库。

注意区分HOST_PORT和区分是重要的CONTAINER_PORT。在上面的例子中,db中,HOST_PORT8001和容器端口是5432(postgres的默认值)。网络服务对服务通信使用CONTAINER_PORT。何时HOST_PORT被定义,该服务也可以在群外访问。

web容器,连接字符串到db看起来就像postgres://db:5432,从主机上看,连接字符串看起来像postgres://{DOCKER_IP}:8001...

更新容器

如果对服务进行配置更改并运行docker-compose up要更新它,旧容器将被删除,新容器将以不同的 IP 地址加入网络,但名称相同。正在运行的容器将能够查找该名称并连接到新地址,但旧地址将停止工作。

如果任何容器与旧容器有连接,则它们将被关闭。容器的责任是检测此状态,再次查找名称并重新连接。

链接

链接允许您定义额外的别名,通过它可以从另一个服务访问服务。他们不需要启用服务进行通信 - 默认情况下,任何服务都可以以该服务的名称到达任何其他服务。在以下示例中,db可以从web主机名db和以下位置访问database

version: "3"
services:
  
  web:
    build: .
    links:
      - "db:database"
  db:
    image: postgres

见链接参考想了解更多信息。

多主机联网

注意:本节中的指示信息涉及传统的 Docker Swarm 操作,并且仅在针对传统 Swarm 集群时才起作用。有关将撰写项目部署到较新的集成群模式的说明,请参阅 Docker Stacks 文档。

何时将组合应用程序部署到群集集群,您可以使用内置的overlay驱动程序,以启用容器之间的多主机通信,而不更改组合文件或应用程序代码。

请参阅多主机网络入门以了解如何设置 Swarm 群集。群集将overlay默认使用该驱动程序,但如果您愿意,您可以明确指定它 - 请参阅下文了解如何执行此操作。

指定自定义网络

您可以使用顶级networks密钥指定您自己的网络,而不只是使用默认的应用程序网络。这使您可以创建更复杂的拓扑并指定自定义网络驱动程序和选项。您还可以使用它将服务连接到不受 Compose 管理的外部创建的网络。

每项服务都可以使用服务级别 networks密钥来指定要连接的网络,服务级别密钥是顶级 networks密钥下引用条目的名称列表。

以下是定义两个自定义网络的示例撰写文件。proxy服务与服务是隔离的db,因为它们不共享共享的网络 - app只能与两者通话。

version: "3"
services:
  
  proxy:
    build: ./proxy
    networks:
      - frontend
  app:
    build: ./app
    networks:
      - frontend
      - backend
  db:
    image: postgres
    networks:
      - backend

networks:
  frontend:
    # Use a custom driver
    driver: custom-driver-1
  backend:
    # Use a custom driver which takes special options
    driver: custom-driver-2
    driver_opts:
      foo: "1"
      bar: "2"

可以通过为每个连接的网络设置 ipv4_address 和/或 ipv6_address 来为网络配置静态 IP 地址。

有关可用网络配置选项的详细信息,请参阅下列参考资料:

  • 顶层networks
  • 服务级networks

配置默认网络

除了指定您自己的网络外,您还可以通过在networks名称下定义条目来更改应用程序范围的默认网络的设置default

version: "3"
services:

  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres

networks:
  default:
    # Use a custom driver
    driver: custom-driver-1

使用预先存在的网络

如果希望容器加入现有网络,请使用external期权*

networks:
  default:
    external:
      name: my-pre-existing-network

而不是试图创建一个名为[projectname]_default,将寻找一个名为my-pre-existing-network并将应用程序的容器连接到它。

documentation, docs, docker, compose, orchestration, containers, networking

撰写 | Compose相关

1.关于版本和升级 | About versions and upgrading (Compose)
2.ASP.NET Core + SQL Server on Linux (Compose)
3.CLI环境变量 | CLI environment variables (Compose)
4.命令行完成 | Command-line completion (Compose)
5.组成 | Compose
6.组合命令行参考 | Compose command-line reference
7.控制启动顺序 | Control startup order (Compose)
8.Django and PostgreSQL (Compose)
9.Docker堆栈和分布式应用程序包 | Docker stacks and distributed application bundles (Compose)
10.docker-compose构建 | docker-compose build
11.docker-compose 束 | docker-compose bundle
12.docker-compose配置 | docker-compose config
13.docker-compose创建 | docker-compose create
14.docker-compose down
15.docker-compose事件 | docker-compose events
16.docker-compose exec
17.docker-compose助手 | docker-compose help
18.docker-compose图像 | docker-compose images
19.docker-compose kill
20.docker-compose logs
21.docker-compose暂停 | docker-compose pause
22.docker-compose port
23.docker-compose ps
24.docker-compose pull
25.docker-compose push
26.docker-compose重启 | docker-compose restart
27.docker-compose rm
28.docker-compose运行 | docker-compose run
29.docker-compose 规模 | docker-compose scale
30.docker-compose开始 | docker-compose start
31.docker-compose结束 | docker-compose stop
32.docker-compose顶部 | docker-compose top
33.docker-compose 取消暂停 | docker-compose unpause
34.docker-compose up
35.环境文件 | Environment file (Compose)
36.Compose中的环境变量 | Environment variables in Compose
37.Compose中的扩展服务 | Extend services in Compose
38.常见问题 | Frequently asked questions (Compose)
39.开始 | Getting started (Compose)
40.安装Compose | Install Compose
41.链接环境变量(不建议使用) | Link environment variables (deprecated) (Compose)
42.Docker Compose总览 | Overview of Docker Compose
43. docker-compose CLI总览 | Overview of docker-compose CLI
44.快速开始:Compose和WordPress | Quickstart: Compose and WordPress
45.Rails and PostgreSQL (Compose)
46.Compose的简单应用 | Sample apps with Compose
47.Compose在产品中的使用 | Using Compose in production
48.Using Compose with Swarm
49.版本1 | Version 1 (Compose)
50.版本2 | Version 2 (Compose)
51.版本3 | Version 3 (Compose)
Docker 17

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

主页 https://docker.com/
源码 https://github.com/docker/docker
版本 17
发布版本 17.06