
프로젝트를 완성하면 배포를 진행하게 되는데,
배포를 할 수 있는 방법은 매우 다양하다
이번 방법은 도커 컨테이너를 통해서
aws ec2 서버에 배포를 하는 것이다
결론만 말하자면 docker-compose up -d 명령어 만으로 배포가 된다는 것!
최종적으로는 http로 배포하지만, https로 배포는 나중에 포스팅할 예정이다.
물론 https배포 전, 이 과정은 필요하다
1. ec2 인스턴스 생성
이 부분은 모두 쉽게 할 수 있을 것이다
나는 aws 프리티어이기 때문에, 프리티어에사 사용가능한 서버를 대여해서 사용할 예정이다
1. 서버 이름 작성
2. os는 ubuntu를 선택하고
3. 프리티어에서 사용가능한 t2.micro 서버를 선택!
4. 키페어 생성!
5. 아래와 같은 옵션 선택을 진행해서 인스턴스를 생성하면 된다!

2. 인스턴스에 ssh 접근
인스턴스에 접근하기 위해서 ssh로 접근한다!
나는 mac환경이어서 ssh 접근이 가능하지만, window는 git bash를 사용해야 할거다!
ssh는 22번 포트로 접근하기 때문에 인스턴스 인바운드 규칙에서 22번포트로의 접근을 허용해주어야 한다!
방금 받은 내 Keypair의 접근 권한을 바꿔주기
sudo chmod 400 받은키페어를끌어다놓기
SSH로 접속하기 (ubuntu는 ubuntu os 의 서버에서 username)
ssh -i 받은키페어를끌어다놓기 ubuntu@publicIP
예) 아래와 비슷한 생김새!
ssh -i /path/my-key-pair.pem ubuntu@ec2-10.~~~~~.amazon.com
3. 프로젝트 빌드 후, docker-hub에 올리기
프로젝트를 빌드 후, 빌드한 파일을 dockerfile을 통해서 이미지로 빌드해서 도커 허브에다가 푸시를 할거다
그러면 docker-compose up -d 명령어 만으로도,
ec2 서버에서 최신 스프링 부트 이미지를 받아서 컨테이너를 실행시킬 수 있다.
1) 먼저 build를 하자!
2) build해서 .jar파일이 만들어졌으면, dockerfile로 spring boot 이미지를 만들자!
아래와 같이 Dockerfile을 만들어서 빌드하면 된다!
FROM openjdk:17-jdk-slim
ARG JAR_FILE=build/libs/SNAPSHOT이름.jar
COPY ${JAR_FILE} ./SNAPSHOT이름.jar
ENV TZ=Asia/Seoul
ENTRYPOINT ["java", "-jar", "./SNAPSHOT이름.jar"]
아래는 docker build 명령어다.
docker build -t dockerhub-username/이미지이름:tag명 .
build를 하면 이미지가 만들어지는데,
도커 허브에 푸시를 해보자!
아래와 같이 push 진행!
docker push 도커허브유저네임/이미지명:tag명
4. ec2에 docker, docker-compose 설치하기
ec2에 ssh로 접속한 뒤,
docker와 docker-compose를 설치해줘야 docker환경에서 컨테이너를 돌릴 수 있다.
1. 패키지 업데이트
sudo apt update
2. https관련 패키지 설치
sudo apt install apt-transport-https ca-certificates curl software-properties-common
3. docker repository 접근을 위한 gpg 키 설정
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
4. docker repository 등록
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
5. 다시 업데이트
sudo apt update
6. 도커 설치
sudo apt install docker-ce
7. 설치 확인
docker --version

위와 같이 도커의 버전이 나온다면, 도커 설치가 완료된 것이다!!
sudo 없이 docker명령어 사용하기
1. 현재 사용자를 docker group에 포함
sudo usermod -aG docker ${USER} - ubuntu os 이니, USER는 - ubuntu
2. 터미널 재시작 후 결과 확인(끝에 도커가 있는지 확인한다.)
id -nG

위와 같이 docker가 속해있다면 완료! 이제 명령어 앞에 sudo를 붙이지 않고 docker 명령어 사용이 가능하다.
docker-compose 설치
sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
권한 부여
sudo chmod +x /usr/local/bin/docker-compose

docker-compose --version을 통해서 위와 같이 확인이 된다면 설치가 된것이다!
5. ec2서버에 docker-compose.yml 작성하기
ec2 서버에 접속한 후, docker-compose.yml을 작성하고 싶은 폴더 위치로 이동해서
이와같이 docker-compose 파일을 작성하면 된다.
vi docker-compose.yml
아래 코드를 원하는 위치에 작성한 뒤,
version: '3.8'
services:
# PostgreSQL
postgres:
image: postgres:15
container_name: order-service-postgres
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
environment:
POSTGRES_USER: 이름
POSTGRES_PASSWORD: 비밀번호
POSTGRES_DB: DB이름
networks:
- order-service-network
# pgAdmin (PostgreSQL 관리 툴)
pgadmin:
image: dpage/pgadmin4
container_name: order-service-pgadmin
environment:
PGADMIN_DEFAULT_EMAIL: pgadmin 계정 Email
PGADMIN_DEFAULT_PASSWORD: pgadmin 계정 비밀번호
ports:
- "5050:80"
depends_on:
- postgres
networks:
- order-service-network
# Spring Boot Application
springboot-app:
image: 도커허브유저네임/이미지명:태그명 # Docker Hub에 올린 이미지
container_name: order-service-springboot
ports:
- "8080:8080"
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://db서비스이름:5432/DB이름
SPRING_DATASOURCE_USERNAME: 유저이름
SPRING_DATASOURCE_PASSWORD: 비밀번호
depends_on:
- postgres
networks:
- order-service-network
volumes:
postgres_data:
networks:
order-service-network:
driver: bridge
아래 명령어를 실행하면,
docker compose up -d
이와 같이 컨테이너가 돌아가면서, 프로젝트가 실행중인것을 알 수 있다!

6. CI/CD 가능
git으로 develop 브랜치에 최신버전을 푸시하고, main에 develop브랜치를 머지 한 뒤,
spring boot 프로젝트를 빌드하고, 이미지를 만들어서 도커허브에 푸시하고
최신이미지를 풀받아서, 도커 컨테이너를 실행시켜서, 프로젝트를 실행시키는
일련의 과정들을 모두 CI/CD 파이프라인을 구축하여 자동화 할 수 있다.
하지만 이건 다음 기회에, 오늘은 여기까지!~

'DevOps > AWS' 카테고리의 다른 글
조상님 볼 뻔한 ec2에서 Restemplate 통신하기 (container 환경에서) (0) | 2025.02.27 |
---|---|
ec2/로컬 에서 RDS에 접근 하기 (aws ec2, postgreSQL, pgadmin, 삽질에 중독된 개발자) (1) | 2025.02.21 |