docker로 개발환경 세팅하기

은종·2022년 6월 24일
0
post-thumbnail

본격적으로 개발을 하기 전, 간단한 chat 기능 백엔드 목업 서버를 구성하기 위해 docker를 이용했다.

개요

djangochannels로 백엔드를 구성하고 redis메세지 브로커로 이용하여 개발용 목업서버를 구성하기로 생각했다.

각자의 개발환경에서 간단히 서버를 실행할 수 있어야 해서 docker를 이용하기로 했다.

백엔드 구성

django channels의 docs에 제공되어 있는 채팅 튜토리얼을 따라 진행했다.
-> 채팅 서버 튜토리얼 바로가기

완성된 코드는 깃허브에 올려놓았다.
-> 채팅 서버 코드 깃허브 주소

이 글의 목적이 ❌django 코드를 리뷰하는 것❌이 아니기 때문에 링크로 대체한다!

Dockerfile 생성

Django 프로젝트의 상위 디렉토리에 Dockerfile생성한다.

현재의 디렉토리 구조이다.

django-chat-mock/
	Dockerfile
    djangoProject/
    	manage.py
        ...

Dockerfile을 다음과 같이 작성한다.

FROM python:3.8.9
RUN pip3 install django channels channels_redis
WORKDIR /usr/src/app
COPY . .
WORKDIR ./djangoProject
CMD ["python3", "manage.py", "runserver", "0.0.0.0:8000"]
EXPOSE 8000

문법

FROM

사용할 이미지를 입력한다. 우린 python 3.8.9 버전을 이용한다.

RUN

이미지가 올라가고 실행할 명령어를 입력한다. pip로 django, channels, channels_redis를 install 해준다.

WORKDIR

작업을 진행할 디렉토리를 지정한다. 없으면 만들어 줌!

COPY

빌드를 진행하기전, 호스트의 디렉토리복사한다. "COPY . ."을 통해 작성해놓은 django 프로젝트를 복사한다.

CMD

컨테이너를 시작할 때 실행할 명령어를 입력한다. "python3 manage.py runserver 0.0.0.0.8000" 명령어로 django 서버를 실행한다.

EXPOSE

외부에 노출할 포트를 지정한다. 8000번 포트를 노출시킬 것이다.

Dockerfile 빌드, 배포

먼저 다음의 명령어를 입력하여 dockerfile빌드한다.

docker build --tag (docker hub 아이디)/(이미지 이름):(버전)

예시)
docker build --tag eunjong147/backend-chat-mock:1.0.0

docker login 로 도커 허브에 로그인해 준 다음,

아래의 명령어를 입력하여 image업로드한다.

docker push (docker hub 아이디)/(이미지 이름):(버전)

예시)
docker push eunjong147/backend-chat-mock:1.0.0

docker-compose

redis와 백엔드 서버, 2개의 이미지사용해야하기 때문에 docker-compose를 이용한다.

docker-compose.yml 파일을 생성하고 다음과 같이 yml파일을 작성한다.

version: '3'
services:
    backend:
        image: eunjong147/backend-chat-mock:1.0.0
        ports:
            - "8000:8000"
        depends_on:
            - redis
    redis:
        image: redis:5
        ports:
            - "6379:6379"

문법

version

도커 컴포즈 파일의 버전을 명시해준다.

services

컨테이너를 실행하기 위한 단위이다. backend 부분과 redis 부분으로 나뉜다.

image

사용할 이미지를 명시해준다. backend service에서는 위에서 배포한 backend-chat-mock 이미지를 사용하고, redis service에서는 redis 5버전을 사용한다.

ports

포트포워딩을 지정한다. <호스트의 포트>:<컨테이너의 포트>로 바인딩한다.

depends_on

실행순서를 보장한다. backend service에서 redis service에 depends_on을 지정하면, redis 컨테이너가 먼저 실행된다.

완료!

docker-compose up -d 명령어를 통해 백그라운드로 실행하고,
docker-compose down 명령어를 통해 docker 컨테이너를 일시중지한다.

이제 docker-compose.yml 파일만 공유해주면 도커가 설치된 아무나 같은 환경에서 chat server를 실행할 수 있다.

참고자료

docker docs
도커 파일 배포

profile
스타 폶 바럼

2개의 댓글

comment-user-thumbnail
2022년 6월 25일

도커가 어떤 식으로 돌아가는지 이해할 수 있는 글이었습니다. 많은 도움 되었습니다. 감사합니다 : )

1개의 답글