Docker如何部署多容器通信(docker,web开发)

时间:2024-04-29 15:49:44 作者 : 石家庄SEO 分类 : web开发
  • TAG :

原因是这样的

想要部署一个mocker平台,就在朋友的推荐下选择了 api-mocker 这个现成的项目

该项目分为服务端node、客户端vue、以及数据库mongodb

在尝试直接部署的时候发现需要装一大堆的环境,node、mongo、nginx啊,特别的麻烦,之前简单的使用过docker,就在想能不能用docker免环境直接部署呢?于是就有了这次的尝试

多容器通信

该项目分为3个部分,于是就要建立3个容器(node、mongo、nginx)

那容器之间怎么实现通信呢?

#通过link指令建立连接$dockerrun--name<name>-d-p<path1>:<path2>--link<containername>:<alias><containername:tag/imageid>

- --link 容器连接指令
- < containername > : < alias >
- < 被连接容器名称 > : < 容器访问别名 >
- 注:别名在主动建立连接的容器中访问被连接容器使用
- 以下指令在容器检测连接状态
$ curl <alias>

接下来我们开始尝试部署

实现过程

1、构建mongo容器

2、构建node容器并与mongo容器建立连接

3、构建nginx容器并与node容器建立连接

构建mongo容器

我们先拉取mongo镜像

$dockerpullmongo:latest

下面我们让这个镜像跑起来

$dockerimagesrepositorytagimageidcreatedsizemongolatest05b3651ee24e2weeksago382mb

--auth 指令开启了mongo的连接身份校验 开启校验 是由于 node 跨容器连接时 不设置身份校验 开启服务端无法连接上mongo数据库

```
nodejs.mongoerror: [egg-mongoose]authentication failed.
```

查看容器

$dockerps-acontaineridimagecommandcreatedstatusportsnames0d440be90935mongo"docker-entrypoint.s…"14hoursagoup14hours0.0.0.0:27017->27017/tcpmock-mongo

由于我们mongo开启了身份验证,所以我们要进入mongo容器配置一下node连接时使用的账号

$dockerexec-itmock-mongo/bin/bash$mongoadmin#创建manageruser$db.createuser({user:"admin",pwd:"admin",roles:[{role:"admin",db:"admin"}]})#账号授权$db.auth('admin','admin')

现在我们的mongo数据库已经跑起来了,接下来我们就要建立node容器了

构建node容器并与mongo容器建立连接

在开始构建node容器前我们要先约定好mongo容器别名,端口号以及登录账号密码

  • mongo容器别名:

  • db mongo端口号:27017

  • 账号密码:admin:admin

我们先修改node服务端的配置

文件配置 dockerfile/api-mocker/server/config/config.default.js 修改mongo连接配置,db为预先设定的mock-mongo容器的别名

mongoose:{url:'mongodb://admin:admin@db:27017/api-mock?authsource=admin'},

现在我们编写一个dockerfile文件来构建镜像

#指定基础镜像fromnode:latest#维护者maintainerqiushiyuan1994@qq.com#工作目录workdir/www#将本地文件添拷贝到容器中,不会解压copyapi-mockernode-server/api-mockerexpose7001workdir/www/node-server/api-mocker/serverrunnpminstallworkdir/www/node-server/api-mocker#构建容器后调用,在容器启动时才进行调用cmd["make","prod_server"]

我们使用编写好的dockerfile文件构建镜像

$dockerbuild-t="mock-server:1.0.0".

让我们查看一下镜像

$dockerimagesrepositorytagimageidcreatedsizemock-server1.0.0957ad2aa1f978minutesago674mbmongolatest05b3651ee24e2weeksago382mb

现在就到了关键的一步,我们将mocker-server镜像运行起来,并建立服务器与数据库的连接

复制代码代码如下:

$ docker run -d -i -t -p 7001:7001 --name mock-server1 --link mock-mongo:db mock-server:1.0.0 /bin/bash

让我们再看看现在正在运行的容器

$dockerpscontaineridimagecommandcreatedstatusportsnamesee780b903c64mock-server:1.0.0"/bin/bash"aboutaminuteagoup11seconds0.0.0.0:7001->7001/tcpmock-server0d440be90935mongo"docker-entrypoint.s…"16hoursagoup16hours0.0.0.0:27017->27017/tcpmock-mongo

检测node容器和mongo容器的连接状态

$dockerexec-itmock-server/bin/bash$curldb

现在我们的服务端和数据库已经建立起了连接,接下来我们要开始部署我们的客户端

构建nginx容器并与node容器建立连接

在建立nginx前,我们要先约定好,node容器别名,nginx转发的端口号以及客户端访问nginx域名及端口号

  • node服务器别名:node

  • node容器映射的端口号:7001

  • nginx域名:127.0.0.1

  • nginx端口号:90

我们先拉取nginx镜像并建立容器

$dockerpullnginx:latest$dockerrun-p90:80--linkmock-node:nodenginx:latest--namemock-nginx#查看容器连接状态$dockerexec-itmock-nginx/bin/bash$env#看到以下数据则表示连接成功了node_port_7001_tcp=tcp://172.17.0.3:7001node_port_7001_tcp_port=7001node_env_yarn_version=1.9.4

现在我们在看看已经运行中的容器

$dockerpscontaineridimagecommandcreatedstatusportsnames09644025d148nginx"nginx-g'daemonof…"5hoursagoup5hours0.0.0.0:90->80/tcpmock-nginxee780b903c64mock-server:1.0.0"/bin/bash"aboutaminuteagoup11seconds0.0.0.0:7001->7001/tcpmock-server0d440be90935mongo"docker-entrypoint.s…"24hoursagoup24hours0.0.0.0:27017->27017/tcpmock-mongo

由于前端独立部署的原因,我们需要修改nginx的配置,修改nginx的配置的方式有以下几种

  • 在建立容器是使用-v指令将配置文件挂载到本地主机,在本地修改后在容器重启nginx

  • 将配置文件复制到本地主机,修改后替换容器的对应文件,然后再容器内重启nginx

  • ...

我们当前操作环境是17版 15寸macbook pro,挂载需要特殊配置,因此我采用了第二种方式

配置文件修改

  • 容器内配置文件路径 /etc/nginx/conf.d/default.conf

  • 拷贝配置文件至本地

$dockercpmock-nginx:/etc/nginx/conf.d/default.conf~/nginx/default.conf

在nginx配置文件增加以下配置

server{location/mock-api/{#node为指令服务端容器别名proxy_passhttp://node:7001/;}location/mock{autoindexon;alias/root/dist;}}

覆盖容器内配置并重启nginx

$dockercp~/nginx/default.confmock-nginx:/etc/nginx/conf.d/default.conf#进入容器$dockerexec-itmock-nginx/bin/bash#重启nginx,看到以下提示则表示重启成功$nginx-sreload2018/11/0317:23:14[notice]68#68:signalprocessstarted

接下来就到了我们的最后激动人心的最后一步

修改我们前端项目请求的网络域名并打包上传

//api-mocker/client/config//module.exports>build>serverrootmodule.exports={build:{serverroot:'127.0.0.1:90/mock-api'}}

将打包后的dist文件上传至nginx配置的/root/dist目录下

$dockercp~/sites/api-mocker/client/distmock-nginx:/root

> 当然nginx的容器构建也可以编写一个dockfile文件来实现,这里我们就不详细说明了,挂载配置文件和日志至本地主机有兴趣的可以自己尝试一下复制代码

测试

所有惊心动魄的配置我们都已经完成,现在我们来测试一下

访问前端项目: http://127.0.0.1:90/mock 我们会看到,以下界面说明我们前端项目部署成功

Docker如何部署多容器通信

我们尝试注册一个账号,看到成功提示,那就说明我们整个项目部署成功了

Docker如何部署多容器通信

Docker如何部署多容器通信

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Docker如何部署多容器通信的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Docker容器采用的趋势是什么下一篇:

6 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18