본문 바로가기
Docker

[Docker] 웹 프로젝트 Doker 이미지를 통해 AWS EC2에 배포하기 (Spring Boot + MariaDB) (1) : DB 편

by weero 2021. 9. 6.

 

(사담)

원래는 Spring Boot 애플리케이션을 Kubernetes를 이용해 AWS EC2에 배포해보려고 했는데 워낙 어려워서 도커로만 먼저 배포해보기로 했다.

 

우선 Dockerfile을 이용해 프로젝트를 도커이미지로 만드는 것까진 동일한 듯 하다.

이걸 도커로 배포하느냐, 쿠버네티스로 배포하느냐의 차이인듯 하다.

 

 

이런 구조로 만들 예정이다!

전에 AWS EC2 환경을 어떻게 만들었는지, 만든 인스턴스에 접속하기 위해 PuTTY로 어떻게 접속하는지 포스팅 해두었다.

 

 

Docker

도커는 Environment Disparity를 해결해준다. 다른 머신에서도 같은 환경을 구성해준다는 말이다.

간략하게 아래와 같은 순서로 진행하면 된다.

1. 로컬과 서버에 둘 다 도커를 설치한다.

2. 도커 파일을 생성해서 구현하고 싶은 환경을 설정한다.(ubuntu, python, git 등)

3. 만든 도커 파일을 서버와 컴퓨터 둘 다에게 넣어두면, 도커는 도커 파일을 읽고 필요한걸 다운로드한다.

해당 설정한 환경과 같은 버츄얼 컨테이너를 서버와 컴퓨터에 만들게 된다.

4. 이제 컴퓨터(로컬)에서 서버로 도커파일과 코드를 함께 업로드하기만 하면 둘의 환경이 달라도 잘 작동된다.

 

 

사전 작업

위의 절차에서 설명한 것과 같이 로컬 컴퓨터와 서버 둘 다 도커를 설치해야 한다.

  • AWS EC2 리눅스 서버 상에는 어떻게 하는지 링크에서 설명해두었다. (https://dev2som.tistory.com/144)
  • 로컬 컴퓨터에는 Docker Hub를 다운로드 받으면 편하다. GitHub처럼 remote 저장소를 활용할 수 있다. 아래에서 설명할 예정!

 

 

 


 

 

 

Docker를 이용해 MariaDB 설치하고 기존 DB 덤프 파일 실행

= DB 배포하기

 

과정 1. Docker에 MariaDB Docker 컨테이너 설치

1-1. Docker 이미지 다운로드

docker pull mariadb

 

다음 명령어로 다운로드한 Docker 이미지를 확인할 수 있다.

docker images

 

1-2. MariaDB Docker 컨테이너 생성 및 실행

3306 포트로 설정해서 실행한다. (MariaDB와 MySQL의 포트번호)

docker run --name mariadb-container -e MYSQL_ROOT_PASSWORD=<password> -d -p 3306:3306 mariadb:latest

docker 이미지 중에서 mariadb 중 태그가 latest인 것에 대한 것이다. --name 옵션으로 컨테이너의 이름을 mariadb-container라고 붙여준다.

 

1-3. Docker 컨테이너 리스트 출력

docker ps -a

 

1-4. MariaDB Docker 컨테이너 시작/중지/재시작

# 컨테이너 중지
docker stop mariadb-container

# 컨테이너 시작
docker start mariadb-container

# 컨테이너 재시작
docker restart mariadb-container

 

1-5. MariaDB Docker 컨테이너 접속

자동으로 시작된다.

docker exec -it mariadb-container bash

제대로 들어가면 $에서 #라고 바뀌어 있다.

 

 


 

과정 2. 로컬(Windows)의 DB 덤프파일을 MariaDB 컨테이너에 옮기고 실행하기

2-1. OpenSSH Client 확인

Windows에서 AWS EC2 Linux 인스턴스로 옮겨야 하기 때문에, 윈도우10 기준으로 OpenSSH Client 기능이 활성화 되어 있어야 한다.

설정 > 앱 및 기능 > 선택적 기능

선택적 기능에서 OpenSSH 클라이언트가 있는지 확인한다.

 

2-2. Windows → Linux (AWS EC2 인스턴스) 파일 전송

파일 전송 (디렉토리의 경우 -r 옵션을 사용하면 된다.)

scp -i [pem_파일_경로] [윈도우_경로_파일.sql] [리눅스_계정]@[서버주소]:[목적경로.sql]

 

2-3. Linux → Docker 컨테이너 (MariaDB Docker 컨테이너) 파일 전송

docker cp [로컬경로/파일.sql] mariadb-container:/[목적경로/파일.sql]

(목적경로쪽은 /XXX.sql로 했다)

 

mariadb-container를 실행해서 ls 명령으로 확인해볼 수 있다.

 

2-4. MariaDB 실행 후 sql 파일 실행

# mariadb 접근
mariadb -h 127.0.0.1 -P 3306 -u root -p

# sql 파일 실행
source XXXX.sql