Dockerfile 작성

# Spring Backend Dockerfile
FROM maven:3.8.6-jdk-11 as MAVEN_BUILD

WORKDIR /build

COPY pom.xml .

COPY src ./src

RUN mvn package -Dmaven.test.skip=true

FROM openjdk:11-jdk-slim-buster

WORKDIR /app

ARG JAR_FILE=*.jar

COPY --from=MAVEN_BUILD /build/target/${JAR_FILE} ./app.jar

EXPOSE 8080

CMD ["java", "-jar", "app.jar", \
"--spring.config.location=/config/application.yml"]
# React Frontend Dockerfile
FROM node:16.19 as build-stage

WORKDIR /app
# ENV PATH /app/node_modules/.bin:$PATH
COPY package.json /app/package.json

RUN npm install

COPY . /app

RUN npm run build

FROM nginx:stable-alpine as production-stage

COPY --from=build-stage /app/dist /usr/share/nginx/html

EXPOSE 3000

CMD ["nginx", "-g", "daemon off;"]

Jenkins Script

# backend
docker build -t backimg ./back
if (docker ps | grep "backimg"); then docker stop backimg; fi
docker run -it -d --rm -p 8080:8080 -v /home/ubuntu:/config --name backimg backimg
echo "Run spring"

# DOTENV_CONFIG_PATH 환경 변수의 값을 읽어옵니다.
# DOTENV_CONFIG_PATH=$DOTENV_CONFIG_PATH

# DOTENV_CONFIG_PATH 환경 변수가 비어있는 경우, 기본값으로 .env 파일이 위치한 경로를 사용합니다.
# if [ -z "$DOTENV_CONFIG_PATH" ]
# then
#     DOTENV_CONFIG_PATH=/home/ubuntu/.env
# fi

# sudo를 설치합니다.
# apt-get update
# apt-get install -y sudo

# npm을 설치합니다.
# sudo apt-get update
# sudo apt-get install -y npm

# dotenv 라이브러리를 사용하여 .env 파일을 로드합니다.
# npm install dotenv
# node -e "require('dotenv').config({ path: '$DOTENV_CONFIG_PATH' })"

# frontend
docker build -t frontimg ./front
if (docker ps | grep "frontimg"); then docker stop frontimg; fi
docker run -it -d --rm -p 3000:3000 --name frontimg frontimg
echo "Run react"

EC2에 Docker MySQL 연결


1. Docker에 MySQL 이미지 다운

$ docker pull mysql:latest

2. Docker 컨테이너 볼륨 생성

컨테이너의 내부 볼륨과 호스트의 볼륨을 마운팅 해주어 영구적으로 데이터를 보존

$ docker volume create mysql-volume
# 볼륨 확인
$ docker volume ls

3. 컨테이너 실행