728x90

안녕하세요, 오늘은 Docker와 Google Colud Console을 이용해서 Flask로 만든 Web을 배포해보겠습니다. 업로드 할 것은 다음과 같이 진행할 예정입니다.

  1. Google Cloud 기본 설정
  2. VM instance 생성
  3. Docker설치, app.py 생성 및 설정
  4. Dockerfile 생성, 빌드 및 Container 생성
  5. 방화벽 설정
  6. 완성

 

Google Cloud 기본 설정


https://cloud.google.com/

 

클라우드 컴퓨팅 서비스 | Google Cloud

데이터 관리, 하이브리드 및 멀티 클라우드, AI와 머신러닝 등 Google의 클라우드 컴퓨팅 서비스로 비즈니스 당면 과제를 해결하세요.

cloud.google.com

VM instance를 생성하기 전 위의 링크로 들어가서 카드를 등록해야합니다.

https://console.cloud.google.com/?hl=ko

카드를 등록하면, 다음과 같이 무료 체험판 사용을 위해 300$을 제공해줍니다. 그리고 좌하단에 VM 만들기로 들어갑니다.

https://console.cloud.google.com/marketplace/product/google/compute.googleapis.com

Compute Engine API를 사용 누릅니다. (1~2분 소요)

 

Google Cloud VM instance 생성


https://console.cloud.google.com/compute/instances?hl=ko

다음 사이트에 접속을 하면 위의 사진과 같이 나오면서 인스턴스 만들기를 누릅니다

 

이름은 test-1로 바꾸고, 지역은 서울로 지정했습니다. 

액세스 범위에 대해서는 다음과 같이 설정했으며, 방화벽은 HTTP와 HTTPS 트래픽 허용을 체크하고 만들기 버튼을 눌렀습니다. (만들기 버튼 누르고 VM instance 생성까지 1 ~ 2분 소요)

다음과 같이 인스턴스가 만들어진 것을 볼 수 있습니다.

 

Docker설치, app.py 생성 및 설정


SSH 옆에 화살표 버튼을 눌러서 브라우저 창에서 열기 클릭

브라우저 창에서 열기를 통해서 인스턴스를 실행합니다.

 

다음과 같이 창이 나타나면서 이제부터 명령어를 실행합니다.

 

# docker 설치
sudo apt install docker.io -y

# app.py 생성
touch app.py

# app.py 수정
vi app.py

app.py 파일을 수정합니다.

# app.py
from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
	return "Hello, Flask"
    
if __name__ == "__main__":
	app.run()

마지막으로 ESC 버튼을 누르고 :wq Enter 누르고 파일을 저장하고 나갑니다.

 

Docker 파일 생성 및 설정


Dockerfile 생성 및 수정

# Dockerfile 생성
touch Dockerfile

# Dockerfile 수정
vi Dockerfile

 

Dockerfile 파일 내용

FROM python:3.12

ADD . /app

RUN pip install flask

CMD ["python3", "-m", "flask", "run", "--host=0.0.0.0"]

i 버튼을 눌러서 Insert Mode로 설정한 뒤, 다음과 같은 Text를 입력한 뒤, :wq를 눌러서 저장하고 나갑니다.

 

Docker 파일 빌드 및 컨테이너 생성


명령어를 통해 생성한 Dockerfile을 빌드하고 컨테이너를 생성합니다.

# 현재 디렉토리에 있는 Dockerfile을 이용해 이름이 test인 이미지 빌드
sudo docker build -t test .

# 빌드된 이미지(test)를 이용해 아룸아 test1이라는 컨테이너 생성 및 5000포트를 이용하여 접속
sudo docker run --name=test1 -d -t -p 5000:5000 test

 

Conatiner ID 확인

# 현재 실행중인 Container 확인
sudo docker ps

다음과 같이 Container ID와 여러 정보를 알 수 있습니다.

 

Conatiner에서 Flask가 잘 실행되었는지 확인하기 위해 로그를 확인합니다.(logs 뒤에 Container ID의 앞자리만 입력하면 됨)

sudo docker logs 829

다음과 같이 실행이 잘 되고있는 것을 확인할 수 있습니다.

 

외부 IP와 5000 포트를 결합하여 입력창에 입력합니다. (여기서 https 가 아닌 http를 이용해서 접속해야 합니다.)

 

하지만 다음과 같이 무한로딩에 걸리면서 접속이 되지 않는데, 이 때 방화벽을 설정해주어야 합니다.

 

 

방화벽 설정


https://console.cloud.google.com/net-security/firewall-manager/firewall-policies/list?hl=ko

방화벽에 접근하는 방법

  1. 좌상단에 메뉴버튼 클릭
  2. VPC 네트워크 화살표 클릭
  3. 그 안에 있는 방화벽 메뉴 클릭

접근이 어려운 분들은 사진 밑에 링크 달아놨습니다.

 

상단에 있는 방화벽 규칙 만들기를 누릅니다.

 

다음과 같이 설정합니다.

  • 대상 : 네트워크의 모든 인스턴스
  • 소스 IPv4 범위 : 0.0.0.0/0
  • 프로토콜 및 포트 : 모두 허용

만들기 버튼을 눌러서 방화벽 규칙을 만듭니다.

다음과 같이 test2 방화벽이 만들어진 것을 확인할 수 있습니다.

 

 

완성


방화벽 생성 이후 다음과 같이 웹사이트에 접근할 수 있습니다.

 

이상입니다!

 

728x90