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

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는 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 -> 실행할 명령어
💥주의 사항💥
포트포워딩
볼륨
명령어 주의
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 # 컨테이너 이름을 통해 찾아감