资讯专栏INFORMATION COLUMN

Docker: 容器互访的三种方式

raoyi / 752人阅读

摘要:首先启动服务和服务如果不指定,会随机生成一个,使用可以查看到运行容器的。新建文件,编写如下的官方文档查看这里。

场景

三个容器

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

digger-redis: redis 服务

digger-mysql: mysql 服务

我们需要让 digger-app 容器内运行的服务能够访问 digger-redisdigger-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,以 node.js 举例:

// redis.js
const redis = require("redis");
const client = redis.createClient({
  host: "redis",
  port: 6379
});

// mysql.js
const mysql      = require("mysql");
const connection = mysql.createConnection({
  host     : "mysql",
  user     : "root",
  password : "root",
  database : "my_db"
});

connection.connect();

使用 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 的官方文档查看 这里。

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28074.html

相关文章

  • 一个网站的微服务架构实战(2)k8s迁移

    摘要:前言我们一起回顾上一篇文章平台的微服务架构和,一共通过构建了三个镜像数据库,部署前端页面的,和接口。最近阿里云产品春节大促销,我一时没忍住又买了一台服务器,打完折扣还是很贵。是一个非常稳定的,可移植的网络文件系统。 前言 我们一起回顾上一篇文章《Bees平台的微服务架构(1)docker和docker-compose》,一共通过Dockerfile构建了三个docker镜像:mysql...

    Forelax 评论0 收藏0
  • 在Kubernetes上运行SAP UI5应用(上)

    摘要:在上海研究院的同事们如果想参加这个内部培训,可以联系同事。第三行命名执行命令,生成新的镜像文件。说句题外话虽然今年月份被微软收购了,但是用户体验一点也没变,一如既往的优秀。关于更多另类用法,请参阅的文章写在被微软收购之际的那些另类用法。 2018年只剩最后30天了。Jerry在2017年的最后一天,曾经立下一个目标:这个微信公众号在2018年保证至少每周发布一篇SAP原创技术文章。 从...

    acrazing 评论0 收藏0
  • 在Kubernetes上运行SAP UI5应用(上)

    摘要:在上海研究院的同事们如果想参加这个内部培训,可以联系同事。第三行命名执行命令,生成新的镜像文件。说句题外话虽然今年月份被微软收购了,但是用户体验一点也没变,一如既往的优秀。关于更多另类用法,请参阅的文章写在被微软收购之际的那些另类用法。 2018年只剩最后30天了。Jerry在2017年的最后一天,曾经立下一个目标:这个微信公众号在2018年保证至少每周发布一篇SAP原创技术文章。 从...

    张红新 评论0 收藏0
  • Flux7 Docker 系列教程(五):Docker 安全

    摘要:本系列教程翻译自,系列共有九篇,本文译自第五篇。因此,本系列教程关键的第五章用来讨论可能面临的安全问题以及它们是如何影响到整体的安全性的。一些必要的安全措施包括使用非特权用户运行容器。本图中列举了几个用于维护和授权的安全性。 本系列教程翻译自 Flux7 Docker Tutorial Series,系列共有九篇,本文译自第五篇 Part 5: Docker Security。该系列所...

    ztyzz 评论0 收藏0

发表评论

0条评论

raoyi

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<