Spring Boot/React Docker 이미지 만들기
들어가며
Mac에서의 Docker 설치 방법 및 리액트/스프링부트 빌드 결과물을 띄울 수 있는 간단한 스크립트를 만들어보았다.
Docker 설치
- Mac Docker 설치
[Docker] Docker Desktop 설치 및 사용법 (for mac)
Docker Desktop 설치 먼저 도커 데스크탑버전 설치를 위해 도커 공식사이트에 접속해서 상당 Product -> Docker Destop 을 클릭하고 자신의 os 버전에 맞게 선택해 설치를 한다. 설치가 완료되면 mac 의경우
kanoos-stu.tistory.com
- brew 보다 공식 사이트에서 .dmg 다운 받는게 좋음
- brew일 시 추가 설치 필요
Docker로 Spring boot 이미지 생성/컨테이너 띄우기
- 스프링부트 docker 튜토리얼
[Docker] Spring boot 프로젝트를 도커 이미지화 해보기
Spring boot 프로젝트를 docker image로 만들어 보겠습니다. 간단한 spring boot 프로젝트 생성 HomeController import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org
iseunghan.tistory.com
- 스프링 부트 Dockerfile 작성
# 베이스 이미지 지정
FROM openjdk:17
# 작업 디렉토리
WORKDIR /api
# 환경변수 설정
ARG JAR_FILE=./build/libs/*SNAPSHOT.jar
# 파일 복사 (로컬->컨테이너)
COPY ${JAR_FILE} test-app.jar
# 포트 익스포트
EXPOSE 8080
# 실행 명령 (컨테이너)
CMD ["java", "-jar", "test-app.jar"]
스프링 부트 이미지 build 명령어 (api:latest 라는 이미지 생성)
docker build -t api:latest ./
스프링 부트 컨테이너 run 명령어
- 출력 보도록 실행 (ctrl+c로 종료 가능)
docker run -it --name api_container -p 8080:8080 api:latest
- 백그라운드로 실행
docker run -d -p 8080:8080 --name api_container api:latest
- 스프링 부트 Docker 자동화 쉘 스크립트
#!/usr/bin/env bash
# sh start_api_docker.sh : 로그 보면서 실행 (ctrl+c로 나가기 가능)
# sh start_api_docker.sh deploy : 백그라운드로 실행
# 이미지 이름
image_name="api:latest"
# 컨테이너 이름
container_name="api_container"
# 명령어 성공 여부 함수
check_success() {
if [ $1 -eq 0 ];then
echo "$2"
else
echo "$3"
exit 1
fi
}
# 이미지 빌드 시작
echo "Image Build Start!"
docker build -t "$image_name" ./
# 이미지 정상 빌드 확인
check_success $? "Image Build Succeeded" "Image Build Failed"
# 실행 중인 도커 컨테이너 목록 가져옴
docker_containers=$(docker ps -aq --filter "name=$container_name")
# 컨테이너 기존재 확인 (-n: 변수 비어있지 않은지)
if [ -n "$docker_containers" ]; then
# 기존재 시 기존 컨테이너 삭제
echo "Docker container '$container_name' already exist."
docker rm "$container_name"
# 컨테이너 정상 삭제 확인
check_success $? "Docker container '$container_name' removed successfully" "Docker container '$container_name' failed to remove"
fi
# 인자가 없다면 출력 보이도록 실행
if [ $# -eq 0 ]; then
echo "Run with output verification"
docker run -it --name "$container_name" -p 8080:8080 "$image_name"
# 컨테이너 정상 생성 확인
check_success $? "Docker container '$container_name' started successfully" "Docker container '$container_name' failed to start"
# 인자가 deploy라면 백그라운드에서 실행
elif [ "$1" = "deploy" ];then
echo "Run in the background"
docker run -d -p 8080:8080 --name "$container_name" "$image_name"
# 컨테이너 정상 생성 확인
check_success $? "Docker container '$container_name' started successfully" "Docker container '$container_name' failed to start"
fi
Docker로 React 이미지 생성/컨테이너 띄우기
- 리액트 Docker 튜토리얼
프론트엔드 개발자를 위한 Docker로 React 개발 및 배포하기
리액트 앱을 도커 컨테이너에 쉽게 띄워보자! 이 포스트는 Youtube의 Sanjeev Thiyagarajan라는 분이 올려주신 Docker + ReactJS tutorial 영상을 따라 쉽게 도커를 이해할 수 있도록 정리한 내용이다.
velog.io
- 리액트 Dockerfile 작성
# 베이스 이미지 지정
FROM node:19
# 작업 디렉토리
WORKDIR /front
# 파일 복사 (로컬->컨테이너)
COPY package.json .
# 명령 실행
RUN npm install
# 파일 복사 (로컬->컨테이너)
COPY . .
# 포트 익스포트
EXPOSE 3000
# 실행 명령 (컨테이너)
CMD ["npm", "start"]
리액트 이미지 build 명령어 (front:latest라는 이미지 생성)
docker build -t front:latest ./
리액트 컨테이너 run 명령어
- 출력 보도록 실행 (ctrl+c로 종료 가능)
docker run -it -p 3000:3000 --name front_container front:latest
- 백그라운드 실행 :
docker run -d -p 3000:3000 --name front_container front:latest
- 리액트 Docker 자동화 쉘 스크립트
#!/usr/bin/env bash
# sh start_front_docker.sh : 로그 보면서 실행 (ctrl+c로 나가기 가능)
# sh start_front_docker.sh deploy : 백그라운드로 실행
# 이미지 이름
image_name="front:latest"
# 컨테이너 이름
container_name="front_container"
# 명령어 성공 여부 함수
check_success() {
if [ $1 -eq 0 ];then
echo "$2"
else
echo "$3"
exit 1
fi
}
# 이미지 빌드 시작
echo "Image Build Start!"
docker build -t "$image_name" ./
# 이미지 정상 빌드 확인
check_success $? "Image Build Succeeded" "Image Build Failed"
# 실행 중인 도커 컨테이너 목록 가져옴
docker_containers=$(docker ps -aq --filter "name=$container_name")
# 컨테이너 기존재 확인 (-n: 변수 비어있지 않은지)
if [ -n "$docker_containers" ]; then
# 기존재 시 기존 컨테이너 삭제
echo "Docker container '$container_name' already exist."
docker rm "$container_name"
# 컨테이너 정상 삭제 확인
check_success $? "Docker container '$container_name' removed successfully" "Docker container '$container_name' failed to remove"
fi
# 인자가 없다면 출력 보이도록 실행
if [ $# -eq 0 ]; then
echo "Run with output verification"
docker run -it --name "$container_name" -p 3000:3000 "$image_name"
# 컨테이너 정상 생성 확인
check_success $? "Docker container '$container_name' started successfully" "Docker container '$container_name' failed to start"
# 인자가 deploy라면 백그라운드에서 실행
elif [ "$1" = "deploy" ];then
echo "Run in the background"
docker run -d -p 8080:8080 --name "$container_name" "$image_name"
# 컨테이너 정상 생성 확인
check_success $? "Docker container '$container_name' started successfully" "Docker container '$container_name' failed to start"
fi
레퍼런스
- Docker run 명령어 정리
https://bio-info.tistory.com/136
[Docker] docker run 명령어 개념 [주요 옵션 설명]
Contents 1. docker run 명령어 docker run은 docker의 이미지를 기반으로, 컨테이너를 생성하는 명령어입니다. 옵션에 따라 컨테이너를 바로 실행시킬 수도 있습니다. 기본적인 명령어 형식은 아래와 같습
bio-info.tistory.com