无法理解Docker服务端口发布

无法理解Docker服务端口发布,docker,docker-swarm,docker-swarm-mode,Docker,Docker Swarm,Docker Swarm Mode,我需要你的帮助来了解我是否正确理解docker publishing的工作方式 我用Dockerfile创建了一个自定义图像。Dockerfile如下所示: FROM mcr.microsoft.com/dotnet/framework/wcf:4.8 COPY ./ . RUN "C:\assets\vc_redist.x64.exe" /quiet /install WORKDIR /ServicioOcr . RUN powershell -NoProfile -Command \

我需要你的帮助来了解我是否正确理解docker publishing的工作方式

我用Dockerfile创建了一个自定义图像。Dockerfile如下所示:

FROM mcr.microsoft.com/dotnet/framework/wcf:4.8
COPY ./ .
RUN "C:\assets\vc_redist.x64.exe" /quiet /install
WORKDIR /ServicioOcr .
RUN powershell -NoProfile -Command \    
Import-module IISAdministration; \    
New-IISSite -Name "ServicioOcr" -PhysicalPath C:\ServicioOcr -BindingInformation "*:1990:"; \ 
Add-WindowsFeature NET-WCF-HTTP-Activation45 
ENTRYPOINT ["C:\\KeepAlive.exe"]
EXPOSE 1990
然后,我运行一个容器来发布公开的端口,没有问题:

d96e49d67157        ocrserviceimage:v1   "C:\\ServiceMonitor.e"   3 hours ago         Up 2 hours          80/tcp, 808/tcp, 0.0.0.0:2019->1990/tcp   ocrservcont
然后,我创建了一个Docker服务,因此我可以使用以下命令拥有承载该服务的容器的多个副本:

docker service create --name=SWARM_OCR_SERVICE ocrserviceimage:v8 --publish 2020:1990
然后我让容器在服务中运行,因此我检查端口是否已正确发布,但没有正确发布

shkmfrrodg1a        SWARM_OCR_SERVICE.1       ocrserviceimage:v8   BAZ1573221          Running             Running 2 hours ago 
据我所知,Docker服务的工作方式如下:

  • Docker服务在其中创建指定数量的副本。每个副本 运行服务的独立实例
  • 容器内的服务应通过发布的 ip:端口
  • 请求被发送到已发布的ip:端口,然后被转发 到可以处理它的可用副本/容器
我的理解正确吗


提前感谢。

要确保服务端口已发布,请运行:

docker service inspect --format="{{json .Endpoint.Spec.Ports}}" [service_id]
  • Docker服务在其中创建指定数量的副本。每个副本运行一个单独的服务实例
对。不过我会换一种说法。Docker swarm创建指定数量的副本。复制副本的数量是docker swarm强制执行的理想状态

  • 容器内的服务应通过已发布的ip:端口提供
服务副本(单个容器)中的应用程序应通过已发布端口可用

  • 请求被发送到已发布的ip:端口,然后被转发到可以处理该请求的可用副本/容器
对。假设您在ip标识的机器上运行服务。发布端口后,某些http客户端可以通过ip:[已发布的\u端口]访问服务副本

Docker swarm使用将请求转发到每个服务副本,除非您需要它。如果您确实绕过了路由网格,那么您将只能使用每个主机vm的已发布端口运行一个服务副本。如果在发布服务端口时使用路由网格(默认),则在一个主机vm上可以有多个服务副本

要在工作运行中查看布线网格,请执行以下操作:

docker service create \
  --name my-web \
  --publish published=8080,target=80 \
  --replicas 2 \
  nginx
检查服务日志:
docker服务日志-f my web

然后尝试从两个不同的浏览器向
localhost:8080/[any_url]
发送多个请求,并检查上一步中的服务日志


您应该看到,由于路由网格,两个服务副本都在ip:[已发布的\u端口]上为您的请求提供服务。

要确保服务端口已发布,请运行:

docker service inspect --format="{{json .Endpoint.Spec.Ports}}" [service_id]
  • Docker服务在其中创建指定数量的副本。每个副本运行一个单独的服务实例
对。不过我会换一种说法。Docker swarm创建指定数量的副本。复制副本的数量是docker swarm强制执行的理想状态

  • 容器内的服务应通过已发布的ip:端口提供
服务副本(单个容器)中的应用程序应通过已发布端口可用

  • 请求被发送到已发布的ip:端口,然后被转发到可以处理该请求的可用副本/容器
对。假设您在ip标识的机器上运行服务。发布端口后,某些http客户端可以通过ip:[已发布的\u端口]访问服务副本

Docker swarm使用将请求转发到每个服务副本,除非您需要它。如果您确实绕过了路由网格,那么您将只能使用每个主机vm的已发布端口运行一个服务副本。如果在发布服务端口时使用路由网格(默认),则在一个主机vm上可以有多个服务副本

要在工作运行中查看布线网格,请执行以下操作:

docker service create \
  --name my-web \
  --publish published=8080,target=80 \
  --replicas 2 \
  nginx
检查服务日志:
docker服务日志-f my web

然后尝试从两个不同的浏览器向
localhost:8080/[any_url]
发送多个请求,并检查上一步中的服务日志

您应该看到,由于路由网格,这两个服务副本都在ip:[已发布的\u端口]上为您的请求提供服务