通常,应用程序开发人员(以 J2EE 为例)在设计应用程序时不会优先考虑与基础结构相关的问题。很难与传统的非可编程基础设施交互。传统的方法是构建一个 .war 文件,然后可以在应用程序服务器(如 JBoss)中运行该文件。Spring 等传统框架(新版 Spring Cloud 除外)都以此为前提。现在,如果有一个容错的、弹性的部署运行时可用,例如由 Kubernetes 提供,那么似乎以同样的方式编写业务应用程序会忽略运行时提供的诸如调度之类的功能。一个具体的问题:应用程序从运行时(即 Kubernetes、Mesos 等)API 中对话(并从中受益)是典型的吗?如果是这样,你能举出一个很好的例子吗?
我有一个应用程序,目前正在通过Docker Compose文件在单个主机上运行。容器通过RabbitMQ容器相互通信(因此它们都已链接)。该应用程序开始需要的资源比我的单个主机所能提供的更多,因此我认为Docker Swarm将是理想的选择,因为我应该能够通过相同的Compose文件在分布式节点上启动相同的容器集。
但是,似乎链接的容器被约束为驻留在同一节点上,因此在多个节点上设置Docker Swarm不会导致我要寻找的容器分发。
大使模式似乎是分离链接容器的推荐方法(通过在每个节点上为链接容器设置代理),但是我在docker-compose文件中使用它遇到了麻烦,因为我看到的示例显示了设置使用docker run设置每个节点,然后使用运行共享服务的节点的IP(在我的情况下为RMQ)设置环境变量,以告知客户端的大使容器将链接服务的数据路由到何处(如https:// docs.docker.com/engine/admin/ambassador_pattern_linking/)。如何将其转换为Compose文件,这样我就不需要知道服务将在其上运行的IP(因为Docker Swarm将在Compose文件完成后决定这一点)?
我是docker swarm模式的新手,如果我想了解我的swarm服务的更多详细信息,可以从命令行运行docker service ps“服务名”,也可以从docker rest运行“ / v2 / services / my-ngx”
[msreddy@swarmnode1 ~]$ docker service ps my-ngx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
voj7fllhnmqb my-ngx.1 nginx:latest swarmnode1 Running Running 26 minutes ago
但是它没有给我容器ID。我想从群服务中跟踪容器吗?
我正在尝试使用Terraform在AWS中构建Docker Swarm集群.我已经成功启动了一个Swarm管理器,但我正在尝试找出如何最好地将join键传递给worker(将在管理器之后创建).
我想要一些运行docker swarm join-token worker -q可以设置为Terraform变量的命令的方法.这样,工作人员可以使用remote_exec命令docker swarm join ${var.swarm_token} ${aws_instance.swarm-manager.private_ip}
我怎样才能做到这一点?
我的配置如下:
resource "aws_instance" "swarm-manager" {
ami = "${var.manager_ami}"
instance_type = "${var.manager_instance}"
tags = {
Name = "swarm-manager${count.index + 1}"
}
provisioner "remote-exec" {
inline = [
"sleep 30",
"docker swarm init --advertise-addr ${aws_instance.swarm-manager.private_ip}"
"docker swarm join-token worker -q" // This is the value I want to store as a variable/output/etc
]
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢
我们使用docker CE(最新)和docker composer版本3.我有一个.yml用于3个服务,但我想将grafana约束到swarm的主人.添加约束时,我得到
yaml:第32行:找不到预期的关键字脚本是这样的:
version: '3'
services:
influxdb:
image: "influxdb:latest"
volumes:
- /mount/set/influxdb:/var/lib/influxdb
ports:
- "5076:5076"
networks:
- production
kapacitor:
image: "kapacitor:latest"
environment:
KAPACITOR_HOSTNAME: kapacitor
KAPACITOR_INFLUXDB_0_URLS_0: http://influxdb:5086
volumes:
- /mount/set/kapacitor:/var/lib/kapacitor
ports:
- "9092:9092"
networks:
- production
grafana:
image: "grafana/grafana:latest"
ports:
- "7000:7000"
networks:
- production
deploy:
placement:
constraints: [node.role == manager]
volumes:
- /iSCSIDisk/grafana/grafana.ini:/etc/grafana/grafana.ini
- /iSCSIDisk/grafana/lib:/var/lib/grafana
environment:
GF_SECURITY_ADMIN_PASSWORD: secretsecret
networks:
production:
external: true
Run Code Online (Sandbox Code Playgroud)
我多次梳理脚本,找不到任何错误的原因,我可能会忽略一些东西,我检查了非空格等,找不到任何东西,我检查了其他文章有关同样的错误,我不知道似乎也有任何遗漏的括号或重复.非常感谢您的帮助,谢谢.:)
我正在尝试在 AWS 中设置一个 swarm 集群,但是主机中的容器无法访问互联网。用于地址解析或通过 IP 直接连接的 ping 命令在容器内部不起作用。
在创建这张票之前,我看过这个问题,但我认为在我的情况下没有 CIDR 重叠。
我有以下配置:
Public Subnet CIDR : 10.2.1.0/24
Namespace server inside this is :10.2.0.2
Ingress overlay network --> 10.255.0.0/16
docker_gwbridge --> 172.18.0.0/1
Run Code Online (Sandbox Code Playgroud)
我也尝试过创建新的覆盖 (192.168.1.0/24) 和 docker_gwbridge(10.11.0.0/16) 网络,但没有成功。
我正在使用这些选项创建服务(删除 mount 和 env 参数):
docker service create --publish 8098:8098 <Imagename>
Run Code Online (Sandbox Code Playgroud)
请注意,当我自己创建覆盖网络时,我也在create 命令中添加了选项--network my-overlay。
关于我可能遗漏/做错了什么的任何指示?
编辑 1 添加更多信息
下面是当我不创建新的覆盖网络并使用默认网络时对容器的检查:
"NetworkSettings": {
"Bridge": "",
"SandboxID": "eb***",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"5005/tcp": null,
"8080/tcp": null
},
"SandboxKey": …Run Code Online (Sandbox Code Playgroud) 我想做的事:
我已经在TLS验证设置为true的一台机器上运行dockerd。我想将此主机添加为计算机docker-machine
我做了什么:
我使用以下命令启动dockerd:
$ sudo dockerd -D --tls=true --tlscert=cert.pem --tlskey=key.pem -H tcp://172.19.48.247:2376
Run Code Online (Sandbox Code Playgroud)
在第二台计算机上,我获取了以下变量:
export DOCKER_HOST=tcp://172.19.48.247:2376
export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=/path/to/ssl
Run Code Online (Sandbox Code Playgroud)
并成功运行docker命令:
$ docker run busybox echo hello
hello
Run Code Online (Sandbox Code Playgroud)
然后我添加了这个主机docker-machine:
docker-machine create --driver none --url=tcp://172.19.48.247:2376 dockerhost
Run Code Online (Sandbox Code Playgroud)
我要去哪里了:
我现在x509: certificate signed by unknown authority出错了。
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS Unknown
dockerhost - none Running tcp://172.19.48.247:2376 Unknown Unable to query docker version: Get https://172.19.48.247:2376/v1.15/version: x509: certificate signed by unknown authority
Run Code Online (Sandbox Code Playgroud)
我尝试使用,docker-machine config但是不起作用: …
我正在使用 Visual Studio 2017 for MAC 运行 .netcore2.0 webapi。我有一个项目结构如下。
src
--Solution.sln
-- Common
-- commonPrj
-- Common.csproj
--Data
-- QM
-- QM.csproj
--Repo
--Repo.csproj
--Ser
-- Host
-- Api
--api.csproj
Run Code Online (Sandbox Code Playgroud)
我也有 DOCKERFILE 内容。这是在执行 dotnet 构建过程时抛出错误,因为构建代理无法解析 common.csproj/ 我认为我的 dockerfile 定义是错误的。有人可以协助完成这项工作吗[我在这里用 dockerfile 尝试了很多选项]>?
#FROM microsoft/aspnetcore-build:2.0 AS build-env
FROM microsoft/aspnetcore
# copy csproj and restore as distinct layers
#COPY *.csproj ./
#RUN dotnet restore
# copy everything else and build
#COPY . ./ ./ ./
#RUN dotnet restore
#RUN dotnet publish -c Release …Run Code Online (Sandbox Code Playgroud) Microsoft Orleans 框架提供了一种无需太多复杂性即可构建分布式、大规模系统的方法。
缩放对于奥尔良来说是很自然的;如果主机出现故障,则该主机上的活动谷物会在其他地方重新激活,因为它们的状态会保留在存储中。
考虑到这一点,Docker 等容器服务如何应用于生产中的 Orleans 应用程序?如果 Orleans 默认情况下已经可以扩展,为什么我们需要一个精心设计的容器服务来进行扩展?
我正在尝试跑步
docker-machine ssh myvm2 "docker swarm join --token SwMTKN-1-<cut> 192.168.161.163:2376"
Run Code Online (Sandbox Code Playgroud)
将mymv2作为工作器加入集群,但出现此错误
来自守护程序的错误响应:rpc错误:代码=不可用desc =所有子
连接都在TransientFailure中,最新的连接错误:连接错误:desc =“传输:身份验证握手失败:远程错误:tls:错误的证书”退出状态1
我正在通过以下网址学习Docker课程:https : //docs.docker.com/v17.09/get-started/part4/#create-a-cluster
docker-swarm ×10
docker ×9
.net-core ×1
c# ×1
dockerfile ×1
kubernetes ×1
mesos ×1
orleans ×1
spring-cloud ×1
terraform ×1