容器可以共享一个框架吗?

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

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

备选schemeA:

创build一个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 

优点:

  • 你可以编译,构build和部署framworks soley
  • 运行这个额外的容器或多或less没有运行时间的开销

缺点:

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

selectB你可以使用你的服务之一作为“框架基础”,可以说服务A,这意味着你在该服务上复制框架(其中一个使用它),并再次使用VOLUME /opt/framework来将其作为卷

在服务B中,以相同的方式安装卷

 serviceB: volume_from - serviceA:ro 

优点:

  • 没有额外的容器

缺点:

  • 框架需要与serviceA一起部署,无论服务A需要更新
    • 你有一个对A的依赖,A是否需要更新,所有其他的容器需要重新创build,由于共享