请教一下docker 中 mongo 容器与 app 容器的交互
发布于 6 年前 作者 samcsf 4836 次浏览 来自 问答

背景

最近想尝试把自己的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 回复

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

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

看文档是推荐采用 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

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

通过

docker network create -d bridge my-bridge

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

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

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

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

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

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 指定的名字进行通信、

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

回到顶部