[Docker] Docker desktop에서 Frontend와 Backend 실행하기

rekv·2025년 3월 18일

Docker

목록 보기
3/12

프론트엔드 프로젝트와 백엔드 프로젝트는 이미 완성되었음을 가정

Frontend

프론트엔드는 nginx를 이용해서 배포할 건데, 나는 vue를 이용해서 프론트엔드를 만들었다.
nginx의 기본 설정 위에 우리가 추가할 설정을 Volume을 이용해 덮어씌우면 프론트엔드는 쉽게 배포가 가능하다.
volume을 아직 모른다면? (클릭)

default.conf

server {
    listen       80;
    server_name  localhost;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

프로젝트에서 nginx 패키지를 만든 다음 deafult.conf라는 파일을 생성하여 위으 코드를 추가

default.conf/etc/nginx/conf.d/default.conf로,
배포할 dist 파일은 /usr/share/nginx/html로 설정

실행되는 컨테이너로 접속하면 배포할 프론트엔드가 정상가동되는 걸 확인할 수 있다.

Backend

backend는 openjdk:17을 사용하여 배포할 것이다.
나는 백엔드는 스프링부트로 만들었으므로 jar파일을 명령어를 이용해 컨테이너에 올릴 것이다.

docker run --name [컨테이너 이름] -p [Host port]:8080 -v "[Backend프로젝트 경로]/build/libs/[빌드 파일 이름].jar":/app.jar -e DB_URL:jdck:mariadb://192.0.0.100:3306/test -d openjdk:17-ea-slim-buster java -jar /app.jar

✅ Docker Run 명령어 옵션
--name [컨테이너 이름] -> 컨테이너 이름 지정
-p [포트 번호]:[서버 포트 번호] -> 포트포워딩 설정
-v "[프로젝트 경로]/build/libs/[프로젝트이름].jar":/app.jar -> 볼륨 설정
-e DB_USER:root -> 환경변수 설정
-e DB_URL:jdck:mariadb://192.0.0.100:3306/test
-d -> 백그라운드 설정
openjdk:17-ea-slime-buster -> 이미지 이름
java -jar /app.jar -> 실행할 명령어

💥주의 사항💥
포트포워딩

  • 사용중인 포트응 사용 못함 (다른 동작중인 컨테이너 및 프로젝트 생각하기)

볼륨

  • 설정 파일을 넣을 때 설정 파일의 내용이 잘못되면 프로그램이 실행 안됨
  • 경로를 잘못 지정하면 제대로 적용 안됨

명령어 주의

  • 실행 후 종료되는 명령어는 컨테이너가 생성된 후 바로 종료됨(삭제되는 건 아님)
  • 대화형 명령어는 실행하면 안됨

Database

MaraiDB를 사용한다고 가정할 때, MariaDB는 환경변수 설정에서 MARIA_ROOT_PASSWORD만 설정하면 된다.

🎯그런데 만약 여기서 데이터베이스 혹은 유저도 실행과 동시에 추가하고 싶다면?
-> database는 환경변수에서 MARAIDB_DATABASE를, user는 MARIADB_USER를, 패스워드는 MARIADB_PASSWORD를 설정하면 된다.
🎯DB에서 초기 데이터 삽입이나 SQL 스크립트 자동 실행이 필요하다면?
->docker-entrypoint-initdb.d 폴더에 넣으면 된다.

환경변수

내가 만든 백엔드 프로젝트는 jpa설정을 담고 있어 올바른 DB Url도 작성해야 파일이 정상적으로 실행된다.
위에서는 192.0.0.100:3306이라고 IP를 적었으나, docker-compose 등을 이용해 여러 컨테이너를 동시에 실행시킨다면 연결되어야 할 백엔드 혹은 DB를 컨테이너 이름으로 지정하는 것도 가능하다.

spring:
  datasource:
    url: jdbc:mariadb://192.0.0.100:9999/test # 내 컴퓨터의 ip
    url: jdbc:mariadb://host.docker.internal:9999/test # 알아서 찾아감
  url: jdbc:mariadb://mariadb:9999/test # 컨테이너 이름을 통해 찾아감

0개의 댓글