docker多个容器一起打包_如何链接多个Docker容器并封装结果?

在另一个容器中运行容器意味着在Docker容器中运行Docker引擎.这被称为Docker-in-Docker的dind,我强烈反对它.你可以在线搜索’dind’并发现为什么在大多数情况下这是一个坏主意,但由于它不是你问题的主要对象,我不会进一步扩展这个主题.

在同一容器中运行node.js进程和neo4j进程

虽然大多数人会告诉你不要在Docker容器中运行多个进程,但没有什么能阻止你这样做.如果您想要遵循此路径,请查看Docker文档网站上的Using Supervisor with Docker或Phusion baseimage Docker镜像.

请注意,这种做事方式会使Docker镜像越来越难以维护.

链接容器

正如您所发现的那样,保持Docker图像尽可能简单(即:在Docker容器中运行一个且只有一个应用程序)将使您的生活更加轻松.

当两个容器在同一个Docker引擎上运行时,将容器链接在一起是微不足道的.这只是一个问题:

>让你的neo4j容器expose服务器监听它的端口

>使用–link< neo4j容器名称>运行node.js容器:< alias>选项

>在node.js应用程序配置中,将neo4j主机设置为< alias> hostname,docker将负责将该连接转发到它分配给neo4j容器的IP

如果要在不同的主机上运行这两个容器,事情会变得更加困难.

使用Docker Compose,您必须使用link:键来定义链接

新的Docker网络功能

您还发现将来不再支持链接容器,并且使多个Docker容器进行通信的新方法是创建虚拟网络并将这两个容器附加到该网络.

以下是如何继续:

docker network create mynet

docker run --detach --name myneo4j --net mynet neo4j

docker run --detach --name mynodejs --net mynet

然后,您的节点应用程序配置应使用myneo4??j作为要连接的主机.

要告诉Docker Compose使用新的网络功能,您必须使用--x-networking选项.你也不会使用链接:key.

使用新的网络功能还意味着您将无法为db定义任何别名.因此,您必须使用容器名称.请注意,除非您在docker-compose.yml文件中使用container_name:密钥,否则Compose将根据包含docker-compose.yml文件的目录,yml文件中的服务名称和编号创建容器名称.

例如,以下docker-compose.yml文件,如果在名为“foo”的目录中,将创建两个名为foo_web_1和foo_db_1的容器:

web:

build: .

ports:

- "8000:8000"

db:

image: postgres

当使用docker-compose –x-networking启动时,Web应用程序配置应该使用foo_db_1作为db主机名.

如果您使用container_name:

web:

build: .

ports:

- "8000:8000"

db:

image: postgres

container_name: mydb

当使用docker-compose -x-networking启动时,Web应用程序配置应该使用mydb作为db主机名.

使用Docker Compose使用nodeJS和neo4j运行Web应用程序的示例

该项目将使用2个docker容器,一个用于运行neo4j数据库,另一个用于运行nodeJS Web应用程序.

Docker化Web应用程序

我们需要构建一个Docker镜像,Docker将从该镜像中运行一个容器.为此,我们将编写一个Dockerfile.

使用以下内容创建名为Dockerfile(介于大写D)的文件:

FROM node

RUN git clone https://github.com/aseemk/node-neo4j-template.git

WORKDIR /node-neo4j-template

RUN npm install

# ugly 20s sleep to wait for neo4j to initialize

CMD sleep 20s && node app.js

这个Dockerfile描述了Docker引擎为我们的Web应用程序构建docker镜像必须遵循的步骤.此泊坞窗图像将:

>基于official node docker image

>从Github克隆nodeJS示例项目

>将工作目录更改为包含git clone的目录

>运行npm install命令以下载并安装nodeJS应用程序依赖项

>指示docker在运行该映像的容器时使用哪个命令

对nodeJS代码的快速回顾表明,作者允许我们使用NEO4J_URL环境变量配置要用于connect to the neo4j database的URL.

Docker化neo4j数据库

好吧,人们已经为我们照顾好了.我们将使用可以在Docker Hub上找到的official Docker image for neo4j.

快速阅读自述文件告诉我们使用NEO4J_AUTH环境变量来更改neo4j密码.将此变量设置为none将同时禁用身份验证.

设置Docker Compose

在与包含Dockerfile的目录相同的目录中,使用以下内容创建docker-compose.yml文件:

db:

container_name: my-neo4j-db

image: neo4j

environment:

NEO4J_AUTH: none

web:

build: .

environment:

NEO4J_URL: http://my-neo4j-db:7474

ports:

- 80:3000

此Compose配置文件描述了2个服务:db和web.

db服务将从官方neo4j docker映像生成一个名为my-neo4j-db的容器,并将启动该容器,将NEO4J_AUTH环境变量设置为none.

Web服务将使用从当前目录(build:.)中找到的Dockerfile构建的docker镜像生成一个以docker命名的容器.它将启动该容器,将环境变量NEO4J_URL设置为http:// my-neo4j-db:7474(注意我们如何在这里使用neo4j容器my-neo4j-db的名称).此外,docker compose将指示Docker引擎在docker主机端口80上公开Web容器的端口3000.

解雇它

确保您位于包含docker-compose.yml文件的目录中,并键入:docker-compose –x-networking up.

Docker compose将读取docker-compose.yml文件,弄清楚它必须首先为Web服务构建一个docker镜像,然后创建并启动两个容器,最后将为您提供来自两个容器的日志.

一旦日志显示web_1 |快速服务器监听:http:// localhost:3000 /,一切都已熟,您可以将您的Internet导航器指向http://< ip of docker host> /.

要停止应用程序,请按Ctrl C.

如果您想在后台启动应用程序,请使用docker-compose –x-networking up -d.然后,为了显示日志,请运行docker-compose logs.

停止服务:docker-compose stop

删除容器:docker-compose rm

使neo4j存储持久化

官方的neo4j docker image自述文件说容器将数据保存在/ data的卷上.然后,我们需要指示Docker Compose将该卷挂载到docker主机上的目录.

使用以下内容更改docker-compose.yml文件:

db:

container_name: my-neo4j-db

image: neo4j

environment:

NEO4J_AUTH: none

volumes:

- ./neo4j-data:/data

web:

build: .

environment:

NEO4J_URL: http://my-neo4j-db:7474

ports:

- 80:3000

使用该配置文件,当您运行docker-compose –x-networking时,docker compose将创建一个neo4j-data目录并将其安装到位置/数据的容器中.

启动应用程序的第二个实例

创建一个新目录并复制Dockerfile和docker-compose.yml文件.

然后,我们需要编辑docker-compose.yml文件,以避免neo4j容器的名称冲突和docker主机上的端口冲突.

将其内容更改为:

db:

container_name: my-neo4j-db2

image: neo4j

environment:

NEO4J_AUTH: none

volumes:

- ./neo4j-data:/data

web:

build: .

environment:

NEO4J_URL: http://my-neo4j-db2:7474

ports:

- 81:3000

现在它已准备好使用docker-compose –x-networking up命令.请注意,您必须位于具有该新docker-compose.yml文件的目录中才能启动第二个实例.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】2.2【MySQL】运行原理(二):InnoDB 内存结构、磁盘结构及update sql执行过程分析

前一篇讲完了查询流程&#xff0c;我们是不是再讲讲更新流程、插入流程和删除流程&#xff1f;在数据库里面&#xff0c;我们说的update操作其实包括了更新、插入和删除。如果大家有看过MyBatis的源码&#xff0c;应该知道Executor里面也只有doQuery()和doUpdate()的方法&#…

单片机ch2o程序_基于单片机的室内甲醛浓度检测系统

基于单片机的室内甲醛浓度检测系统田秀荣【期刊名称】《山西电子技术》【年(卷),期】2014(000)003【摘要】Aseveryoneknows,theharmfulgasremainedbyhousedecorationandinferiorfurnitureismainlyformaldehydewhichhasgreat harm to human body health , many diseases is rele…

【转】MySQL中select * for update锁表的问题

MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock&#xff0c;所以只有「明确」的指定主键&#xff0c;MySQL才会执行Row lock (只锁住被选取的资料例) &#xff0c;否则MySQL将会执行Table Lock (将整个资料表单给锁住)。 举个例子: 假设有个表单produc…

apqp过程流程图范本_APQP项目资料清单excel格式(全套)

APQP项目开发全套资料明细表设施要求新增刀具验收报告 量具、试验装备 要求 量具试验装备清单 新增量具试验装备计划技术/生产 技术/质保 采购▲ ★ ▲ ▲2.162.17项目组 新设备、工装和 A-3新设备、工装、刀具和试验 试验装置评审 装置检查清单 财务/技术2.18 新产品成本预算 …

【转】2.3【MySQL】运行原理(三)InnoDB 逻辑存储结构

MySQL的存储结构分为5级&#xff1a;表空间、段、簇、页、行。 1.表空间 TableSpace 上篇【MySQL】从InnoDB的内存结构、磁盘结构到update sql执行过程分析 在磁盘结构部分就说过了&#xff0c;表空间可以看做是InnoDB 存储引擎逻辑结构的最高层&#xff0c;所有的数据都存放在…

layui templet格式化_layui数据表格日期如何格式化成2012-12-30这样的?

test学生评优评先系统学生信息管理学生信息查询学生信息添加注册登录查看编辑删除$(function () {layui.use("table", function () {var $table layui.table;//第一个实例$table.render({elem: #stu,height: 300,//数据接口,url: /stu/student/getAllClazz,//开启分…

【转】【MySQL】运行原理(四):重做日志(redo log),回滚日志(undo log),二进制日志(binlog)

MySQL中有六种日志文件&#xff0c;分别是&#xff1a;重做日志&#xff08;redo log&#xff09;、回滚日志&#xff08;undo log&#xff09;、二进制日志&#xff08;binlog&#xff09;、错误日志&#xff08;errorlog&#xff09;、慢查询日志&#xff08;slow query log&…

python 读中文乱码_python字符乱码的解决小结

引言无论学习什么程序语言&#xff0c;字符串这种数据类型总是着有非常重要。然而最近在学习python这门语言&#xff0c;想要显示中文&#xff0c;总是出现各种乱码。于是在网上查了很多资料&#xff0c;各说纷纭&#xff0c;我也尝试了许多的方法&#xff0c;有时候可以正常显…

【转】关于国密算法 SM1,SM2,SM3,SM4 的笔记

国密即国家密码局认定的国产密码算法。主要有SM1&#xff0c;SM2&#xff0c;SM3&#xff0c;SM4。密钥长度和分组长度均为128位。 SM1 为对称加密。其加密强度与AES相当。该算法不公开&#xff0c;调用该算法时&#xff0c;需要通过加密芯片的接口进行调用。 SM2为非对称加密…

ntnub原理怎么看_老电工由浅入深带你入门学PLC的工作原理和梯形图的编程规则...

PLC编程怎么学&#xff1f;很难吗&#xff1f;工控小白怎么入门学习PLC&#xff1f;需要为学习PLC编程做哪些准备&#xff1f;学习PLC编程时&#xff0c;前期一定要积累相关的理论知识&#xff0c;有了一定的基础&#xff0c;基础打扎实之后就是多练习了。今天推荐的重点&#…

【转】国密加密算法SM系列的C#实现方法

http://www.zhimengzhe.com/bianchengjiaocheng/Javabiancheng/22144.html 在网上搜索SM实现方法&#xff0c;按照上面网站提供方法总是出错&#xff0c;经过调试终于修改好了&#xff0c;给大家以参考&#xff0c;不走弯路了 base64修改&#xff0c;这个看需求&#xff0c;如…

1盒子刷webpad_拉宽带送的盒子也有春天:一招解放各种束缚限制

序言&#xff1a;故事要从一年多前开始说起了&#xff0c;话说...装了宽带之后&#xff0c;移动送了个电视盒子&#xff0c;一次未使用&#xff0c;角落吃灰一年多了&#xff0c;最近有个大胆的想法&#xff01;其实是被逼迫无奈&#xff0c;孩子总是喜欢拿我手机刷抖音&#x…

【转】C#实现SM2国密加密

本文主要讲解“国密加密算法”SM系列之SM2的C#实现方法&#xff0c;加密规则请详阅国密局发布的文档。 首先需第三方Nuget包&#xff1a;Portable.BouncyCastle &#xff08;源码来自http://www.bouncycastle.org/csharp/&#xff09; SM2的加密需使用到SM3加密处理 1.1 SM2…

php udp发送和接收_63、php利用原生socket创建udp服务

1、案例函数汇总2、案例通过socket创建udp服务&#xff0c;获取对端的ip和port信息。并进行打印2.1、udp服务源码/*** Copyright(C) Iamasb* project : 3、workerman相关知识点* explain : 原生socket创建创建udp服务* filename : socket_udp.php* author : Iamasb*/// 创建udp…

【转】C#实现SM3国密加密

C#实现SM3国密加密 本文主要讲解“国密加密算法”SM系列之SM3的C#实现方法&#xff0c;加密规则请详阅国密局发布的文档。 首先需第三方Nuget包&#xff1a;Portable.BouncyCastle &#xff08;源码来自http://www.bouncycastle.org/csharp/&#xff09; 1.1常规处理 /// &l…

mq集群要建传输队列吗_面试官:消息队列这些我必问!

作者&#xff1a;mousycodersegmentfault.com/a/1190000021054802消息队列连环炮项目里怎么样使用 MQ 的&#xff1f;为什么要使用消息队列&#xff1f;消息队列有什么优点和缺点&#xff1f;kafka,activemq,rabbitmq,rocketmq 都有什么去呗&#xff1f;如何保证消息队列高可用…

【转】国密算法sm4 CBC模式加解密

一.什么是CBC模式? CBC模式的全称是Cipher Block Chaining模式&#xff08;密文分组链接模式&#xff09;&#xff0c;之所以叫这个名字&#xff0c;是因为密文分组像链条一样相互连接在一起。 在CBC模式中&#xff0c;首先将明文分组与前一个密文分组进行异或运算&#xff0c…

oracle数据库连接时报12514_连接Oracle数据库时报ORA-12541:TNS:无监听程序的图文解决教程...

在用PL/SQL Developer等客户端工具连接oracle服务器时出现ORA-12541:TNS:无监听程序的错误,如下图:发现原来是oracle的监听没有启动,重启监听后就连接成功了,下面跟大家分享一下如何启动oracle的监听。1.在安装Oracle服务器的主机上&#xff0c;打开Net Configuration Assistan…

【转】对称加密和分组加密中的四种模式(ECB、CBC、CFB、OFB)

版权声明&#xff1a;本文为作者原创&#xff0c;如需转载&#xff0c;请注明出处https://blog.csdn.net/weixin_42940826注&#xff1a;以下图片来自于《图解密码学》&#xff0c;这本书讲的更全面细致&#xff0c;建议阅读&#xff0c;在我资源库中有此书&#xff0c;还有使用…

中发生数据丢失_如何防止Redis脑裂导致数据丢失?

所谓的脑裂&#xff0c;就是指在主从集群中&#xff0c;同时有两个主节点&#xff0c;它们都能接收写请求。而脑裂最直接的影响&#xff0c;就是客户端不知道应该往哪个主节点写入数据&#xff0c;结果就是不同的客户端会往不同的主节点上写入数据。而且&#xff0c;严重的话&a…