从之前的文章我们知道部署一个Springboot项目可能需要连接到一个mysql容器和redis容器,上一次我是利用命令行–link将不同的容器连接在了一起。
Docker提供了Dockerfile让用户管理一个单独的应用容器;同时提供了Compose 允许用户在一个模板(YAML 格式)中定义一组相关联的应用容器(被称为一个 project,即项目),例如一个 Web 服务容器再加上后端的数据库服务容器等。
1.编写mysql容器的dockerfile
- 这里我们会利用sql文件初始化一个库,并创建我们的表。
参考链接 - privileges.sql
ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;
主要设置了外部网络的权限 便于使用可视化工具
- setup.sh
#!/bin/bash
mysql -u root -p$MYSQL_ROOT_PASSWORD <<EOF
source /usr/local/work/database.sql;
source /usr/local/work/privileges.sql;
脚本执行了两个sql文件
- Dockerfile
FROM mysql
COPY ./database.sql /usr/local/work/database.sql
COPY ./privileges.sql /usr/local/work/privileges.sql
COPY ./setup.sh /docker-entrypoint-initdb.d/setup.sh
RUN chmod a+x /docker-entrypoint-initdb.d/setup.sh
2.docker-compose
version: '2'
services:
mysql:
restart: always
build: mysql/.
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
ports:
- "3306:3306"
volumes:
- /opt/mysql_data:/var/lib/mysql
networks:
- mysql_nw
redis:
image: "redis:alpine"
container_name: redis
networks:
- redis_nw
ports:
- "6379:6379"
eorder:
build: backend/.
container_name: eorder
ports:
- "8080:8080"
depends_on:
- mysql
- redis
networks:
- mysql_nw
- web_nw
- redis_nw
networks:
mysql_nw:
driver: bridge
web_nw:
driver: bridge
redis_nw:
driver: bridge