在工作中我们可能需要数据库和api接口分开部署的情况,如果都用docker-compose部署的话,
在有的操作系统中可能无法使用(ip+端口)连接数据库,必须使用服务名称去连接。
这时我们就需要让这两个docker-compose启动的服务共享网络,这样就可以相互调用服务了
数据库的docker-compose文件
- 我们可以使用 docker network create my_net 创建一个网络,之后每个docker-compose.yml引用即可
- 也可以先启动数据库服务,最后api服务的docker-compose.yml引用数据库的网络即可,这里我使用这种方式
version: '3'
services:
db-mysql:
image: mysql:5.7
command: --default-authentication-plugin=mysql_native_password
restart: always
ports:
- "3306:3306"
container_name: mysql-container
networks:
- my_net
environment:
- MYSQL_ROOT_PASSWORD=root
db-mysql:
image: redis:5.0.5-alpine
command: redis-server --appendonly yes
restart: always
ports:
- "6379:6379"
container_name: redis-container
networks:
- my_net
networks:
my_net:
driver: bridge
- 这里需要指定网络 my_net,指定后网络名称为当前文件夹加上_my_net,如果不指定会使用当前文件夹的名称加上_default
- 查看网络 docker network ls
- 这里我查看的是 app_my_net
api的docker-compose文件
version: '3'
services:
api:
restart: always
container_name: web-api
build:
context: ./web-api # 指定设定上下文根目录,然后以该目录为准指定Dockerfile
dockerfile: Dockerfile
networks:
- app_my_net # 指定网络
ports:
- "8001:7001"
environment:
TZ: Asia/Shanghai
web:
image: nginx:1.17.0
privileged: true
restart: always
container_name: web-front
ports:
- "8080:80"
volumes:
- ./web-front/nginx/nginx.conf:/etc/nginx/nginx.conf
- ./web-front:/usr/share/nginx/html
networks:
app_my_net:
external: true # 来自外部
- 在使用共享网络后,我们在连接 mysql和redis的使用就可以使用服务名称,db-mysql或db-mysql