三个容器node
digger-app
: 启动 API 服务,依赖 redis
和 mysql
digger-redis
: redis
服务digger-mysql
: mysql
服务咱们须要让 digger-app
容器内运行的服务可以访问 digger-redis
和 digger-mysql
容器。mysql
--link
--link
的格式为 --link name:alias
,name
为须要链接到的容器的 name
,alias
是给这个链接取个别名。redis
首先启动 redis
服务和 mysql
服务:sql
# 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。docker
在启动 digger-app
时,指定 --link
参数:express
docker run --name digger-api --link digger-redis:redis --link digger-mysql:mysql -d -p 3000:3000 your-image
这样在 digger-api
中就能经过 链接名
访问到对应的服务了,如与 digger-redis
的 link
别名为 redis
,那么在 digger-api
代码中,能够指定 redis
的 host
为 redis
,以 node.js
举例:api
// 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
命令也能够查看容器是否互联成功:bash
事实上,在 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
参数。app
使用 --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 Compose
是 Docker
官方编排(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
启动便可,容器会在后台运行。