AWS로 Docker 사용하기
AWS EC2 이용하기
- AWS에 접속해서 콘솔에서 EC2를 검색한다.
- 지역은 '서울'로 지정한다.
- "인스턴스 시작"을 클릭해서 새로운 인스턴스를 만든다.
- Ubuntu Server 18.04 LTS를 이용할 것이다.
- 인스턴스 유형은 t2.micro를 이용한다.(프리티어)
- 그 다음 세부 정보에는 추가할 것이 없다.
- 스토리지 추가는 하지 않고 기본 8기가로 한다.
- 태그 추가도 하지 않는다.
- 보안 그룹 구성
- 기본으로 22번 포트만 열려 있다. 이는 SSH를 위한 포트이다.
- 새로 추가해서 80을 연다. 이는 nginx이며 '설명'에 nginx라고 적어주어도 된다. 소스는 위의 것을 복사한다.
- flask를 위한 5000번 포트를 추가한다. 소스는 위의 것을 복사한다. 설명에 flask를 추가해 주면 좋다.
👉 나중에는 접근 가능한 포트를 정해줄 수 있지만 현재는 중요한 정보가 없으므로 놔둔다.
- 5001번 포트도 추가한다. 소스는 위와 같이 하고 설명에 flask라고 추가한다.
👉 나중에 mysql을 쓰려면 mysql을 위한 포트도 열어 주어야 한다.(3600)
- 시작하기를 누른다.
- '기존 키 페어 선택 또는 새 키 페어 생성'이 나오게 되는데, 서버도 접속을 위한 비밀번호가 필요하다. 따라서 새 키 페어를 생성하고, 키 페어 이름에 임시로 'docker-practice'라고 적는다. 키 페어도 다운로드 한다.(다운받지 않고 시작을 누르면 서버에 접속할 수 가 없다.)
SSH 접속 : PuTTY, PuTTYgen 다운받기(윈도우용)
- SSH 접속을 위해 사용하는 프로그램
- 입문용으로 많이 사용한다.
- putty 다운로드
- Alternative binary file 64bit를 다운 받는다.
- 아래쪽에 puttygen이 있는데 이는 키 파일을 변환해주는 프로그램으로, 동일한 페이지 아래쪽에서 다운 받을 수 있다.
- 이제 putty로 EC2에 접속한다.
- Host Name에 AWS에 만들었던 인스턴스에서 ipv4 주소를 복사해서 붙여넣는다.(DNS를 사용해도 된다.)
- 넘어가기 전에 puttygen에서 import key를 눌러서 .pem key file 다운 받은 것을 열고 'save private key'를 클릭한다.(클릭시 패스워드를 입력하라는 내용이 나오는데 입력하지 않아도 괜찮다.)
- .pem-key를 바탕화면에 저장하게 된다.(docker-practice로 저장한다.)
- 다시 putty로 넘어와서 좌측 카테고리의 SSH > Auth에 가서 만들어진 'docker-practice.ppk' 파일을 선택하고 'open'을 누른다.
- login as: 뒤에 ubuntu 엔터를 친다.
- Saved sessions에 'docker-practice-ec2'라고 세션을 저장해 놓으면 껐다 켜도 새롭게 입력 안하고 접속이 가능하다.
SSH 접속 : Terminal (Mac용)
- .pem key가 다운로드 되어 있으면 이를 사용해야 하니 경로를 파악해 둔다.
- 아래의 명령어를 이용해 찾아볼 수 있다.(이름에 docker가 있으니까)
ll | grep docker
- 접속하기
- 아래의 ubuntu는 id이다.(os를 ubuntu로 설정해 놓았기 때문이다.)
ssh -i ~/Downdloads/doker-practice.pem ububtu@<ipv4 주소>
- SSH 접속 후 종료하려면(참고 : ssh의 기본 접속 포트는 22이다.)
- 만약 접속이 안되면 pem key의 권한을 변경 후 다시 접속하면 된다.
chmod 400 ~/Downdloads/doker-practice.pem
AWS EC2에 Docker 설치하기
$ sudo apt-get update
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) 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' 명령어를 입력해서 잘 설치 되었는지 확인한다.
AWS EC2에 Nginx 띄우기
- 일단 ubuntu 가상 머신에서 관리자 권한으로 들어간다.
$ sudo su -
👉 @ 앞 부분이 'root'로 바뀌면 잘 된 것이다.
- Nginx 띄우기
👉 이미지가 받아지고 Nginx가 실행된다.
docker run -p 80:80 nginx
👉 이제 DNS 이용해 웹 브라우저로 접속한다.
AWS EC2에 Flask app 띄우기
- 다시 가상 서버에 접속한다.
- "mkdir python_flask" 명령어로 디렉토리를 생성한다.
- 디렉토리로 이동 한다.
- "vim app.py" 이용해 파일을 하나 생성하고 기존에 만들어 놓았던 app.py의 내용을 적어 놓는다.
- Flask를 install 한다.(이전에 python3-pip부터 설치한다.)
$ apt install pyton3-pip
$ pip3 install flask
pip3 freeze
python3 app.py
- EC2에 생성해 놓은 인스턴스의 퍼블릭 ipv4로 이동한다.
👉 단, 포트 5000번을 뒤에 적어 주어야 한다.
⚡ vim에서 단어 단위로 이동하려면 'w', 단어를 뒤로 이동하려면 'b'를 누르면 된다.
⚡ 복사한 내용을 vim에 붙여 넣으려면 'p' or shift + insert or 마우스 오른쪽 클릭을 이용하면 된다.
⚡ 만약 Flask 앱은 5000번 포트를 사용하고 있고 보안 그룹에는 22, 80, 5001 포트만 열려 있다면 flask 앱으로 만든 컨테이너는 다음과 같이 실행한다.
docker run -d -p 5001:5000 flask-app
⚡ ubuntu의 oh-my-bash에서 'tab'을 이용하면 명령어가 자동완성 된다.
Dockerfile로 image 만들고 띄우기
- 위에서 만든 python_flask 디렉토리에서 작업한다.
- 만들어 놓았던 Dockerfile을 전체 복사해서 vim으로 붙여 넣는다.
- flask-app을 빌드한다.(Image가 빌드 된다.)
$ docker build -t flask-app .
$ docker images
$ docker run -d -p 5000:5000 flask-app
$ docker ps
⚡ AWS에서 필요 없는 인스턴스는 꼭 중지 또는 종료해야 한다.
👉 나중에 잊고 과금 되는 경우가 있을 수 있다!
⚡ 보통 docker만을 이용해 배포하지는 않고 cubernetes, AWS ECK 등을 이용한다.