웹사이트 검색

리눅스에서 장고 애플리케이션을 도커화하는 방법


이 튜토리얼에서는 Django 프로젝트가 아직 개발 단계일 때 Docker 환경을 설정하는 방법을 보여드리겠습니다. 저는 Ubuntu 18.04를 사용하고 있지만, Docker와 docker-compose 설치를 제외하면 사용하는 Linux 배포판에 관계없이 절차는 동일합니다.

일반적인 소프트웨어 개발 프로젝트에서는 보통 개발자가 시작한 단계에서 버전 관리 시스템(VCS)을 거쳐 프로덕션까지 이어지는 개발 과정을 갖습니다. 각 DevOps 도구가 어디에서 사용되는지 이해할 수 있도록 규칙을 지키며 진행하려고 합니다.

DevOps는 '하지만 내 노트북에서는 잘 작동해!'라는 예전 말을 없애는 것과 관련이 있습니다. Docker 컨테이너화는 애플리케이션을 위한 프로덕션 환경을 만들어 어디서나 배포할 수 있도록 하며, 한 번 개발하면 어디서나 배포할 수 있습니다!

1) Docker 엔진 설치

서버나 데스크탑에 Docker 런타임 엔진이 설치되어 있어야 합니다. 저희 Docker 설치 가이드가 큰 도움이 될 것입니다.

CentOS/Debian/Ubuntu에 Docker 설치하는 방법

2) 환경 설정

이 프로젝트를 위해 django-docker-dev-app이라는 GitHub 저장소를 설정했습니다. 자유롭게 포크하거나 클론/다운로드하세요.

먼저 프로젝트를 담을 폴더를 만드세요. 제 폴더 작업 공간은 django-docker-dev-app이라고 합니다. 폴더로 이동한 다음 IDE에서 열어보세요.

도커파일

컨테이너화된 환경에서는 모든 애플리케이션이 컨테이너 안에서 실행됩니다. 컨테이너 자체는 여러 이미지로 구성됩니다. 자신만의 이미지를 만들거나 Docker Hub에서 다른 이미지를 사용할 수 있습니다. Dockerfile은 Docker가 이미지를 자동으로 생성/빌드하기 위해 읽는 텍스트 문서입니다. 우리의 Dockerfile은 프로젝트에 필요한 모든 의존성을 나열할 것입니다.

Dockerfile이라는 이름의 파일을 만드세요.

nano Dockerfile

파일에 다음을 입력하세요:

#base image
FROM python:3.9-alpine

#maintainer
LABEL Author="CodeGenes"

# The enviroment variable ensures that the python output is set straight
# to the terminal with out buffering it first
ENV PYTHONBUFFERED 1

#copy requirements file to image 
COPY ./requirements.txt /requirements.txt

#let pip install required packages
RUN pip install -r requirements.txt

#directory to store app source code
RUN mkdir /app

#switch to /app directory so that everything runs from here
WORKDIR /app

#copy the app code to image working directory
COPY ./app /app

#create user to run the app(it is not recommended to use root)
#we create user called user with -D -> meaning no need for home directory
RUN adduser -D user

#switch from root to user to run our app
USER user

requirements.txt 파일을 만들고 프로젝트의 요구 사항을 추가하세요.

Django
djangorestframework

소스 코드를 보관할 app 폴더를 만듭니다. 이제 이미지를 빌드할 준비가 되었습니다!

mkdir app

프로젝트에서 터미널을 열고 이미지를 빌드하기 위해 다음 명령어를 입력하세요:

 docker build .

마지막에는 Docker에게 동일한 디렉토리에서 Dockerfile을 확인하도록 지시합니다. 파일이 다른 위치에 있었다면 해당 파일의 경로를 작성했을 것입니다. 그런 다음 Docker는 이미지를 생성하기 위해 Docker Hub에서 필요한 이미지를 호출합니다.

Docker Compose 사용하기

Docker 문서에서; Compose는 다중 컨테이너 Docker 애플리케이션을 정의하고 실행하기 위한 도구입니다. Compose를 사용하면 YAML 파일로 애플리케이션의 서비스를 구성할 수 있습니다. 그런 다음 단일 명령으로 구성에서 모든 서비스를 생성하고 시작할 수 있습니다.

  • 리눅스에 Docker Compose 설치

우리 프로젝트는 앞으로 많은 서비스를 필요로 할 것이기 때문에, 멀티 컨테이너 환경을 만드는 것이 더 좋습니다. 예를 들어, 프론트엔드를 호스팅할 컨테이너, 데이터베이스를 호스팅할 컨테이너, 마이크로서비스 아키텍처로 전환할 때 백엔드를 호스팅할 컨테이너가 필요할 수 있습니다. 우리는 프로젝트에 필요한 다양한 서비스와 컨테이너를 정의하는 docker-compose 파일을 만들 것입니다.

docker-compose.yml이라는 이름의 파일을 만드세요

version: "3"
services:
  ddda:
    build:
      context: .
    ports:
      - "8000:8000"
    volumes:
      - ./app:/app
    command: >
      sh -c "python manage.py runserver 0.0.0.0:8000"

YAML 파일 형식을 주목하세요!!! 우리는 ddda(Django Docker Dev App)라는 서비스를 하나 가지고 있습니다.

이제 서비스를 구축할 준비가 되었습니다:

docker-compose build

빌드가 성공적으로 완료되면 다음을 확인할 수 있습니다: Successfully tagged djangodockerdevapp_ddda:latest

즉, 우리의 이미지 이름은 djangodockerdevapp_ddda:latest이고 서비스 이름은 ddda입니다.

이제 아직 Django 프로젝트를 만들지 않았다는 점에 주목하세요! 위 절차를 성공적으로 따라 했다면 축하합니다, 프로젝트를 위한 Docker 환경을 설정한 것입니다! 다음으로, 다음 단계를 따라 개발을 시작하세요:

Django 프로젝트를 생성하세요:

 docker-compose run ddda sh -c “django-admin.py startproject app .”

컨테이너를 실행하려면:

docker-compose up

그런 다음 http://localhost:8000/ 를 방문하세요

마이그레이션 생성

$ docker-compose exec ddda python manage.py migrate

지금부터 위의 명령어처럼 Django 명령어를 실행하되, 서비스 이름 ddda 뒤에 자신의 명령어를 추가하면 됩니다.

일단 여기까지입니다. 간단하다는 것은 알지만 데이터베이스 같은 다루지 않은 기능들도 많아요. 그래도 시작이죠!

프로젝트는 여기 GitHub에서 확인할 수 있습니다.

Docker에 대한 추가 정보:

  • Docker 이미지/컨테이너 내보내기 및 가져오기
  • CentOS/Debian/Ubuntu에 Harbor Docker 이미지 레지스트리 설치
  • Docker에서 로컬 Kubernetes 클러스터 실행하는 방법