본문 바로가기
DEVOPS

AWS EC2 설정 > DOCKER > MYSQL 설치 및 세팅

by DanteMustDie 2023. 10. 24.
728x90

0. 시작하기 앞서

Kernel360 커리큘럼을 진행하면서 얼떨결에 예상과는 다르게 바로 db 및 개발환경 연동 세팅을 진행하게 되었다.

로컬환경에서 mysql을 올리면 당장의 환경설정은 쉽지만, 팀원 모두가 같은 db를 바라봐야 하므로

무아지경으로 만지작 하다보니 예상보다 빠르게 ec2 설정, docker 설치 및 mysql 까지 설치를 했다.

까먹기전에 리마인드 하기위해 기록 한 글이며, 이 과정은 제목대로의 설치 및 설정 과정을 거친다.

 

혹시나 이 글을 보고 따라하는 이로 하여금 발생하는 궁금한 사항은 스스로 해결해야한다.

또한, 이 작은 내용이라도 읽는 사람이 빨리 이해 하는 것이 목적이므로 전문성과 거리가 먼 표현이 나올 수 있는 점 참고바란다.

 

저번글에도 작성했지만 기술의 영역은 당연히 정확한 정보 전달이 가장 중요합니다 ^^ 다만, 읽는 사람으로 하여금 눈높이에 맞는 이해도 중요하다 생각합니다. 제 글의 방향은 표현이 저렴해도 빠른 이해를 주 목적으로 합니다.

 

아무튼, 이미 구축 완료 된 환경에서 역추적하여 최대한 담아내는 글이므로 실제 따라하는 환경과 오차가 있을 수 있으며

세월이 지난 후 이 글을 다시보면 설치 환경도 많이 바뀔 수 있다. 최신정보를 필요로 한다면, 검색을 생활화 하자.

 

독학으로 1시간 정도 진행해서 설정 꾸역꾸역 한거같은데 잠깐 같은 팀원으로 활동하고 다른 커리큘럼으로 떠난 박** 님께서 구름io를 소개해주시고 미리 써본 덕분에 이 과정을 보다 빨리 이해 할 수 있었다. 이 글을 읽으실진 모르겠지만 무한한 감사를 드립니다.

 

1. AWS EC2 설정

EC2는, 아마존 공식 사이트에 의하면

'Amazon Elastic Compute Cloud(Amazon EC2)는 Amazon Web Services(AWS) 클라우드에서 온디맨드 확장 가능 컴퓨팅 용량을 제공합니다.'

라고 하는데, 쉽게 말하면 인터넷으로 쓸 수 있는 원격 컴퓨터라고 이해하면 되며 이를 인스턴스라고 AWS에선 표현한다

우리가 쓰는 pc처럼 자원을 주고, os를 깡통으로 설치 해준다. 우리는 그 위에 필요한 것들을 설치해서 쓰면 된다.

이 개념을 이해못하면 어떻게 써야하는지 갈피를 못잡는다.

 

과정을 따라하기 앞서 미리 아마존 AWS 계정 생성을 마쳐야한다. 가입절차는 쉬우므로 별도 설명 x

AWS 로그인 후 이렇게 콘솔 홈이 보일텐데, 좌측 중간에 '솔루션 구축' 메뉴의 가상 머신 시작을 선택한다.

페이지가 이동되면 다음과 같은 다양한 항목들이 나오는데, quick start에서 '적절'하게 OS를 선택하고 하단의 AMI는 프리티어를 선택하면 된다. 

그 다음 이어서 나오는 항목들에 대해서도 '적절히' 선택해준다.

중요한점은, AMI와 인스턴스 둘다 프리티어를 사용해야 aws에서 기본으로 제공하는 무료 리소스를 사용 할 수 있다.

인스턴스는 한달 단위로 무료 사용 데이터 양이 정해져있으며 초과하면 사용량만큼 과금된다. (휴대폰 요금제 생각하면 편하다 ^^)

키페어는 공개키를 발급받는 것을 의미하며, 폰뱅킹의 공동인증서, 금융인증서를 생각하면 이해가 빠르다.

단순 id pw만으론 보안의 한계가 있으니, 안전하게 보안키를 별도로 쓰는 것이다.

이 부분에 관심이 있다면 암호화, 복호화, 해시함수, 인코딩, 디코딩 5가지를 공부해봄직하다.

 

네트워크 설정 부분은 당장은 딱히 설정 할 부분이 없으나, 공유기 설정을 좀 만져본 사람은 항목들 보면서 대충 감이 올것이다.

 

이후, 스토리지 구성과 그 밑에 다른 메뉴들이 있는데 고급 세부 정보를 config 할 일이 있다면 당신은 이 글을 볼 이유가 없는 사람일 것이므로 신경쓰지 않아도 된다. 프리티어의 경우 스토리지를 30기가 제공해준다. 별개로 쪼개 할당할 일이 없다면 30기가 꽉 채워준다.

 

설정이 끝났다면 공개키 발급 안내 화면이 나오고 파일을 다운받을 수 있으며, 인스턴스 시작을 통해 실행 할 수 있다.

과정을 마치면 위와같은 화면이 나올것이며, 친숙한(?) 터미널로 접속하려면 SSH 클라이언트 탭에서 공개키 발급 후 정보를 받아 쓰면 된다.
대시보드에서 인스턴스 현황을 확인 할 수 있으며, 우측 상단 메뉴를 통해 연결 정보 확인이나 인스턴스를 설정 할 수 있다.

 

2. AWS EC2 접속

설정을 마친 후, 대시보드에서 '인스턴스' 항목에 들어가면 만들어진 인스턴스를 실행 할 수 있는데,

대시보드에선 어떻게 돌아가는지 가볍게 정보를 표시해주는 정도이며 실질적인 조작을 하려면 터미널이나 기타 방법을 통해 접근해야한다.

 

위와같이 발급받은 공개키를 통해 SSH 명령어로 접근이 가능하다.

이 과정을 진행하다보면 공개키의 파일 권한이 너무 개방(?)되어있어 안전하지 않으므로 접속을 허용하지 않는다는 에러가 발생하는데, 리눅스/맥OS에선 chmod를 통해 파일권한을 바꿔주면 되며 보편적으로 파일권한을 400으로 바꾼다.

여기서 개방의 의미는 파일 위변조 발생 가능성이 있음을 말하는 것이라 생각한다. ^^

windows11에선 별도의 전용 명령어를 통해 파일 권한을 수정해주면 더 이상 에러가 발생하지 않는다.

혹시나 하고 파일 우클릭 읽기전용을 해봤는데, 이걸론 해결이 안된다. (윈도우도 리눅스처럼 그룹, 권한 개념이 있다.)

위와 같은 에러가 발생한다면, 공개키 파일의 권한을 바꿔줘야 한다.

icacls.exe "공개키파일" /reset
icacls.exe "공개키파일" /grant:r %username%:(R)
icacls.exe "공개키파일" /inheritance:r

위 명령어를 절차대로 cmd에서 실행하면 윈도우 환경에서 파일 권한이 바뀐다.

apt-get 업데이트를 최우선으로 해주어야 한다.

이후 접속하여 apt-get을 쓸 수 있도록 업데이트를 하면 되며, 기존의 리눅스 환경에서 docker를 설치하듯 진행하면 된다.

 

3. DOCKER 설치하기

도커는 짧고 이해하기 빠르게 설명하자면 가상OS 시스템에서 가상OS(Virturl OS)가 빠진 녀석이다.

게임 좋아하는 사람중에 에뮬레이터에 관심이 있거나 써본적 있다면 가상OS 이해가 굉장히 빠르게 될 것이다. (동일 구조)

 

가상OS시스템은 메인OS의 리소스를 일부 할당받아 그 자원으로 또 하나의 가상 OS를 부팅시키며,

가상OS가 부팅 된 후의 잉여 자원을 활용 할 수 있는데 DOCKER는 이 가상OS가 빠진 환경이라고 받아들이면

아주 극 초보적인 관점에서 이해가 편하다.

OS의 영향을 받지 않아, 동일한 리소스만 제공해 준다면 동일한 환경을 만들 수 있는점이 가장 큰 장점이다.

자세한 것은 도커에 관심이 생기면 검색해서 기본 개념부터 이해하기를 꼭 권장한다! (저도 계속 공부해야합니다.. ^^)

 

리눅스에서 도커를 설치하는 방법은 공식 홈페이지에 매우 잘 나와있다.

매우 친절하게도 스크립트를 통째로 제공해주므로, 차분히 Ctrl CV하며 따라하면 된다.

https://docs.docker.com/engine/install/ubuntu/

과정을 살펴보면 구버전 삭제 > 도커 리포지터리 및 공개키 설정 > 도커 설치 순이다.

각각 메뉴를 간단히 설명하면서 alt 항목에 커맨드를 넣어둘테니 이 부분을 필요시 복사해서 쓰면 된다.

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

 

이부분은 멀티라인이므로 별개 작성

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3번은 코딩 뉴비여도 아는 내용이니까 생략

정상 설치 되었다면 docker -v를 통해 설치 버전을 확인 할 수 있다.

버전 확인 후 usermod -aG docker ubuntu 명령어를 통해 사용자 계정의 그룹을 'docker'에 포함시켜 sudo를 쓰지 않고도 docker 명령어를 쉽게 쓸 수 있도록 바꾼다. 이 후, 터미널을 재시작하면 sudo 명령어를 넣지 않아도 도커를 편히 쓸 수 있다.

 

usermod {option} [account]

{option} 속성값 ▶ -a : 사용자를 그룹에 추가 

                         ▶ -G : 이 옵션의 공백 다음에 나오는 그룹명을 명령어 대상으로 지정

                         ▶ [account] : 계정

 

도커의 명령어는 각 depth마다 매우 다양하므로, 필요에 따라 검색하거나 --help를 통해 찾아 사용한다.

 

4.DOCKER에 MYSQL 설치

docker pull mysql을 입력하면 최신 버전의 mysql을 자동으로 다운받으며, 완료 된 후 docker images를 입력하면

받아진 정보를 확인 할 수 있다. 각 항목이 뭐가있는지는 몰라도 images 명령어는 기억해둬야 찾아 쓰기 편하다.

docker run --name {mysql-container} -e MYSQL_ROOT_PASSWORD={password} -d -p [host]:[container] mysql:latest

run --name {container_name} : {container_name} 이름의 컨테이너 실행

● -e : 컨테이너 환경변수 설정

● -e MYSQL_ROOT_PASSWORD=<password> : ROOT 계정 초기 비밀번호 설정

● -d : detach 모드로 컨테이너가 실행. (background launch)

● -p {host} {container} : 호스트와 컨테이너의 포트를 연결 (당장은 외부포트/내부포트로 이해하면 편하다)

● mysql:latest : 컨테이너 이미지


이 명령어를 기입하면 새롭게 도커에서 mysql 컨테이너가 생성되며 바로 실행된다.

도커를 실행하는 모드는 포어그라운드, 데몬 등 다양하므로 작성자도 추가적인 공부가 필요하다.

 

필요에 따라 도커 컨테이너의 시작과 종료시키는 명령어는 docker {start/stop} {container id} 이며, 

컨테이너 id를 알려면 docker ps -a 명령어를 사용하면 된다.

 

5. 컨테이너 mysql 접속 및 계정 설정, EC2 인바운드 규칙 설정

mysql 접속 후, 로그인하는 과정.

부트 된 컨테이너에 bash 쉘을 통해 접속

$docker exec -it mysql-container bash

 

mysql root 계정으로 접속 후 외부포트 접속 허용하는 신규계정 생성 및 privilege 부여

bash# mysql -u root -p (이후 터미널에서 password 입력 요구시 password 입력)

 

mysql> create user {계정명}@'%' identified by {password};

mysql> grant all privileges on *.* to {계정명}@'%';

mysql> flush privileges;

 

여기서 계정명 @다음 '%'는 모든 외부ip에서 접속이 가능함을 의미한다.

grant로 권한 부여를 지정하고, flush privileges를 해야 변경사항이 적용된다.

dbms의 프리빌리지는 각 벤더마다 다양하므로 관심있으면 찾아보는 것을 추천한다.

 

신규계정으로 로그인하여 개발시 사용할 database 생성

mysql> create database {db명};

 

EC2 보안그룹에서 인바운드 규칙 (mysql 외부포트) 추가. 공유기의 포트포워딩(DMZ)과 같다고 생각하면 편하다. ^^

 

이후 SQL Editor에서 public IPv4 : 외부포트, database, username(id), password 작성 후 connection test 통과하면 끝~

 

 

과정 진행중 이해 안되는 부분이 있다면 제가 찾아 읽으면서 참조한 밑의 글들을 읽어보실 것을 추천드립니다 ! ^^

 

Ref :: 

https://dabid.tistory.com/11

 

윈도우10에서 SSH 접속 시 pem 파일 권한변경

EC2 인스턴스를 SSH로 접속하고 싶을 때는, pem 파일을 활용해야 한다. 그런데 보안특성 상 AWS 홈페이지에서 다운받은 pem 파일을 그대로 사용하면 permission 에러가 난다. 파일 자체에 권한이 너무 많

dabid.tistory.com

https://jinjinyang.tistory.com/46

 

[AWS] EC2 Linux에 Docker 설치하기

먼저, aws 무료 버전 인스턴스를 생성하고자 한다. 1. aws 사이트에 접속하여 개인계정을 생성한다. (aws 프리티어 서비스를 이용하면 1년 무료로 사용가능 함) https://aws.amazon.com/ko/ 클라우드 서비스

jinjinyang.tistory.com

 

 

+ 23.11.02

순정 상태의 ec2 free tier를 사용하면 램이 매우 적기 때문에
https://repost.aws/ko/knowledge-center/ec2-memory-swap-file

 

스왑 파일을 사용하여 Amazon EC2 인스턴스의 스왑 공간으로 메모리 할당

Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 스왑 파일로 사용할 메모리를 할당하려고 합니다. 어떻게 해야 하나요?

repost.aws

이 작업을 추가로 해주는 것이 좋다.


+23.11.10
OCI의 경우 포트번호 변경시, iptables의 포트정책도 같이 수정해주어야 한다.
https://hoing.io/archives/174

 

오라클 클라우드 - SSH 포트 변경 - Oracle Cloud - SSH Port 변경

 

hoing.io

 

+23.11.17 (월)
mysql:latest (8버전) 에서 vim 이용이 필요 할 경우
mysql 컨테이너의 bash 터미널로 접속해서 " microdnf install vim " 을 통해 설치한다.
컨테이너는 최대한 가볍게 세팅되어 돌아가야 하므로 불필요 라이브러리 설치를 지양한다. 그래서 apt, yam 등 보편적인 패키지 설치 매니저가 없다.
https://okky.kr/questions/1413470

 

OKKY - docker 로 mysql8 을 container 로 띄운후 vim 설치안되요. 혹시 아시는분...

일단 docker 만들고 이미지를 아래와 같은 명령어로 진행했어요.docker run -d --platform linux/amd64 -p 3306:3306 -e MYSQL_ROOT_PASSWORD='root' --name db-mysql8 mysql:8.0.31 --lower_case_table_names=1그후 .docker

okky.kr

 

+ 24.01.08 (월)

알마리눅스 9 환경에서 도커를 설치하려면 패키지 인스톨러가 다르므로 아래의 과정을 거쳐야 한다.

https://www.howtoforge.com/docker-ce-on-alma-linux-9-a-quick-and-easy-installation-guide/

 

Docker CE on Alma Linux 9: A Quick and Easy Installation Guide

Docker is an OpenSource software that provides OS-level virtualization for developing, shipping, and running applications. In this guide, you will lea...

www.howtoforge.com

또는
https://docs.docker.com/engine/install/fedora/#set-up-the-repository

 

Install Docker Engine on Fedora

Learn how to install Docker Engine on Fedora. These instructions cover the different installation methods, how to uninstall, and next steps.

docs.docker.com

 

반응형