Docker & K8S

Docker & K8S - 학습 목표 소개 (Docker로 웹 서비스 실행)

터칭 데이터 2023. 12. 19. 13:20

 

 

웹 서비스를 Docker로 실행해보기

 

지난 시간에 Docker 개념을 살펴보고 간단한 실습을 해보았습니다. 이번에는 Hangman 웹서비스를 Github을 통해 Docker Image로 Docker Hub에 업로드해 실행해봅시다.

 

 

 

 

 

 

 

 

 

 

 

 

이 챕터를 위해 필요한 것들

 

Github 계정

 

Docker Hub 계정

 

Docker가 설치된 컴퓨터

 

본인 Github 계정 아래 존재하는 hangman repo

 

https://github.com/learndataeng/hangman_web를 포크할 것!
이에 대해 별도로 설명하고 이 repo에 Dockerfile을 추가해볼 예정

 

 

 

 

 

 

 

 

 

 

 

 

 

웹서비스를 Docker로 구동해보는 전체 과정 익히기

 

hangman_web이라는 repo의 main에 코드가 머지될 때마다 다음을 수행


1. 테스트 수행
2. Docker Image 빌드
    - 이를 위해 Dockerfile 부터 만들어볼 예정
3. Docker Image를 Docker Hub로 push

 

위 과정을 Github repo에 Github Actions으로 구현

 

 

 

 

 

 

 

 

 

 

 

 

 

 

전체 과정을 시각화해보기

 

 

 

이번 학습에서 4번 과정은 없이 1~3을 살펴봅니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Hangman 서비스 소개


이번 챕터 실습 대상인 Hangman 서비스에 대해 알아보자

 

 

 

 

 

 

 

 

 

 

Hangman 프로그램

 

 

 

https://github.com/learndataeng/hangman_web

 

hangman 프로그램을 flask를 사용하여 웹으로 노출

포트번호는 어디든 바인딩 가능하며 실행할 때 지정
flask 관련 모듈 설치가 필요함: requirements.txt

 

실행 방법

python3 -m flask run --host=0.0.0.0 --port=4000

    - 이 경우 app.py를 기본으로 사용함

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Repo 구성 설명

 

app.py

flak의 메인 함수가 있고 커맨드라인으로 받은 포트에 바인드하고 요청이 들어오기를 기다림

 

requirements.txt

pip3 install requirements.txt 명령으로 flask 모듈들을 설치함

 

test.py

app.py에 있는 코드의 유닛 테스트 로직이 들어가 있음. CI/CD 구성시 실행이 되게 구성할 예정

 

README.md

어느 repo에나 있는 README 마크다운 파일

 

 

 

 

 

 

 

 

 

requirements.txt

Flask==2.3.2
Flask-HTTPAuth==4.5.0
Flask-Login==0.6.2
Flask-SQLAlchemy==3.0.3

 

pip3 install requirements.txt 명령으로 위의 모든 모듈들을 설치함

 

 

 

 

app.py

from flask import Flask,session

app = Flask(__name__)
…
app.secret_key = "Python Study"

if __name__ == "__main__":
    app.run()

 

 

 

 

 

 

 

 

 

 

 

프로그램 실행 데모

코드 설명을 간단히 한 후에 터미널에서 실행하는 데모 수행

 

1. git clone https://github.com/learndataeng/hangman_web.git

적당한 디렉토리에 git clone

 

2. pip3 install -r requirements.txt

그 디렉토리에서 필요한 모듈(라이브러리)들을 설치

 

3. python3 -m flask run --host=0.0.0.0 --port=4000

실행 뒤에 브라우저 상에서 localhost의 포트 4000번으로 접속

 

 

위와 같은 화면이 뜹니다.

 

 

 

지난 시간 Docker 데모를 실습할 때 https://labs.play-with-docker.com/ 를 사용해서 4시간동안 서버를 하나 무료로 사용할 수 있었죠? 이번에도 그곳에서 위의 말씀드린 3단계 실습을 진행하겠습니다.

 

 

 

 

 

로그인 후 Start 버튼을 눌러주세요.

 

 

 

 

좌측 상단에서 + ADD NEW INSTANCE를 클릭해 리눅스 서버 하나를 열어주세요.

 

 

 

 

 

 

 

 

git clone https://github.com/learndataeng/hangman_web.git 명령으로 hangman을 다운 받습니다.

 

 

 

 

 

 

 

 

 

 

 

 

hangman_web 폴더로 이동한 후 어떤 파일들이 있는지 조회를 해보겠습니다.

 

 

 

 

 

 

 

 

 

 

 

 

requirements.txt의 내용을 살펴보면 위와 같이 모듈들이 보입니다.

 

 

 

 

 

 

 

pip3 install -r requirements.txt 명령을 내릴 때 -r 옵션을 빼면 위와 같이 에러가 납니다. 왜냐하면 pip3는 requirements.txt라는 모듈이 존재한다고 생각하기 때문입니다. -r 옵션을 주어야 requirements.txt 안의 내용들을 모듈로서 취급하고 설치를 진행하니 -r 옵션을 꼭 사용해주세요.

 

그렇게 모든 모듈들을 설치한 후

 

 

 

 

 

 

 

 

python3 -m flask run --host=0.0.0.0 --port=4000

 

-m flask run은 기본적으로 app.py라는 스크립트를 찾아 이를 실행합니다.

 

어떤 호스트에 바인딩하고 어떤 포트에 바인딩할지 --host=0.0.0.0 --port=4000으로 지정합니다.

 

 

 

 

 

 

 

 

 

이렇게 실행한 서비스에 접속하려면 상단의 OPEN PORT를 클릭하고 4000을 입력하세요.

 

 

 

 

 

그러면 브라우저의 새탭이 팝업되며 HANGMAN 서비스로 Access합니다.

 

HANGMAN 웹 서비스에 대한 간단한 실습을 해보았습니다.