docker 中隔离一个系列应用,求教

2019-02-14 14:24:45 +08:00
 daijinming

在 docker 中创建几个微服务,一个名 web1,另外 web1 还要引用 svr1、svr2,也就是需要创建三个镜像,运行三个容器。所以在启用的时候,需要同时运行三个容器,如果能将这三个应用组成一个局域网,web1 访问 svr1、svr2 的时候,只需要知道容器的名字就好。这样我就可以在 docker 中运行几组这样的应用,只有 web1 需要开放对外的端口。这个不知道如何在 docker 中设置,求教

3038 次点击
所在节点    程序员
19 条回复
shylockhg
2019-02-14 14:38:16 +08:00
docker-compose
-p 做端口映射
daijinming
2019-02-14 14:42:41 +08:00
@shylockhg 只有 web1 需要端口映射,这个到时没有问题。其他几个 svr1、svr2 只需要被 web1 调用就好,没有必要开放外网。其实我的思路就是在 docker 中创建一个局域网,只有 web1 需要被外部访问。
webfrogs
2019-02-14 14:46:19 +08:00
docker network 了解一下
GuryYu
2019-02-14 14:46:56 +08:00
使用 docker network 即可,

1. 创建 docker network:
docker network create [网络名称]
如:
docker network create net-xxx

2. 定义容器在 network 内的别名
docker network connect --alias [别名] [网络名] [容器名]
如:
docker network connect --alias svr1 net-xxx svr1
docker network connect --alias svr2 net-xxx svr2

3. 在需要调用 svr1 或者 svr2 的端口时,直接使用别名即可
whatsmyip
2019-02-14 14:47:12 +08:00
用 docker swarm 或者 k8s,可以满足
walkonthemarz
2019-02-14 14:47:29 +08:00
docker-compose 就可以,建议看 docker-compose 的官方文档
cxbig
2019-02-14 17:21:40 +08:00
1. 使用 docker-compose 可以緩解配置的複雜度,默認創建一個 network 供 container 之間通信,還能自定義各自的 hostname
2. 手動跑的話,讓這 3 個 container 加入同一個 network 也可以實現
NUT
2019-02-14 17:45:59 +08:00
@whatsmyip #5 楼主按照这条路走得话,估计要崩溃。
111qqz
2019-02-14 17:47:15 +08:00
可以用 docker-compose
whatsmyip
2019-02-14 18:12:00 +08:00
@NUT 😂
kaneg
2019-02-14 19:25:09 +08:00
docker-compose 就是为这样的需求量身定做的
Jeremial
2019-02-14 19:42:03 +08:00
docker-compose
yujincheng08
2019-02-14 20:22:26 +08:00
docker-compose
anguiao
2019-02-14 20:53:17 +08:00
用 network 是可以的,不过用 Docker Compose 更方便。同一组里面的几个容器,默认就是在一个 network 里的,没什么需求的话就用 Docker Compose 吧。
Trim21
2019-02-14 20:56:12 +08:00
docker compose 可以选择不把某个端口暴露到宿主机
AlphaTr
2019-02-14 22:24:47 +08:00
docker 可以创建自己的局域网

docker network create --subnet=172.20.0.0/16 arpa-net

然后指定容器的 IP 地址就行

docker run -d -p 80:80 -p 443:443 --network arpa-net --ip 172.20.20.22 nginx

不愿意暴露端口到宿主机,及不带前面 -p 参数就行

同一个网络下,端口默认都是开放的,所以容器之间可以直接用 172.20.20.22:80 这种 IP 端口的方式访问
yuikns
2019-02-15 03:22:01 +08:00
当然是 docker-compose

自己写是展示自己高超的技巧么
KickAssTonight
2019-02-15 14:18:12 +08:00
用 docker-compose:

> Expose ports without publishing them to the host machine - they ’ ll only be accessible to linked services. Only the internal port can be specified

```yml
expose:
- "3000"
- "8000"
```
saberlove
2019-02-16 10:34:04 +08:00
links

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/534938

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX