Docker 容器互访

docker 容器互访

docker容器互访

Docker: 同一主机不同容器互访的三种方式,跨主机通过端口映射暴露端口解决

场景

三个容器

  • digger-app: 启动 API 服务,依赖 redismysql

  • digger-redis: redis 服务

  • digger-mysql: mysql 服务

方法一:--link

--link 的格式为 --link name:aliasname 为需要连接到的容器的 namealias 是给这个连接取个别名。

首先启动 redis 服务和 mysql 服务:

# redis
docker run --name digger-redis -d redis:5.0.3-alpine
# mysql
docker run --name digger-mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.25

如果不指定 name,docker 会随机生成一个 name,使用 docker ps 可以查看到运行容器的 name。

在启动 digger-app 时,指定 --link 参数:

docker run --name digger-api --link digger-redis:redis --link digger-mysql:mysql -d -p 3000:3000 your-image

这样在 digger-api 中就能通过 连接名 访问到对应的服务了,如与 digger-redislink 别名为 redis,那么在 digger-api 代码中,可以指定 redishostredis

使用 docker exec 命令进入容器,使用 ping 命令也可以查看容器是否互联成功。

事实上,在 digger-api 容器内,如果查看 hosts 文件,可以发现 docker 已经将另外两个容器配置在了 hosts 中:

/app # cat /etc/hosts
127.0.0.1    localhost
...
172.17.0.6    redis 7a6409598773 cache-redis
172.17.0.5    mysql f08bf0e0bf18 digger-mysql
172.17.0.7    6eb8dab1e6db

方法二:--network

随着 Docker 网络的完善,更建议将容器加入自定义的 Docker 网络来连接多个容器,而不是使用 --link参数。

使用 --network 命令可以指定容器运行的网络,通过将多个容器指定到同一个网络可以让容器间相互访问。

创建网络

docker network create -d bridge my-net

指定网络

# redis
docker run --name digger-redis -d --network my-net redis:5.0.3-alpine
# mysql
docker run --name digger-mysql -e MYSQL_ROOT_PASSWORD=root -d --network my-net mysql:5.7.25
# api
docker run --name digger-api --network my-net -d -p 3000:3000 your-image

不过需要注意这时候就没有连接的别名了,在容器里面,host 直接使用对方容器的 name 访问即可。

方法三:docker compose

Docker ComposeDocker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用。

新建 docker-compose.yml 文件,编写如下

version: "3"
services:
  digger-api:
    image: "express:v1"
    ports:
      - "3000:3000"
  digger-mysql:
    image: "mysql:5.7.25"
    environment:
      - MYSQL_ROOT_PASSWORD=root
  digger-redis:
    image: "redis:5.0.3-alpine"

docker compose 的官方文档。

https://docs.docker.com/compose/compose-file/

然后使用 docker-compose up -d 启动即可,容器会在后台运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值