[AWS] Springboot + Mysql을 docker-compose로 한번에 ec2에 배포해보자
1. 서론
EC2 인스턴스를 만들었고, 프리티어를 사용한다면 스왑 메모리를 설정하여 가상메모리까지 확보했을 것이다.
이제 docker-compose를 사용하여 Springboot와 mysql을 docker 컨테이너 내에서 동시에 실행시켜보자.
2. 로컬환경에서 세팅
2.1 application.properties 환경변수 설정
spring.application.name=
# MySQL #
spring.datasource.url=jdbc:mysql://db:3306/{docker-compose db이름}
spring.datasource.username=root
spring.datasource.password={docker-compose설정 비번}
# JPA #
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.dialect=org.hibernate.dialect.MySQLDialect
우리는 docker-compse.yml를 사용하여 mysql와 springboot를 동시에 띄우기 위해 application.properties에는 docker-compose.yml에 들어갈 정보와 동일하게 입력 후 build 해줘야한다.
2.2 Dockerfile 작성하기
FROM openjdk:17
COPY build/libs/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
springboot 루트 경로에 Dockerfile 명으로 파일 생성 후, 위 내용을 작성한다.
위 내용을 간단하게 설명하자면 Java 17 환경에서 내 Spring Boot 앱의 JAR 파일을 복사해, 8080 포트에서 실행하는 의미이다.
2.3 빌드하기
./gradlew build -x test
배포 글을 살펴보자면 ./gradlew build 을 수행하라고 하는데 ./gradlew build를 수행하면 테스트까지 수행하기 때문에 DB 연결에서 실패해 build에 실패하게 된다.
실패하는 이유는 docker-compose로 ec2환경 내에서 springboot + mysql을 동시에 띄워야하기 때문에
springboot의 properties 내용은 docker-compose와 동일하게 맞췄기 때문에 없는 mysql을 연결을 시도했기 때문에 build에 실패하게 된다.
따라서 배포할 때는 위 명령어를 사용하여 테스트를 스킵한 뒤 빌드하면 된다.
2.4 도커 이미지 만들기
2.2스텝에서 Dockerfile을 만들었다면 docker로 build 후 dockerhub에 push 해보자
docker build -t [이미지이름]
build 후 도커 desktop으로 확인해보자
잘 올라왔다!
2.5 Docker Repository에 업로드
$ sudo push [이미지이름]
로컬에서의 환경은 이제 끝났다.
3. EC2 인스턴스 환경
3.1 EC2 인스턴스 만들기
https://dongyeop00.tistory.com/196
[AWS] 프리티어 ec2 인스턴스 생성해보기
1. 서론프론트와 백엔드를 개발 완료가 됐으면 로컬환경에서만 접속할 수 있는게 아닌, 외부, 외부 사람들이 접속해서 서비스를 이용하게 해보고 싶다. 로컬환경에서 ip와 포트 설정을 통해 Web Se
dongyeop00.tistory.com
.https://dongyeop00.tistory.com/197
[AWS] EC2 프리티어 t2.mircro 스왑 메모리(가상메모리)를 사용해보자
1. 서론개인 프로젝트 배포 시 서비스를 운영할 충분한 지갑사정이 여유롭지 않으면 EC2 프리티어를 사용하게 된다...하지만 프리티어를 사용할 수 있는 AMI는 램이 1GB밖에 되지않아 서버를 빌드
dongyeop00.tistory.com
프리티어를 사용중이라면 스왑 메모리를 사용해보자
4. EC2 배포
4.1 docker 설치하기
sudo apt update
sudo apt install docker.io
sudo apt install docker-compose
sudo systemctl start docker
sudo systemctl enable docker
설치가 완료됐다면
docker --version
docker-compose --version
위 명령어로 설치가 되었는지 확인해보자
4.2 docker-compose 작성
version: '3'
services:
db:
image: mysql:8
container_name: mysql-container
environment:
MYSQL_ROOT_PASSWORD: 비밀번호
MYSQL_DATABASE: db이름
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
restart: always
app:
image: 이미지이름:태그
container_name: springboot-container
ports:
- "8080:8080"
depends_on:
- db
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/db이름
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: 비밀번호
restart: always
volumes:
mysql-data:
$ nano docker-compose.yml
위 명령어를 사용하여 docker-compose.yml을 작성한다.
db이름과 비밀번호는 springboot의 properties에서 작성한 값과 동일하게 해야된다.
위 작성 내용은 docker에서 mysql의 이미지를 다운받아 db이름과 비밀번호를 설정한다.
app이후 내용은 image에서는 docker repository에서 자동으로 이미지를 pull하여 실행한다.
따라서 EC2 환경에서 pull 할 필요가 없다.
4.3 docker-compose.yml 실행
$ sudo docker-compose up -d
위 명령어를 사용하여 mysql과 springboot를 동시에 실행한다.
$ sudo docker ps
$ sudo logs [스프링부트이름] ex)springboot-container
로그를 보니 db연결과 실행이 잘 됐다.
5. 인바운드 규칙 설정
나의 EC2 인스턴스의 인바운드 규칙 편집에서 8080 포트와 3306 포트를 열어준다.
6. springboot 접속
나의 EC2 인스턴스 퍼블릭 IPv4 주소/DNS로 포트 8080으로 접속해본다.
굿 ^^