리꾸므

[Docker] Docker-compose로 Springboot, Nginx, Postgresql 연동하기 본문

발걸음/일지

[Docker] Docker-compose로 Springboot, Nginx, Postgresql 연동하기

리꾸므 2023. 1. 18. 08:31

서담

 docker를 학습하면서 jar, nginx, postgresql를 연동하기가 과제로 주어졌다.

어제부터 시작했는데 사실 어제는 인텔리제이 포맷을 이클립스에서 사용하느라 시간을 버린거고

오늘 이클립스로 간단한 게시글 만들고 작업을 시작하니 생각보다 수월하게 끝났다.

 

아직 검토전이라 이게 맞는 방식인지 모르겠지만 일단 기록 겸 작성한다.

 

 


 

 

application properties

spring.datasource.url=jdbc:postgresql://(postgresql 컨테이너 이름):5432/test
spring.datasource.username=test
spring.datasource.password=test
spring.jpa.hibernate.ddl-auto=update
  • url 설정시 처음에 localhost:5432를 사용하였으나 번번히 실패, 생각해보니 컨테이너로 격리가 되어있어 로컬로 인식을 안하겠다는걸 깨닫고 컨테이너 명칭으로 바꿨다. 아마 확인은 안했지만 도커가 부여해주는 컨테이너 ip를 적어도 정상적으로 연결될 것 같다. 

 

 

nginx .conf

upstream app {
  server postjava:8080;
}

server {
    listen 80;

    location / {
        proxy_pass http://app;
            proxy_set_header Host $host:$server_port;
    }
}
  • nginx는 그냥 리버스 프록시만 사용했다. 다른걸 제쳐두고 과제 내용에 중점을 두고 작성했다.
upstream app {
  server postjava:8080;
}

server {
        listen 80;

        return 301 https://$host$request_uri;
}

server {
        listen 443 ssl;

        ssl_certificate /etc/ssl/certs/server.crt;
        ssl_certificate_key /etc/ssl/private/server.key;

        location / {
                proxy_pass http://app;
                proxy_set_header Host $host:$server_port;

                proxy_buffer_size       128k;
                proxy_buffers           4 256k;
                proxy_busy_buffers_size 256k;
        }
}
  • 위는 443port

 

 

docker-compose

version: "3"

services:
  postgresdb:
    container_name: postgresdb
    image: postgres
    restart: always
    ports:
      - "5432:5432"
    environment:
      POSTGRES_DB: "test"
      POSTGRES_USER: "test"
      POSTGRES_PASSWORD: "test"
  postjava:
    container_name: postjava
    image: rjava
    expose:
      - 8080
    depends_on:
      - postgresdb
    links:
      - postgresdb
  web:
    container_name: web
    image: nginx
    ports:
      - "10.xx.xx.xx:9002:80"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
    depends_on:
      - postjava
  • 각 명령어 설명
    • container-name : 컨테이너 이름
    • image : 사용할 이미지
    • ports : 포트를 호스트의 IP와 포트에 바인딩( 호스트:컨테이너 포트)
    • environment : 환경 변수 설정, 여기서는 postgresql DB, 유저 및 비밀번호 생성에 사용하였다.
    • expose : 내부 포트만 노출
    • depends_on : 의존한다는 의미로 대상보다 늦게 실행된다.
    • links : 컨테이너 ip는 언제나 변할 수 있는 유동성 ip이기 때문에 links를 통해 두 컨테이너를 연결시켰다.
    • volumes :  컨테이너의 생명주기와 상관없이 데이터를 저장하고 사용할 수 있다.
  • nginx ports를 보면 다른 ports와 조금 다른데, 호스트를 포트만 적은게 아닌 도커가 설치되어있는 해당 우분투 ip를 적어서 그렇다. 일단 외부에 노출시키는게 목표라 우분투 ip로 적었다.

 

'발걸음 > 일지' 카테고리의 다른 글

[Docker] docker engine 설치 및 제거  (0) 2023.03.16
[Ubuntu]SHC  (0) 2023.02.24
[Docker] 커맨드  (0) 2023.01.13
[Docker] 특징  (0) 2023.01.13
[Linux]특정 행 출력 및 파일 저장(feat. awk, sed)  (0) 2023.01.04