Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 容器可以共享一个框架吗?_.net_Iis_Docker_Containers_Microservices - Fatal编程技术网

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

.net 容器可以共享一个框架吗?,.net,iis,docker,containers,microservices,.net,Iis,Docker,Containers,Microservices,我知道Docker容器可以共享数据卷,但它们是否可以共享框架?例如,如果我有两个.NET服务在IIS上运行,我可以在它们之间共享框架吗 是的,你可以,你通常做的是 备选方案A: 创建busybox映像并复制框架,将该位置作为卷公开volume/opt/framework/ FROM alpine COPY framework /opt/framework VOLUME /opt/framework COPY busyscript.sh /usr/local/bin/busyscript RUN

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

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

备选方案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中将此图像作为服务添加到您的docker-compose.yml中,比如说“framework”,然后在您希望他们使用的服务上添加

volume_from
  - framework:ro
优点:

  • 您可以编译、构建和部署framworks soley
  • 运行这个额外的容器或多或少没有运行时开销
反对:

  • 头顶图像大小(阿尔卑斯山,30mb)
备选方案B 您使用一个服务作为“框架基础”,比如说服务A,这意味着您在该服务上复制框架(使用它的两个服务之一),并且再次使用
VOLUME/opt/framework
将其作为卷公开

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

serviceB:
  volume_from
    - serviceA:ro
赞成者:

  • 没有额外的容器
反对:

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

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

      备选方案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中将此图像作为服务添加到您的docker-compose.yml中,比如说“framework”,然后在您希望他们使用的服务上添加

      volume_from
        - framework:ro
      
      优点:

      • 您可以编译、构建和部署framworks soley
      • 运行这个额外的容器或多或少没有运行时开销
      反对:

      • 头顶图像大小(阿尔卑斯山,30mb)
      备选方案B 您使用一个服务作为“框架基础”,比如说服务A,这意味着您在该服务上复制框架(使用它的两个服务之一),并且再次使用
      VOLUME/opt/framework
      将其作为卷公开

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

      serviceB:
        volume_from
          - serviceA:ro
      
      赞成者:

      • 没有额外的容器
      反对:

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

      太棒了!谢谢!谢谢