본문 바로가기
Docker

ec2 linux + docker + spirngboot 프로젝트 + mysql 연동 후 서버 띄우기

by YoonJong 2023. 1. 16.
728x90

이전에 도커 허브에 이미지를 push 하는 방법까지 진행한 후, ec2 에 배포하는 과정에 또 많은 시간이 걸렸다.

도커를 통해 배포가 계속 실패하니, 다른방법이 없을까 하고 찾아보았는데 ec2 서버에 git clone 을 해서 build 후

생성한 dockercompose 파일을 실행시키는 방법도 있었다.

해봤는데 프리티어라 그런지 용량이 초과되어서 서버가 그냥 먹통이되어버렸다.

 

그만큼 도커에서 하면 그런 부담없이 배포가 가능하며, 어떤 OS 환경에서도 같은 환경을 사용할 수 있는점이 가장 큰 장점이 아닐까 직접 느낄 수 있었다.


목표는 ec2 에 배포 후 설정한 탄력적 IP 를 통해 swagger 를 배포하는 것이다.

 

먼저, 도커 허브에 올려져 있는 이미지를 생성한 ec2에서 pull 해주어야 한다.

( ec2 보안설정은 필수 ! )

putty 를 사용해서 ec2 에 접속한 후, Docker 를 설치해 준다.

 

설치과정은 워낙많아 블로그를 참고 및 공유.

https://velog.io/@hmyanghm/AWS-EC2%EC%97%90-Docker-%EC%84%A4%EC%B9%98

 

📙 AWS EC2에 Docker 설치

앞서 AWS EC2에 Jenkins를 연결하는 글을 작성했는데 그 다음 Jenkins가 스스로 도커 컨테이너를 이용해 빌드와 테스트를 할 수 있도록 하려고 한다. 😄

velog.io

 

도커를 설치 한 후,

docker login -u 도커아이디 를 입력하고 password 를 입력한다.

로그인이 되면

docker pull 이미지 를 입력해 pull 한다.

ex) docker pull dbswhd493/mysql:8.0  그리고 docker pull dbswhd493/application:latest

 

이미지가 pull 정상적으로 되면 sudo docker images 를 통해 확인한다.

 

 

나는 여기서부터 진짜 별행동을 다하느라 너무 많이 테스트를 했다 ( 성공했으니 됐다 )

일반 로컬 docker 에서 진행했을 때는 docker-compose up -d 를 하면 그냥 연결이 되었다.

그래서 ec2 에서 이미지를 가져와서 그대로 mysql -> application 순으로 실행하면 될줄 알았는데, 세상에나 db 연결이 안되었다

 

연결이 안됐다고 하니 서로 연결을 해주어야 한다.

docker network 를 이용해야했다.

 

나는 springboot-mysql-net 이라는 network를 생성했다.

sudo docker network springboot-mysql-net 

sudo docker network ls  : 생성되었는지 확인

 

이제 mysql 이랑 application 을 연결해야 한다.

 

연동을 할때 모든 환경변수를 꼭 작성해주어야 한다. ( 이거때문에 연결이 안되었다 )

작성한 docker-compose 파일을 보고 작성해도 되고, 로컬에서 작성한 docker 컨테이너의 inspect 를 보고 작성해도 된다.

 

먼저 mysql 을 연결해주었다.

 sudo docker run -p 3306:3306 --name mysql_db --network springboot-mysql-net -e MYSQL_ROOT_HOST='%' -e MYSQL_ROOT_PASSWORD=1234 -e MYSQL_DATABASE=shop -d dbswhd493/mysql:8.0

 

services:
  database:
    container_name: mysql_db
    image: mysql/mysql-server:8.0
    restart: always
    environment:
      MYSQL_DATABASE: shop
      MYSQL_ROOT_HOST: '%'
      MYSQL_ROOT_PASSWORD: 1234

포트는 3306:3306 

컨테이너이름은 mysql_db

연결할 네트워크는 springboot-mysql-net

환경설정 (-e) 는 나와있는데로 작성

실행할 이미지는 dbswhd493/mysql:80 


그다음 application을 연결해주었다.

 sudo docker run -p 8080:8080 --name application --network springboot-mysql-net  -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=1234 -e SPRING_DATASOURCE_URL=jdbc:mysql://mysql_db:3306/shop -d dbswhd493/application:latest

 

작성방법은 똑같다. 꼭 작성해주어야할것은 DB 에 관한 환경변수도 꼭 넣어주어야 한다.

 

이렇게 작성하고 network에 잘 연동되었는지 확인해본다.

만약 mysql은 실행되었는데 application 연동이 안되었다면 mysql만 network에 올라온다.

sudo docker network inspect springboot-mysql-net : 특정 네트워크 상세보기

 

잘 연동이 되었다. 

이제 탄력적IP 로 접속을 해본다.

 

정상적으로 배포가 되었다.

 

728x90

댓글