CNode

请教一下docker 中 mongo 容器与 app 容器的交互

问答
Ssamcsf发布于9 年前最后回复9 年前12 回复6308 浏览0 收藏

背景

最近想尝试把自己的app 利用docker的方式部署, 就是做到app的数据库 mongodb 作为一个独立容器存在, 然后app 自己独立一个容器,通过相互通信连接起来。

Docker
------------------------
Container: MongoDB
Container: My-app
------------------------

根据 mongo 在docker hub 上面镜像的描述,是使用 docker run --link 的方式把mongo容器里面的环境变量曝露到其他容器中实现获取 mongodb server 的host以及port 的。app只需要使用如下形式的命令就能获取host 跟 port 从而连接数据库。这种方法亲测试可行的。

$ docker run --name my-app --link some-mongo:mongo -d my-app-image

问题

好了简述完mongo镜像推荐的--link方式,想请教一下各位大神一些问题:

  1. 根据docker官方文档,--link的方式是过时的,那现在应该用什么替代方式比较好呢?

  2. 或者说我这种分开2个镜像部署的方式欠妥呢?

请各位建议提点一下,谢谢。

查看回复

回复 (12)

H
hewentaowx#1·9 年前

我是建一个Makefile 把配置 什么的都放进去跑Makefile文件就好了 自豪地采用 CNodeJS ionic

H
hewentaowx#2·9 年前
引用 samcsf@hewentaowx 有具体的项目参考下详细的Makefile吗, 因为纠结的是具体数据库跟app在docker中的交互方式, 谢谢。

@samcsf 我感觉发出来也不适用不然就贴图了 第一 我用的coffeescript写的 第二目前并没有加数据库用的leancloud 跑的本地去call leancloud…… 自豪地采用 CNodeJS ionic

S
samcsf#3·9 年前
引用 royalrover通过 方式创建一个桥接或者overlay网络,让几个容器同时运行在网络内,就可以互相通过容器名访问了,类似link

@royalrover 嗯嗯,我也看到了这个,只不过我觉得如果为了一个数据库去弄这个有点成本大, --link 直接明了简单,只是怕有不支持的一天哈哈。 谢啦。

S
samcsf#4·9 年前
引用 hewentaowx@samcsf 我感觉发出来也不适用不然就贴图了 第一 我用的coffeescript写的 第二目前并没有加数据库用的leancloud 跑的本地去call leancloud…… 自豪地采用...

@hewentaowx 好的,明白。其实也提供了一个思路,数据库跟程序也不一定在一台机器,分布也有好处,或者这问题在具体情境中也是能避免的,谢啦: )

J
Joursion#5·9 年前

自建数据库吗?我们是用的阿里的,然后配置的环境变量,数据库直接就是指向一个 URL。 另:数据库不怎么适合容器吧?

M
MiYogurt#6·9 年前

image.png

创建网络呗。docker-compose 也是创建的网络。

Usage:	docker network COMMAND

Manage networks

Options:
      --help   Print usage

Commands:
  connect     Connect a container to a network
  create      Create a network
  disconnect  Disconnect a container from a network
  inspect     Display detailed information on one or more networks
  ls          List networks
  prune       Remove all unused networks
  rm          Remove one or more networks

同一个网络下,可以直接通过 --hostname 指定的名字进行通信、

M
MiYogurt#7·9 年前

你可以学一些 docker-compose。 更多高级技巧,可以看下我的这篇文章

S
samcsf#8·9 年前

@Joursion 嗯,好,谢谢建议。 @MiYogurt @royalrover 多谢两位的分享,我再折腾一下

S
samcsf#9·9 年前
引用 hewentaowx我是建一个Makefile 把配置 什么的都放进去跑Makefile文件就好了 自豪地采用 CNodeJS ionic

@hewentaowx 有具体的项目参考下详细的Makefile吗, 因为纠结的是具体数据库跟app在docker中的交互方式, 谢谢。

R
royalrover#10·9 年前

看文档是推荐采用 user-defined networks 进行通信;而我之前看到的是通过docker-compose.yml文件编写各个容器连接情况,通过--link连接

ping-app:
    build: .
    restart: always
    volumes:
    - ./app:/usr/src/app
    links:
    - sentinel
    - redis-master:db
sentinel:
    build: ./builds/sentinel
    restart: always
    links:
    - redis-master:redis-master
    - redis-slave

不过看来,这确实有点落伍了

R
royalrover#11·9 年前

通过

docker network create -d bridge my-bridge

方式创建一个桥接或者overlay网络,让几个容器同时运行在网络内,就可以互相通过容器名访问了,类似link

参与回复
登录后即可参与回复。登录