Docker를 이용한 3 Tier 구조 만들기

연수·2022년 3월 5일
0

docker

목록 보기
1/1

web(nginx) - was(apache tomcat) - db(mysql)

1️⃣ Spring 컨테이너 띄우기

✔️ Dockerfile 작성

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

 


2️⃣  Spring, mySQL 띄우기

✔️ docker-compose.yml 작성

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

 


3️⃣ Spring, mySQL, nginx 띄우기

✔️ docker-compose.yml 작성

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

✔️ app.conf 작성

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-구성하기/

https://github.com/joont92/docker-study/tree/master/step02

profile
DCDI

0개의 댓글