Docker | AWS EC2 띄우기

Jihun Kim·2021년 10월 8일
0

Docker

목록 보기
3/3
post-thumbnail

AWS로 Docker 사용하기

AWS EC2 이용하기

  1. AWS에 접속해서 콘솔에서 EC2를 검색한다.
  2. 지역은 '서울'로 지정한다.
  3. "인스턴스 시작"을 클릭해서 새로운 인스턴스를 만든다.
  4. Ubuntu Server 18.04 LTS를 이용할 것이다.
  5. 인스턴스 유형은 t2.micro를 이용한다.(프리티어)
  6. 그 다음 세부 정보에는 추가할 것이 없다.
  7. 스토리지 추가는 하지 않고 기본 8기가로 한다.
  8. 태그 추가도 하지 않는다.
  9. 보안 그룹 구성
  • 기본으로 22번 포트만 열려 있다. 이는 SSH를 위한 포트이다.
  • 새로 추가해서 80을 연다. 이는 nginx이며 '설명'에 nginx라고 적어주어도 된다. 소스는 위의 것을 복사한다.
  • flask를 위한 5000번 포트를 추가한다. 소스는 위의 것을 복사한다. 설명에 flask를 추가해 주면 좋다.
    👉 나중에는 접근 가능한 포트를 정해줄 수 있지만 현재는 중요한 정보가 없으므로 놔둔다.
  • 5001번 포트도 추가한다. 소스는 위와 같이 하고 설명에 flask라고 추가한다.
    👉 나중에 mysql을 쓰려면 mysql을 위한 포트도 열어 주어야 한다.(3600)
  1. 시작하기를 누른다.
  2. '기존 키 페어 선택 또는 새 키 페어 생성'이 나오게 되는데, 서버도 접속을 위한 비밀번호가 필요하다. 따라서 새 키 페어를 생성하고, 키 페어 이름에 임시로 'docker-practice'라고 적는다. 키 페어도 다운로드 한다.(다운받지 않고 시작을 누르면 서버에 접속할 수 가 없다.)

SSH 접속 : PuTTY, PuTTYgen 다운받기(윈도우용)

  • SSH 접속을 위해 사용하는 프로그램
  • 입문용으로 많이 사용한다.
  1. putty 다운로드
  • Alternative binary file 64bit를 다운 받는다.
  1. 아래쪽에 puttygen이 있는데 이는 키 파일을 변환해주는 프로그램으로, 동일한 페이지 아래쪽에서 다운 받을 수 있다.
  2. 이제 putty로 EC2에 접속한다.
  3. Host Name에 AWS에 만들었던 인스턴스에서 ipv4 주소를 복사해서 붙여넣는다.(DNS를 사용해도 된다.)
  4. 넘어가기 전에 puttygen에서 import key를 눌러서 .pem key file 다운 받은 것을 열고 'save private key'를 클릭한다.(클릭시 패스워드를 입력하라는 내용이 나오는데 입력하지 않아도 괜찮다.)
  5. .pem-key를 바탕화면에 저장하게 된다.(docker-practice로 저장한다.)
  6. 다시 putty로 넘어와서 좌측 카테고리의 SSH > Auth에 가서 만들어진 'docker-practice.ppk' 파일을 선택하고 'open'을 누른다.
  7. login as: 뒤에 ubuntu 엔터를 친다.
  8. Saved sessions에 'docker-practice-ec2'라고 세션을 저장해 놓으면 껐다 켜도 새롭게 입력 안하고 접속이 가능하다.

SSH 접속 : Terminal (Mac용)

  • .pem key가 다운로드 되어 있으면 이를 사용해야 하니 경로를 파악해 둔다.
  • 아래의 명령어를 이용해 찾아볼 수 있다.(이름에 docker가 있으니까)
ll | grep docker
  1. 접속하기
  • 아래의 ubuntu는 id이다.(os를 ubuntu로 설정해 놓았기 때문이다.)
ssh -i ~/Downdloads/doker-practice.pem ububtu@<ipv4 주소>
  1. SSH 접속 후 종료하려면(참고 : ssh의 기본 접속 포트는 22이다.)
  • 터미널에서 exit를 입력하면 된다.
  1. 만약 접속이 안되면 pem key의 권한을 변경 후 다시 접속하면 된다.
chmod 400 ~/Downdloads/doker-practice.pem

AWS EC2에 Docker 설치하기

  • "docker install on ubuntu"를 검색한다.
  • OS requirements를 찾을 수 있다.
    👉 Install Docker Engine on Ubuntu
  • EC2 ubuntu 가상머신에 접속한다.
  • 아래 부분부터 따라 치면 된다.
 $ 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
  • 이제 app.py를 실행한다.
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 .
  • Image가 잘 생성되었는지 확인한다.
$ docker images
  • flask app을 띄운다.
$ docker run -d -p 5000:5000 flask-app
  • container를 확인한다.
$ docker ps

⚡ AWS에서 필요 없는 인스턴스는 꼭 중지 또는 종료해야 한다.
👉 나중에 잊고 과금 되는 경우가 있을 수 있다!

보통 docker만을 이용해 배포하지는 않고 cubernetes, AWS ECK 등을 이용한다.

profile
쿄쿄

0개의 댓글