1. Docker란 무엇인가?

 

Docker는 애플리케이션을 어디서나 쉽게 실행할 수 있도록 도와주는 도구입니다. 쉽게 말해, ‘포장 상자(컨테이너)’ 같은 역할을 합니다.

 

예를 들어, 우리가 물건을 택배로 보내려고 합니다. 상자 없이 물건을 그냥 보낸다면, 운송 과정에서 손상이 생기거나, 일부만 도착할 수도 있습니다. 하지만 튼튼한 상자에 잘 포장하면, 어디로 보내든 안전하고 빠르게 배송할 수 있습니다.

 

Docker도 이와 비슷합니다. 애플리케이션과 그 실행에 필요한 모든 것을 ‘컨테이너’ 라는 상자 안에 담아 둡니다. 이렇게 하면 개발자가 만든 프로그램을 어디에서 실행하든 동일한 환경에서 문제없이 작동할 수 있습니다.

 

또 다른 예로 Docker를 음식 배달 서비스에 비유해 보겠습니다. 일반적인 앱 배포 방식(전통적인 방법)에서는 마치 셰프가 요리를 만들고, 각 배달원이 매번 다른 방법으로 포장해서 배달합니다. 포장 방법이 다르다 보니 어떤 고객은 따뜻한 음식을 받지만, 어떤 고객은 식은 음식을 받을 수도 있습니다.

 

Docker를 이용한 배포(컨테이너 방식)에서는 모든 음식은 표준화된 용기에 포장됩니다. 고객이 어디에 있든 같은 품질의 음식을 받을 수 있습니다. 즉, Docker는 앱을 컨테이너라는 표준 포장 상자에 담아, 어디서든 안정적으로 배포될 수 있도록 돕는 역할을 합니다.

 

요약하자면, 도커는 앱과 실행환경 모두 한꺼번에 일정한 규격의 파일(이미지)에 담아두었다가, 운영체제가 무엇이든 어떠한 서버에도 실행할 수 있는 컨테이너라는 것입니다.

 

2. Docker는 어떻게 개발되었나?

 

Docker는 2013년, Solomon Hykes라는 개발자가 만들었습니다. 그는 개발자들이 쉽게 애플리케이션을 배포하고 실행할 수 있도록 돕기 위해 Docker를 만들었습니다. 초기에는 리눅스에서만 동작했지만, 점점 발전하면서 Windows와 Mac에서도 사용 가능해졌습니다. 지금은 Google, Microsoft, Amazon 같은 글로벌 클라우드 제공업체들도 Docker를 적극 활용하고 있습니다.

 

Docker는 클라우드와 매우 잘 어울립니다. 왜냐하면, 고객 앱의 트래픽이 증가하면 그에 맞추어 서버를 가변적으로 늘려줘야 하는데, Docker 이미지를 이용해서 똑같은 서버를 자동으로 쉽고 빠르게 늘릴 수 있기 때문입니다. 또한, 이미지 인식 모델 등의 사전 학습된 기계학습 모델들도 미리 이미지로 만들어두고 Docker 파일로 저장해 두었다가 이미지 인식 앱의 제작 등의 필요시에 꺼내 쓸수 있기 때문입니다.

 

3. Docker의 주요 장점

 

따라서 Docker의 이점을 다음과 같이 요약할 수 있습니다: 다양한 운영체제에서 실행 가능, 빠른 배포, 확장성과 유연성

 

4. 간단한 예제

 

아주 간단한 Python Flask 웹 애플리케이션을 만들어서 Docker 컨테이너에 담고 Google Cloud Platform(GCP)에서 실행해보겠습니다.

 

(1) 앱 코드 작성

먼저 아래와 같은 애플리케이션 코드를 작성합니다. (파일 이름은 app.py) 작성된 파일은 구글 클라우드 콘솔 터미널의 업로드 기능을 사용하여 클라우드의 기본 서버에 업로드해 줍니다. 이 코드는 Flask라는 웹 프레임워크를 사용하여 웹 서버를 만듭니다. 이 아래 코드의 목적은 웹상의 어느 브라우저에서도 이 코드를 실행하는 앱의 URL 주소를 입력하면, 브라우저에 “Hello, Docker on GCP!”라는 메시지를 출력하는 것입니다.

 

    from flask import Flask

    app = Flask(__name__)

    @app.route('/')

    def home():

    return "Hello, Docker on GCP!"

        if __name__ == "__main__":

    app.run(host="0.0.0.0", port=5000)

 

(2) Dockerfile 작성

이제 이 애플리케이션을 Docker 컨테이너로 감싸기 위해 Dockerfile을 작성합니다. Dockerfile은 다음과 같습니다. Dockerfile도 터미널을 이용하여 마찬가지로 업로드 해 줍니다.

 

    FROM python:3.9

    WORKDIR /app

    COPY app.py /app

    RUN pip install flask

    CMD ["python", "app.py"]

 

이 파일의 역할을 설명하면,

Python 3.9가 설치된 환경을 기반으로 하고,

우리가 만든 app.py 파일을 컨테이너 내부(/app)로 복사하고,

Flask를 설치한 후,

app.py를 실행하도록 합니다.

 

(3) Docker 이미지 빌드

이제 Docker를 사용하여 위의 Dockerfile을 실행하고 컨테이너를 생성해 보겠습니다.

터미널(명령 프롬프트)에서 다음 명령어를 실행합니다.

 

    docker build -t my-flask-app .

 

이 명령어는 현재 폴더(.)에 있는 Dockerfile을 읽고 "my-flask-app" 이라는 Docker 이미지를 생성합니다.

 

(4) Docker 컨테이너 실행

Docker 이미지를 실행하여 컨테이너를 생성하고 실행합니다.

 

    docker run -p 5000:5000 my-flask-app

 

여기서 -p 5000:5000 옵션은 컨테이너의 5000번 포트를 내 컴퓨터의 5000번 포트와 연결하는 역할을 합니다. 이제 앱은 클라우드의 기본 서버 상에서 실행됩니다.

 

하지만 터미널이 실행되는 클라우드 서버는 명령어 창으로 동작하고, 화면을 보여 줄 방법이 없으므로, 지금 단계에서는 브라우저로 앱이 정상적으로 동작하는지 확인할 수 없습니다. 또한, 이 앱은 나만 사용할 수 있고, 다른 사용자들은 사용할 수 없습니다. 따라서 로컬 컴퓨터를 이용해서 웹상에서 앱의 구동 여부를 확인하고 다른 사용자들도 사용할 수 있으려면 웹상에 배포해야 합니다.

 

(5) 웹에 배포하기

이제 웹상에서 앱을 배포하고 실행하려면 아래와 같이 합니다.

  • Google Cloud에 로그인

GCP 콘솔(https://console.cloud.google.com/)에 로그인합니다.

 

  • Google Cloud SDK 설치

구글 클라우드 콘솔 터미널에서 Google Cloud SDK를 설치합니다. (Docker뿐만 아니라 구글 클라우드의 모든 서비스를 명렁어 기반으로 사용하기 위해서 필요)

 

  • GCP 프로젝트 설정

구글 클라우드 계정 당 여러 개의 프로젝트 생성이 가능하므로, Docker 명령어 실행 전에 어느 프로젝트인지 알려줘야 합니다.

 

     gcloud config set project [YOUR_PROJECT_ID]

 

여기서 [YOUR_PROJECT_ID]는 사용자가 프로젝트 생성시 정해준 프로젝트 이름입니다.

 

  • Docker 이미지 업로드

Docker 이미지를 GCP 컨테이너 레지스트리(컨테이너 이미지 저장소)에 업로드합니다.

 

    gcloud builds submit --tag gcr.io/[YOUR_PROJECT_ID]/my-flask-app

 

  • Google Cloud Run을 사용하여 배포

이제 Cloud Run(제 글 중의 ‘클라우드 컴퓨팅: Cloud Run’을 참조하세요.)을 사용하여 Docker 컨테이너를 실행합니다.

 

    gcloud run deploy my-flask-app --image gcr.io/[YOUR_PROJECT_ID]/my-flask-app --platform managed --region us-central1 --allow-unauthenticated

 

위 명령어는 다음을 수행합니다.

my-flask-app이라는 이름으로 Cloud Run 서비스 배포,

Google Container Registry(GCR)에서 Docker 이미지 가져오기, (<-- 앞에서 저장한 이미지를 불러옵니다.)

GCP에서 실행될 위치(region) 설정 (us-central1), (<-- 사용자가 위치를 변경하여 지정할 수 있습니다.)

모든 사용자(인증 없이)에게 접근가능하도록 설정 (<-- API 게이트웨이를 사용하면 사용자 인증을 추가할 수 있습니다. 제 글 중의 ‘클라우드 컴퓨팅: API 게이트웨이’를 참조하세요.)

 

  • 클라우드에서 실행된 애플리케이션 사용법

이제 우리가 만든 애플리케이션은 인터넷에 연결된 누구나 사용할 수 있습니다!

Cloud Run 배포 후 터미널에 표시된 URL을 웹 브라우저 주소창에 넣고 엔터키를 누르면

브라우저 화면에서 "Hello, Docker on GCP!" 메시지를 확인할 수 있습니다.

 

5. 마무리

 

Docker를 사용하면 개발한 애플리케이션을 어디서든 동일한 환경에서 실행할 수 있습니다. Google Cloud Platform(GCP)과 함께 사용하면 애플리케이션을 쉽게 웹에 배포할 수 있습니다.

 

 

 

+ Recent posts