Docker: 容器互访的三种方式

栏目: 数据库 · 发布时间: 7年前

内容简介:三个容器我们需要让

场景

三个容器

  • 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 命令也可以查看容器是否互联成功:

Docker: 容器互访的三种方式

事实上,在 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 启动即可,容器会在后台运行。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Linux Command Line

The Linux Command Line

William E. Shotts Jr. / No Starch Press, Incorporated / 2012-1-17 / USD 39.95

You've experienced the shiny, point-and-click surface of your Linux computer-now dive below and explore its depths with the power of the command line. The Linux Command Line takes you from your very ......一起来看看 《The Linux Command Line》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具