[drf | docker] Build a Backend REST API - 4

Hyeseong·2021년 2월 22일
1
post-custom-banner

시작하기 앞서

그런데 굳이 그냥 개발환경 셋업하면 되지 추가로 도커를 깔고 설정하면서까지 하는 이유에 대해서 논하지 않았는데요.

결론부터 말하자면, 여러가지 이유가 있겠지만 가장 큰 이유로 개발환경 구성이라는 어려움 해결

  • 패키지 설치가 막힌다(SSL, LDAP 관련).
    (실수가 있건 없건)
  • 로컬 컴퓨터에 이미 존재하는 환경과 꼬였다.
  • 막상 배포를 했더니 개발 환경과 서버 환경이 같지 않아서 문제가 발생했다.

그런데 도커 컴포즈는 왜쓰나요?

그건 도커 컨테이너 하나만 쓰는 것이 아닌 도커앱을 여러개를 정의하고 관리해주기 위한 툴이 필요하기 때문이조. 또한 실행 순서도 다르게해서 작동할 수 있답니다. 특히 DB앱 먼저 실행하고 이후 server앱을 실행시키는 등의 순서도 지정해 줄수 있어서 유용하게 쓰이게되요.

비슷한 툴로 쿠버네트스가 있는데 차이점은?

컨테이너 운용툴로 오케이스트레이션 툴로 쿠버네티스도 있습니다. 하지만 도커 컴포즈와 쿠버네티스에는 큰 차이가 있습니다. 일반적으로 도커 컴포즈의 경우 단일 노드(머신)에서 작동하고 쿠버네티스는 여러 노드로 이루어진 클러스터에서 작동합니다. 좀 더 구체적으로 말하면 워커들을 관리하는 관리자 노드(들)와 관리자의 명령을 받는 워커 노드들로 구성돼있습니다. 따라서 클러스터에서 컨테이너 개수를 늘리고 줄일 수 있기 때문에 확장성이 증가합니다.

본론

이제 본격적으로 Dockerfile과 docker-compose파일을 작성해볼게요.

Dockerfile

정의

Docker File이란 Docker Image를 만들기 위한 설정 파일입니다. 여러가지 명령어를 토대로 Docker File을 작성하면 설정된 내용대로 Docker Image를 만들 수 있습니다

  • 가장 처음 프로젝트 디렉토리를 만들고 들어갈게요.프로젝트명-app-api를 지어서 만들게요.(예. recipe-app-api)
  • 프로젝트 디렉토리에 안에 빈 app 폴더도 만들어 주세요.
  • 프로젝트 디렉토리 안에 Dockerfile 을 생성할게요
FROM python:3.7-alpine
(depricated)MAINTAINER hyeseong-dev App Developer Ltd
LABEL maintainer="someone@something.com"

ENV PYTHONUNBUFFERED=1

COPY ./requirements.txt /requirements.txt
RUN pip install -r /requirements.txt

RUN mkdir /app
WORKDIR /app
COPY ./app /app

RUN adduser -D user
USER user

작성이 완료되었다면 터미널에서

mkdir app
docker build -t 프로젝트명:버전 ./ (or docker build .)

명령어를 실행해주세요.

빌드가 수행되요.
빌드가 끝나고 나서 아래 명령어를 실행해주세요.

docker images

docker images
REPOSITORY           TAG          IMAGE ID       CREATED          SIZE
python               3.7-alpine   a7a0ffa7d399   2 days ago       41.6MB

docker-compose.yml

version: "3"

services:
  app:
    build:
      context: .
    ports:
      - "8000:8000"
    volumes:
      - ./app:/app
    command:
      sh -C "python manage.py runserver 0.0.0.0:8000"

docker-compopose build

다시 빌드가 수행되요.
빌드가 끝나고 나서 아래 명령어를 실행해주세요.

docker images

docker images
REPOSITORY           TAG          IMAGE ID       CREATED          SIZE
recipe-app-api_app   latest       5709f3e8cf6a   17 minutes ago   108MB
python               3.7-alpine   a7a0ffa7d399   2 days ago       41.6MB

Dockerfile vs docker-compose.yml 차이점?

Dockerfile은 단순히 image 빌드까지만 해주는 선언입니다.(run에 대한 정의도 하지만 실제 실행은 발생하지 않아요)

docker-compose는 여러개의 이미지를 빌드, 실행까지 포함해서 관리해주는 툴이에요.

Docker Compose
is a tool for defining and running multi-container Docker applications.
define the services that make up your app in docker-compose.yml so they can be run together in an isolated environment.
get an app running in one command by just running docker-compose up
출처 stackoverflow

profile
어제보다 오늘 그리고 오늘 보다 내일...
post-custom-banner

0개의 댓글