• Docker


    前言

    经过之前一段时间学习与思考,我们已经大概明确了一些感念: Docker image/container,  service and node

    简单来说,swarm允许我们以节点(node)的方式组织集群(cluster);每个节点上面可以部署一个或者多个服务(service);每个服务又可以包括一个或者多个(container)

    在此,我放上Docker官方网站的结构图,方便理解。

     创建网络

    在部署服务之前,我们首先需要创建网络。Docker 提供了不同的方式供我们创建不同形式的网络。在这里,我们创建 overlay 模式的网络

    $ docker network create --driver overlay

      --subnet 10.0.0.1/24

      --opt encrypted

      mynetwork

    -- driver 指定网络方式

    -- subset 指定用于网络的子网, 如果不指定,swarm会自动选择一个子网,但是根据官网的描述这个自动指定的子网这个可能会引起container通信的问题。(before kelner 3.10)

    -- opt 指定网络安全模式

    创建网络完成后,我们可以查看到我们的网络

    $ docker network ls

    PS : 在这里贴一下官网对于network的描述,有兴趣的童鞋可以看一下

    Docker Engine swarm mode natively supports overlay networks, so you can enable container-to-container networks. When you use swarm mode, you don’t need an external key-value store. Features of swarm mode overlay networks include the following:

    • You can attach multiple services to the same network.
    • By default, service discovery assigns a virtual IP address (VIP) and DNS entry to each service in the swarm, making it available by its service name to containers on the same network.
    • You can configure the service to use DNS round-robin instead of a VIP.

    In order to use overlay networks in the swarm, you need to have the following ports open between the swarm nodes before you enable swarm mode:

    • Port 7946 TCP/UDP for container network discovery.
    • Port 4789 UDP for the container overlay network.

    在指定网络上添加服务

    $ docker service create

      --name mybusybox

      --network mynetwork

      busybox

      sleep 3000

    添加一个名称为mybusybox的service,这个 service 将启动找到对应的 image (如果没有会自动下载) 并且启动 container. 完成后我们可以看到 service 的信息

    $ docker service ps mybusybox

    再添加一个同类型的 service, 命名为tuobusybox, 在这里添加两个service是为了演示之后的夸 container 相互访问,实际情况下,应根据我们的业务需求添加 service

    现在我们再查看network 信息

    $docker network inspect mynetwork

    这里可以看到,我们的网络“mynetwork” 下面运行着两个service

    容器间通信

    到这里为止,我们的 service 以及 container 已经已经创建完成。现在我们来测试下container之间的通信。

    启动一个service 并且进入容器, 我这里是 mybusybox

    $ docker exec -it mybusybox.1.cj3y6wgt6rry6pxei9utjufpo /bin/sh

    在容器内查看另一个容器, tuobusybox

    可以看到,能够使用DNS查询到 tuobusybox 服务 (service)

    在mybusybox container 里面,使用 tasks.SERVICE-NAME 来查看指点 service 中所有 container 的 IP

    $ nslookup tasks.tuobusybox

    由于我们只启动了一个container, 所以只返回了一个IP。

    OK,我们已经完成了在自己的网络下运行多个服务(容器),并且验证了容器之间的网络链接 :)

  • 相关阅读:
    Retrofit2.0+OkHttp设置统一的请求头(request headers)
    Retrofit、Okhttp使用小记(cookie,accesstoken,POST
    quartz持久化部署实现
    支付宝支付-常用支付API详解(查询、退款、提现等)
    支付宝支付-提现到个人支付宝
    Git 版本还原命令
    CEF JS实现获取剪贴板图片的DataURL
    CEF 自定义用户协议(scheme)实现以二进制流的方式显示图片、视频、音频
    CEF C++调用前端js方法展示传递过来的图片数据
    C++读写图片数据转成Base64格式
  • 原文地址:https://www.cnblogs.com/atuotuo/p/6269270.html
Copyright © 2020-2023  润新知