- 我的目录结构:
.
└── docker
├── big-event
│ ├── docker-compose.yml
│ ├── java
│ │ ├── app.jar
│ │ ├── application.yml
│ │ ├── Dockerfile
│ │ └── logs
│ └── nginx
│ ├── conf
│ │ └── default.conf
│ └── html
└── server
├── mysql
│ ├── conf
│ │ ├── docker.cnf
│ │ └── mysql.cnf
│ ├── data
│ └── init.sql
└── redis
├── conf
│ └── redis.conf
└── data
- java的Dockerfile
FROM openjdk:8-jre
WORKDIR /app
RUN mkdir logs
VOLUME ["/app/logs","/app/application.yml"]
COPY app.jar /app/
ENTRYPOINT ["java","-jar","app.jar"]
- docker-compose.yml
version: "3.0"
services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- "/opt/docker/big-event/nginx/conf:/etc/nginx/conf.d"
- "/opt/docker/big-event/nginx/html:/usr/share/nginx/html"
networks:
- net
privileged: true
links:
- app
mysql:
image: mysql:latest
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
- "/opt/docker/server/mysql/data:/var/lib/mysql"
- "/opt/docker/server/mysql/conf:/etc/mysql/conf.d/"
- "/opt/docker/server/mysql/init.sql:/docker-entrypoint-initdb.d/init.sql"
networks:
- net
privileged: true
redis:
image: redis:latest
ports:
- "6379:6379"
volumes:
- "/opt/docker/server/redis/data:/data"
- "/opt/docker/server/redis/conf/redis.conf:/etc/redis/redis.conf"
command: redis-server /etc/redis/redis.conf
networks:
- net
privileged: true
app:
build:
context: ./java/
dockerfile: Dockerfile
image: app:1.0
ports:
- "8080:8080"
volumes:
- "/opt/docker/big-event/java/logs:/app/logs"
- "/opt/docker/big-event/java/application.yml:/app/application.yml"
networks:
- net
privileged: true
links:
- mysql
- redis
depends_on:
- mysql
networks:
net:
- 在 java -jar app.jar 的时候必须要 cd 到jar包所在的目录,不然挂载的配置文件application.yml就会失效(Dockerfile文件中设置)重要!重要!重要!
错误示例:java -jar /app/app.jar 这样执行jar包,外挂的配置文件就不会生效。 - 如果在同一个桥接网络下,在java中可以通过服务名访问到相应的服务。
- 在 前端项目中,不能通过服务名访问后端的接口(要写ip或域名)。
- 启动 java项目时,要确保 你要连接的数据库是存在的。可以将init.sql 挂载到mysql容器,如果第一次挂载的数据卷中没有data数据就会执行初始化sql脚本,否则就不会执行。