【问题标题】:Can containers share a framework?容器可以共享一个框架吗?
【发布时间】:2017-05-24 18:57:32
【问题描述】:

我知道 Docker 容器可以共享数据卷,但它们可以共享框架吗?例如,如果我有两个在 IIS 上运行的 .NET 服务,我可以在它们之间共享框架吗?

【问题讨论】:

    标签: .net iis docker containers microservices


    【解决方案1】:

    是的,你可以,你通常做的是

    备选方案 A:

    创建一个busybox图像并复制您的框架,将该位置公开为卷VOLUME /opt/framework/

    FROM alpine
    COPY framework /opt/framework
    VOLUME /opt/framework
    COPY busyscript.sh /usr/local/bin/busyscript
    RUN chmod +x /usr/local/bin/busyscript
    CMD ["busyscript"]
    

    虽然busyscript.sh 看起来像

    #!/bin/sh
    #set -x
    
    pid=0
    
    # SIGTERM-handler
    term_handler() {
      if [ $pid -ne 0 ]; then
        kill -SIGTERM "$pid"
        wait "$pid"
      fi
      exit 143; # 128 + 15 -- SIGTERM
    }
    
    # setup handlers
    # on callback, kill the last background process, which is `tail -f /dev/null` and execute the specified handler
    trap 'kill ${!}; term_handler' SIGTERM
    
    echo "Started code"
    # wait forever
    while true
    do
      tail -f /dev/null & wait ${!}
    done
    

    将此图像作为服务添加到您的 docker-compose.yml 中,例如“框架”,然后在您希望它们使用的服务上添加

    volume_from
      - framework:ro
    

    优点:

    • 您可以单独编译、构建和部署框架
    • 运行这个额外的容器几乎没有运行时开销

    缺点:

    • 图像大小开销(alpine,30mb)

    备选方案 B 您使用您的一项服务作为“框架基础”,比如说服务 A,这意味着您复制该服务上的框架(使用它的 2 个服务之一)并再次使用 VOLUME /opt/framework 将其公开为卷

    在服务 B 中,以同样的方式挂载卷

    serviceB:
      volume_from
        - serviceA:ro
    

    专业版:

    • 没有额外的容器

    缺点:

    • 框架需要与 serviceA 一起部署,无论 service A 是否需要更新
      • 您对 A 有依赖,A 是否需要更新,所有其他容器由于共享需要重新创建

    【讨论】:

    • 太棒了!谢谢
    猜你喜欢
    • 2011-08-27
    • 2016-06-21
    • 2019-12-03
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 2015-08-24
    • 2019-06-13
    相关资源
    最近更新 更多