背景
目前手头自建服务器的服务都是容器化的,使用docker-compose,基本能满足需求。但最近发现个问题,多个服务都有mysql数据库,都有nginx接入服务。因为目前的服务性质决定了性能绝对是过剩的。所以将mysql服务容器、nginx服务器、拆出来,多个服务共用。
问题
拆出服务后,将mysql服务单独一个docker-compose配置启动后,其他服务可以通过mysql服务所在vps的域名+端口访问mysql服务。但此时原先大量原先本地流量就变成了公网流量,nginx服务也是同样的问题。如果是gcp之类的大厂,应该可以放在同一个vpc内,避免之类费用。但手上杂牌vps并不具备这样的条件。流量浪费了一倍也是钱呀,怎么办?
解决方案
将较大网络流量的业务服务和mysql放在同一个vps上。在业务服务中添加mysql的docker network。
mysql服务的docker-compose.yml
version: '3.5'
services:
db:
image: mysql:8.0
restart: always
container_name: mysql
environment:
MYSQL_DATABASE: your-db-name
MYSQL_ROOT_PASSWORD: yourpass
ports:
- 3306:3306
volumes:
- my-db:/var/lib/mysql
- ./config-file.cnf:/etc/mysql/conf.d/config-file.cnf
volumes:
my-db:
[email protected] ~ # docker network ls
NETWORK ID NAME DRIVER SCOPE
6d3f9fbd7df1 mysql_default bridge local
在使用到mysql的服务的docker-compose.yml上添加对应的配置
version: "3.5"
networks:
net_default:
mysql_default:
external: true
...
services:
web:
container_name: web
restart: always
image: some-web-image
environment:
MYSQL_PASSWORD: yourpass
MYSQL_HOST: mysql
MYSQL_PORT: 3306
DJANGO_ENV: production
TZ: Asia/Shanghai
REDIS_HOST: redis
volumes:
- .:/usr/src/app
depends_on:
- redis
networks:
- net_default
- mysql_default
ports:
- 8080:8080
working_dir: /usr/src/app
command: uwsgi uwsgi.ini
参考
Be First to Comment