容器可以共享一个框架吗?
Can containers share a framework?
我知道 Docker 容器可以共享一个数据卷,但是它们可以共享框架吗?例如,如果我在 IIS 上有两个 .NET 服务 运行,我可以只在它们之间共享框架吗?
可以,你通常做的是
选项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 中,让我们说 "framework",然后,在您希望他们使用的服务上,添加
volume_from
- framework:ro
优点:
- 您可以单独编译、构建和部署 framworks
- 运行 这个额外的容器
或多或少没有运行时开销
缺点:
- 图像大小开销(高山,30mb)
备选方案 B
您将其中一项服务用作 "framework base",比方说服务 A,这意味着您复制该服务上的框架(使用它的 2 个服务之一)并再次使用 VOLUME /opt/framework
将其公开为卷
在服务B中,同理,挂载volume
serviceB:
volume_from
- serviceA:ro
亲:
- 没有额外的容器
缺点:
- framework 需要和 serviceA 一起部署,无论 service A 是否需要更新
- 您对 A 有依赖性,A 是否需要更新,由于共享需要重新创建所有其他容器
我知道 Docker 容器可以共享一个数据卷,但是它们可以共享框架吗?例如,如果我在 IIS 上有两个 .NET 服务 运行,我可以只在它们之间共享框架吗?
可以,你通常做的是
选项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 中,让我们说 "framework",然后,在您希望他们使用的服务上,添加
volume_from
- framework:ro
优点:
- 您可以单独编译、构建和部署 framworks
- 运行 这个额外的容器 或多或少没有运行时开销
缺点:
- 图像大小开销(高山,30mb)
备选方案 B
您将其中一项服务用作 "framework base",比方说服务 A,这意味着您复制该服务上的框架(使用它的 2 个服务之一)并再次使用 VOLUME /opt/framework
将其公开为卷
在服务B中,同理,挂载volume
serviceB:
volume_from
- serviceA:ro
亲:
- 没有额外的容器
缺点:
- framework 需要和 serviceA 一起部署,无论 service A 是否需要更新
- 您对 A 有依赖性,A 是否需要更新,由于共享需要重新创建所有其他容器