이전에 도커 허브에 이미지를 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
도커를 설치 한 후,
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 로 접속을 해본다.
정상적으로 배포가 되었다.
'Docker' 카테고리의 다른 글
Springboot docker GitHub Action 연동하여 자동 배포하기 (1) | 2023.01.20 |
---|---|
도커허브 - docker requested access to the resource is denied (0) | 2023.01.14 |
Docker-compose를 작성해서 SpringBoot + MySql DB 서버 구동 (0) | 2023.01.14 |
댓글