그런데 굳이 그냥 개발환경 셋업하면 되지 추가로 도커를 깔고 설정하면서까지 하는 이유에 대해서 논하지 않았는데요.
결론부터 말하자면, 여러가지 이유가 있겠지만 가장 큰 이유로 개발환경 구성이라는 어려움 해결
그건 도커 컨테이너 하나만 쓰는 것이 아닌 도커앱을 여러개를 정의하고 관리해주기 위한 툴이 필요하기 때문이조. 또한 실행 순서도 다르게해서 작동할 수 있답니다. 특히 DB앱 먼저 실행하고 이후 server앱을 실행시키는 등의 순서도 지정해 줄수 있어서 유용하게 쓰이게되요.
컨테이너 운용툴로 오케이스트레이션 툴로 쿠버네티스도 있습니다. 하지만 도커 컴포즈와 쿠버네티스에는 큰 차이가 있습니다. 일반적으로 도커 컴포즈의 경우 단일 노드(머신)에서 작동하고 쿠버네티스는 여러 노드로 이루어진 클러스터에서 작동합니다. 좀 더 구체적으로 말하면 워커들을 관리하는 관리자 노드(들)와 관리자의 명령을 받는 워커 노드들로 구성돼있습니다. 따라서 클러스터에서 컨테이너 개수를 늘리고 줄일 수 있기 때문에 확장성이 증가합니다.
이제 본격적으로 Dockerfile과 docker-compose파일을 작성해볼게요.
Docker File이란 Docker Image를 만들기 위한 설정 파일입니다. 여러가지 명령어를 토대로 Docker File을 작성하면 설정된 내용대로 Docker Image를 만들 수 있습니다
프로젝트명-app-api
를 지어서 만들게요.(예. recipe-app-api
)app
폴더도 만들어 주세요.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
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은 단순히 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