EC2에 mysql을 docker를 이용해서 올려보자
https://hanjungyo.tistory.com/74
EC2에 docker가 설치되어있지 않다면 위 링크의 docker 설치하기 부분을 참고
EC2에 ssh로 접속을 하고
MySQL Docker Image 다운로드
sudo docker pull mysql // 제일 최신 버전 다운로드
// latest는 9.0인데 비밀번호 설정에서 오류가 나서 8.0을 사용하기 위해 버전 명시
sudo docker pull mysql:8.0
Docker Volume 설정
Docker에서는 컨테이너가 삭제되면 할당된 볼륨(메모리)도 함께 삭제됨
=> MySQL용 볼륨을 따로 Docker에 할당 해주고, 마운팅을 해주면 영구적으로 데이터를 보존할 수 있음
docker volume create mysql-volume
이렇게 docker volume을 생성하여 데이터 저장소로 사용할 수 있는데 이 데이터 저장소는 컨테이너의 라이프사이클과는 독립적임!
EC2에 Docker를 설치했을텐데 docker Volume을 생성하게되면 호스트 시스템의 /var/lib/docker/volumes/ 경로에 저장
volume 이름을 mysql-volume으로 생성했으므로 /var/lib/docker/volumes/mysql-volume/_data/로 호스트 시스템 (여기서는 docker를 설치한 EC2)의 파일 경로에 데이터를 저장하게됨
하지만!! 컨테이너를 실행할 때 특별히 볼륨을 마운트하지 않으면, 모든 데이터는 컨테이너의 파일 시스템 안에만 존재하게 됨
이를 위해 docker run 으로 컨테이너를 실행할 때
-v mysql-volume:/var/lib/mysql 와 같은 옵션을 이용하여 볼륨을 마운트하는데
MySQL 컨테이너의 /var/lib/mysql 디렉토리가
이 디렉토리는 EC2의 파일 시스템에 있는 디렉토리가 아니라 MySQL이 실행되는 컨테이너의 파일 시스템에 있는 디렉토리임
=> MySQL 컨테이너는 기본적으로 독립적인 파일 시스템을 가지고 있으며, 이 파일 시스템 내에 /var/lib/mysql 디렉토리가 MySQL 데이터 파일을 저장하는 기본 위치임
EC2의 파일 시스템에 있는 디렉토리 (여기서는 mysql-volume) 즉, /var/lib/docker/volumes/mysql-volume/_data/ 와 연결됨!
이 연결을 통해, MySQL 컨테이너 내에서 /var/lib/mysql 에 쓰여진 모든 데이터는 실제로는 호스트(EC2)의 볼륨 디렉토리에 저장되게 됨
=> MySQL 컨테이너를 삭제하더라도 호스트의 데이터는 그대로 남아 있음
만약 MySQL 컨테이너가 삭제되었을 경우 동일한 볼륨을 다시 마운트하여 MySQL 컨테이너를 실행하면, 이전과 동일한 /var/lib/mysql 경로로 다시 연결 되기 때문에, 기존 데이터가 그대로 남아있어 바로 사용 가능함!
MySQL 컨테이너 생성 & 실행
sudo docker run --name mysql-container -v mysql-volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=[패스워드] -d -p 3306:3306 mysql:8.0
'--name' : 생성될 컨테이너의 이름을 지정
'-v' : 바로 이전 docker 볼륨에서 설명함
'-e MYSQL_ROOT_PASSWORD=[패스워드]' : 컨테이너 내에서 MySQL의 루트 사용자(root) 비밀번호를 설정하기 위한 환경 변수
'-d' : 백그라운드에서 실행 (터미널 점유 x)
'-p host : container' : 호스트의 포트와 컨테이너 포트를 매핑
EC2 MySQL Docker 컨테이너 접속
// bash로 mysql 컨테이너 접근
sudo docker exec -it mysql-container bash
// 설정한 password 입력
mysql -u root -p
'-i' : 표준 입력을 활성화(interactive mode)하는 역할
=> 명령어를 입력할 수 있도록 컨테이너와의 입력 스트림을 유지함
'-t' : 가상 터미널(pseudo-TTY)을 할당함
=> 명령어를 실행할 때 터미널 세션을 제공하는 역할을
(여기서는 bash 쉘 사용)
DB 테스트 시 주의 사항
MySQL Workbench 에서 hostname에 컨테이너를 올린 EC2의 퍼블릭 ip 주소를 적어주고
username 은 root에 이전에 설정했던 비밀번호를 입력해서 연결하면 된다!
=> 만약 docker exec를 이용해 bash로 MySQL 컨테이너 접근해서 user를 생성했다면 접근 권한을 부여하고 연결할 username에 해당 username을 적어주면 됨
MySQL에서 비밀번호 변경이나 User 생성은 구글링을 해보자!
EC2 보안 그룹에서 3306 (MySQL) 포트에 대해 인바운드 규칙을 추가해줘야 함!
'Infra > AWS' 카테고리의 다른 글
Cloud Network (3) | 2024.10.16 |
---|---|
Cloud Basic Service (13) | 2024.10.14 |
Distributed System (5) | 2024.10.06 |
AWS EC2 메모리 부족 현상 해결 (Swap Memory) (1) | 2024.09.12 |
Permissions for '*.pem' are too open 에러 해결 (0) | 2024.04.06 |