Tag: 架构

如何将docker build的架构设置为arm64?

我有一个Dockerfile,我在amd64上运行,但是想在arm64上运行。 由于go build工具以GOARCH = arm64作为参数,所以我不需要任何其他交叉编译工具来制作二进制文件。 # Run the build FROM mojlighetsministeriet/go-polymer-faster-build ENV WORKDIR /go/src/github.com/mojlighetsministeriet/email COPY . $WORKDIR WORKDIR $WORKDIR RUN go get -t -v ./… RUN CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build # Create the final docker image FROM scratch COPY –from=0 /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt COPY –from=0 /go/src/github.com/mojlighetsministeriet/email/email / ENTRYPOINT ["/email"] 问题是生成的图像被标记为错误的架构amd64而不是arm64。 如何将一个parameter passing给docker build以便将架构设置为arm64? $ docker […]

智能堆栈+ Docker

我正在使用智能堆栈(来自airbnb)和Docker构build分布式服务云的概念validation项目。 我有3个服务: 一个用于构build应用程序的前端 一个用于用户login 一个用于域操作 前端应用程序显然使用其他两个服务。 我打算部署所有使用docker的3,并使用smartstack使分布式服务发现dynamic。 就我所了解的Docker而言,使用它的最好方法(如果不是唯一的话)是每个容器只运行一个进程。 智能堆栈build立了3个辅助进程(神经,突触,haproxy)在主服务运行在同一台机器。 所以,这里是我的问题:完全使用Docker和Smart Stack是否有意义? 如果是这样,人们怎么做呢? 4个进程在一个Docker容器? 什么是这种架构的最佳devise模式?

多个独立的mariadb用法:多个容器或一个? 隔离与效率?

我有一个build筑问题。 假设我们有一个有多个子系统的系统: A , B等等。 每个子系统都需要保存他们的数据,他们都使用MariaDB 。 子系统A可能需要一个名为a_db的database (如在create database … ) 而子系统B可能需要一个名为b_db的数据库。 而且, A和B之间没有数据共享 在微服务和docker之前的一个单一的世界中,通常要build立一个中心MariaDB实例,并要求每个子系统使用它,并在共享实例上使用自己的 database (也就是说, A使用a_db , B使用b_db等) 使用docker,我想我们也可以运行多个mariadb容器,并且每个都映射他们自己的卷用于存储(例如分别为/data/mdb_a和/data/mdb_b )。 A和B之间完全隔离是一个明显的优势。 A会不小心混淆了B的数据。 而且这两个子系统可以独立selectclosures/重新启动他们自己的MariaDB容器,甚至升级他们的MariaDB二进制文件。 另一方面,我的一些同事认为,运行多个MariaDB容器效率不高,这种方法会浪费资源。 他们的良好实证测量和文章是否讨论了两种方法之间的权衡?

如何访问我的kubernetes集群外的MySQL?

我在我的centos机器上运行一个kubernetes集群。 我不想为mysql创build一个窗格。 MySQL被安装在同一networking中的另一台机器上(机器不在kubernates专用networking中)。 我如何从运行在kubernetes集群中的pod访问mysql服务? 我已经尝试过以下configuration的服务和终点。 但是,没有运气。 apiVersion: v1 kind: Service metadata: name: database spec: ports: – port: 13080 targetPort: 13080 protocol: TCP — kind: Deployment apiVersion: v1 metadata: name: database subsets: – addresses: – ip: XX.XX.XX.XX ports: – port: 13080 — kind: ReplicationController metadata: name: test spec: replicas: 1 selector: app: test template: metadata: name: […]

大使在分布式系统中的概念是什么?

有人能够简单地向我解释集体计算大使的架构概念吗? 在微服务架构模式中实现它有什么好处? 我最近一直在研究docker和docker群,而且我已经看到这个术语在不同的文章或回购中被重复提及。 例如,在这个惊人的项目中 ,他们有一个名为docker-ambasssador的仓库 。 或者这个其他项目叫做ctlc-docker-ambassador 。

在一个拥有多个系统架构的群体上运行docker服务

我想用我的笔记本电脑(x86_64)和我的Raspberry Pis(armhf)集群testing我的分布式algorithm,使用新的docker swarm模式 。 经过一堆configuration后,我可以成功创build由一个pipe理器节点(笔记本电脑)和N + 1个工作节点(N个rasps,加上我的笔记本电脑)组成的群集群。 看起来像这样: laptop$ docker swarm init –advertise-addr 192.168.10.1 raspi1$ docker swarm join –token <TOKEN> 192.168.10.1:2377 # […] raspiN$ docker swarm join –token <TOKEN> 192.168.10.1:2377 现在,我为我的项目构build了两个图像:一个是x86_64( my_project:x86_64 ),另一个是armhf( my_project:armhf )。 我真的很喜欢这种新的群体模式下的节点/服务体系结构,因为创buildM(准)独立节点正是我想要的,但是如何使用docker service create …命令将正确的映像赋予正确的节点? 从我所看到的, docker service create只以一个图像为参数! 我在这里看到 ,我可以为每个节点分配一个标签,并要求服务只使用具有此特定标签的节点,但这不是我想要的。 我最终将pipe理两个任务集合,按体系结构分割,这会破坏我利用群体模式的调度程序和调度程序的愿望。 我是一个可悲的怪胎,他的追求便携性,这就是我! PS:注意,这个标签是“docker群模式”,而不是“docker群”,因为docker群和docker群模式是两码事。

如何在基于Docker的微服务中pipe理每个环境的数据?

在微服务体系结构中,我很难掌握如何pipe理环境特定的configuration(例如数据库或消息代理的IP地址和凭证)。 假设您有三个微服务(“A”,“B”和“C”),每个微服务由不同的团队拥有和维护。 每个团队都需要一个团队集成环境…他们在哪里使用他们的微服务的最新快照,以及所有依赖微服务的稳定版本。 当然,你也需要QA /分期/生产环境。 大图的简化视图如下所示: “微服务A”团队环境 微服务A( SNAPSHOT ) 微服务B(STABLE) 微服务C(STABLE) “微服务B”团队环境 微服务A(STABLE) 微服务B( SNAPSHOT ) 微服务C(STABLE) “微服务C”团队环境 微服务A(STABLE) 微服务B(STABLE) 微服务C( SNAPSHOT ) 质量保证/分期/生产 微服务A(稳定,发布等) 微服务B(稳定,发布等) 微服务C(STABLE,RELEASE等) 这是很多的部署,但是这个问题可以通过持续集成服务器来解决,也许可以像Chef / Puppet /等等。 真正困难的部分是每个微服务都需要一些特定的环境数据给每个被部署的地方。 例如,在“A”团队环境中,“A”需要一个地址和一组证书来与“B”交互。 但是,在“B”团队环境中,“A”的部署需要不同的地址和凭证来与“B”的部署进行交互。 而且,当你接近生产时,像这样的环境configuration信息可能需要安全限制(即只有某些人可以修改甚至查看它)。 那么,在微服务体系结构中,如何维护特定于环境的configuration信息并将其提供给应用程序呢? 一些方法浮现在脑海中,尽pipe它们都有问题: 让构build服务器在构build时把它们烧到应用程序中 – 我想你可以创build一个每个环境属性文件或脚本的回购,并且为每个微服务的构build过程伸出并拉入适当的脚本(你也可以有一个单独的,限制访问回购生产的东西)。 不过,你需要大量的脚本。 对于微服务可以部署的每个地方的每一个微服务,基本上都是单独的。 将它们烘焙到每个环境的基础Docker镜像中 – 如果构build服务器将微服务应用程序放入Docker容器中作为构build过程的最后一步,则可以为每个环境创build自定义基础镜像。 基本映像将包含一个shell脚本,用于设置所有您需要的环境variables。 您的Dockerfile将被设置为在启动您的应用程序之前调用此脚本。 这与之前的要点也有类似的挑战,因为现在你正在pipe理大量的Docker镜像。 在运行时从某种registry中提取环境信息 – 最后,可以将你的每个环境configuration存储在Apache ZooKeeper(甚至只是一个普通的数据库)中,然后让你的应用程序代码在运行时将其拉入它启动。 每个微服务应用程序都需要知道它在哪个环境(例如启动参数),以便知道从registry中获取哪一组variables。 这种方法的优点是,现在您可以使用完全相同的构build工件(即应用程序或Docker容器)从团队环境一直到生产。 […]

Docker多应用程序服务器关于数据库的体系结构

我有一个运行5或6个小Rails应用程序的服务器。 他们所有的附加文件都在S3上,他们都使用MySQL作为数据库。 每个应用程序都有自己的用户,并运行一些thins。 有一个nginx服务器负责平衡和域路由。 我打算用一个Docker安装来replace这个服务器:一个服务器每个应用都有一个容器,前面有一个nginx。 我的问题是:你会把数据库的一部分? 我主要看到4种可能性: 1)每个应用程序容器中的一个Mysql服务器。 我认为这不是Docker的哲学。 这将要求每个容器的数据单独备份。 2)适用于所有应用程序的独特的MySQL容器。 3)主机Docker服务器上的标准MySQL安装。 4)一个单独的MySQL服务器的所有应用程序。 你会怎么做 ? PS:我知道Docker还没有准备好,我打算现在用它来升级,如果我对它满意的话,也可以切换。

在一个容器内(泊坞窗)宣布你的应用程序

我在周末在docker的IRC上问了这个问题,但是在我想通过这个答案之前,我不得不走开: 如果我有许多应用程序在容器中运行(现在让我们假设它们都运行在相同的物理硬件上,但情况并非如此),我希望每个应用程序都能够find每个应用程序其他自动。 使用某种registry(例如etcd或DNS-SD / Bonjour),您可以宣布您的服务和任何相关的详细信息,并让其他应用程序了解它们并相应地路由stream量。 这里的问题是,当一个应用程序可以知道它在一个容器内服务的主机名/端口时,它不一定是它可以访问的端口或地址。 有两点需要join的信息: 服务可以访问的地方; 从容器外可以进入 什么服务(版本号,服务types); 从容器内部可以进入 你会如何推荐我通过集装箱壁垒获取这些信息? 我可以通过TCP将Docker暴露给容器,所以应用程序可以查询它显示的位置,但这似乎违反了关注的分离。 我可以在我的容器中打开一个文件/端口,主机系统在启动一个容器以准备发布之后查询,但这有点像我将重新创buildWSDL。 任何想法或指导我应该如何解决这个问题?

产品版本控制微服务

我进入基于Docker的微服务架构,我有3个微服务,它们共同创build一个产品,例如“CRM系统”。 现在,我希望我的客户能够随时升级他的产品。 我有3个不同版本的微服务,哪一个客户应该看到? 我猜产品版本应该独立于微服务,因为复制一个微服务版本会让我陷入比没有任何版本更麻烦的地步。 那么是否有任何模式,想法来处理这种情况? 我唯一想到的就是有一个存储库,只要其中的一个微服务可以生产现成的包,就会有一个版本库。 不过,我现在有一个版本,我的产品所有者(PO)都不会知道这个版本。