web(nginx) - was(apache tomcat) - db(mysql)
FROM adoptopenjdk/openjdk11:latest
COPY ./project /project
WORKDIR /project
CMD ["./gradlew", "bootRun"]
$ docker build -t spring:latest .
$ docker run -d -p 8080:8080 --name spring spring:latest
mysql과 spring-boot 컨테이너 2개를 띄워주는 docker-compose.yml
파일
spring-boot의 경우 현 위치에 있는 Dockerfile을 참조하여 만든 image를 컨테이너로 띄우게끔 한다.
depends_on
: mysql 컨테이너가 뜬 다음 spring-boot 컨테이너가 뜨도록 설정
version: "3"
services:
db:
image: mysql/mysql-server:8.0.23
environment:
MYSQL_DATABASE: test_db
MYSQL_ROOT_PASSWORD: root
MYSQL_ROOT_HOST: 'root'
ports:
- 3306:3306
spring:
build: .
ports:
- 8080:8080
depends_on:
- db
application.properties
에 DB 접속 정보를 작성spring.datasource.url=jdbc:mysql://db:3306/test_db?useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
spring.jpa.generate-ddl=true
spring.jpa.show-sql=true
$ docker-compose up
# 종료 시
$ docker-compose down
spring-boot 컨테이너가 뜬 다음에 레지스트리에서 nginx를 땡겨와서 컨테이너로 띄운다.
version: "3"
services:
web:
image: nginx
ports:
- 80:80
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
depends_on:
- spring
db:
image: mysql/mysql-server:8.0.23
environment:
MYSQL_DATABASE: test_db
MYSQL_ROOT_PASSWORD: root
MYSQL_ROOT_HOST: 'root'
ports:
- 3306:3306
spring:
build: .
ports:
- 8080:8080
depends_on:
- db
server {
listen 80;
access_log off;
location / {
proxy_pass http://spring:8080;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
nginx 서버를 연결하여 localhost로 바로 접속할 수 있다.
[참고]
https://joont92.github.io/docker/docker-compose로-nginx-spring-boot-mysql-구성하기/