springboot+mysql+docker 멀티 컨테이너 환경 구성 + ec2에서 실행하기[2]

ran·2023년 6월 2일

Docker

목록 보기
2/3

springboot+mysql+docker 멀티 컨테이너 환경 구성[1]
이전 글에 이어서 작성하도록 하겠다.
우선 이전글대로 따라할 경우 localhost에서 작동이 되는 모습을 볼 수 있었다.
이번 글에서는 ec2 ubuntu환경에 배포를 하고, 퍼블릭으로 접근하는 것을 해보려고 한다.

1. docker image docker hub에 업로드

빌드된 이미지를 docker hub에 올리려고 한다.

로컬에 docker를 실행해준 상태로 docker에 login한다.

docker login
id입력
pw입력

로그인이 성공하면 이미지를 push해준다.

docker push repository명:태그

단, 여기서 주의할 점은 image의 이름이 respository명:태그 형태여야한다.
ex)
위는 내가 생성한 레포지토리이다. 위의 이름을 따라서 이미지이름을 생성해야 도커허브에 push가 가능하다.

2. 도커 허브에서 pull하기

이제부터는 ec2환경에서 진행한다.

우선 ec2에 접속한다.

ssh -i "pem파일 이름.pem" ubuntu@ec2-퍼블릭 ip4

위의 명령어는 pem파일이 존재하는 디렉터리에서 진행해야 한다.

도커 설치

https://jjeongil.tistory.com/1968
위의 링크로 ubuntu에서 도커 설치하는 법을 대신하겠다.

이미지 pull

우선 위의 push와 동일하게 docker login을 진행해주고,
아래의 명령어를 이용하여 pull 해오면 된다.

docker pull repository명:태그

현재 mysql, spring application 두가지를 pull해오고, run하면 된다.

3. 컨테이너 run

그런데 여기서 문제가 발생한다. 이전 글을 읽어보면 mysql의 경우 이미지를 만들때 ubuntu환경에 맞는 플랫폼을 설정해줬다. 따라서 mysql은 맞게 run됐다.
하지만 application의 경우는 그냥 m1 mac의 플랫폼으로 이미지를 생성했던 것이다. 따라서 ec2상에서 application을 run하려고 하면 컨테이너가 계속 꺼지는 오류가 발생했다.

위와 같이 플랫폼이 맞지 않는다고, run이 되지 않았었다. 따라서 꼭 도커 이미지를 구축할때 올릴 서버를 플랫폼을 고려하여 이미지를 구축하도록 한다.

docker build --platform linux/amd64 -t 이미지명

위와 같은 명령어를 Dockerfile이 있는 어플리케이션 디렉토리에서 실행해줬다.
그리고 다시 도커허브에 push해주고, ec2상에서 다시 pull해서 run해줬다.

그 결과

너무 잘 작동한다!!!.
하지만,, 여기서 끝인줄 알았지,,?
기쁜 마음을 가지고 ec2의 퍼블릭 ipv4의 주소를 이용해 testController에 접근하려고 했다.(testController는 ec2상에서 접속이 되는지 확인하기 위해 임시로 만든 컨트롤러로 hi를 return해줌.)

도망치고 싶었다...
그래서 왜 접근이 안되는지를 찾아본 결과..!! AWS ec2 인스턴스의 인바운드 규칙이 로컬에서만 접근할 수 있도록 설정되어 있었다.
다행히(?) 어려운 문제는 아니라 금방 해결할 수 있었다.

4. ec2 인바운드 규칙 추가

EC2 탭에서 보안그룹에 들어가서 현재 인스턴스가 사용중인 보안그룹을 찾아 들어간다.

기존에는 위와 같이 두가지 포트 규칙만 있었다.
이제 추가로 8080이랑 3000번대 포트에서 아무데서나 들어 올 수 있도록 설정하자.(8080는 spring, 3000은 react)

이쯤되면 찐찐찐 최종느낌인데 과연,, hi가 뜰지 설레는(?)마음으로 ec2에서 해당 ip:8080을 치고 들어간다..

소리 질러!@!@!@!@!@!@!@!@!
진짜 행복한 마음을 가지고,, postman으로 구현한 api가 잘 작동되는지를 확인해본다..


두근구든... 위를 실행하면..
java.sql.SQLException: Incorrect string value: '\xEC\x82\xB0\xEC\x97\x85...' for column 'dept' at row 1 짜잔!! 에러가 발생합니다...
다음글에 이어서 적어보겠다. 다음글은 해당 프로젝트의 진짜 마지막 글이 될 것 같아요,,

profile
Backend Developer

0개의 댓글