본문 바로가기

DevOps/Docker

[Docker] 4. Django 개발 환경 세팅

 

 

기존에 개발된 장고 프로젝트 내에서 docker를 돌릴 것이며, docker-compose를 이용해서 DB와 함께 구동시킬 것이다.

즉, docker-compose를 이용하여 웹서버를 구동시킬 것이다. docker-compose는 다음 글에서 확인해볼 것이다.

 

 

Docker 설치

https://docs.docker.com/get-docker/

 

Get Docker

 

docs.docker.com

 

위 링크로 들어가서 본인의 운영체제에 맞는 docker를 다운 받습니다.

 

설치가 완료되면 터미널에서 아래의 명령어로 설치가 정상적으로 되었는지 확인해본다.

  • docker -v : 도커의 버전을 확인해주는 명령어

프로그램이 정상적으로 설치가 되었다면, 프로그램을 실행시켜주자.

 

 

장고 프로젝트 내의 터미널을 새로 실행시켜주고, 아래의 명령어로 도커가 잘 설치되어있는지 확인해본다.

  • docker -v
  • docker-compose -v

docker-compose를 사용할 것이기 때문에 만약 설치가 안되어있다면, 개발 툴 터미널에서 도커 컴포즈를 설치하면 된다. 반드시 가상환경 내에서 설치해야한다.

  • pip install docker-compose

 


Dockerfile 작성

현재 우리가 개발한 장고 프로젝트를 하나의 이미지로 생성해서 실행시키기 위해서는 Dockerfile이라는 파일을 작성해서 이미지를 생성하여야 한다.

 

FROM python:3.9.0

COPY ./ /home/Docker_Practice/

WORKDIR /home/Docker_Practice/

RUN apt-get update

RUN pip install -r requirements.txt

EXPOSE 8000


CMD ["bash", "-c", "python manage.py migrate && python manage.py runserver 0.0.0.0:8000"]

FROM python:3.9.0

  • 도커 허브에서 python의 3.9.0버전의 이미지를 기반으로 두고 이미지를 만들겠다는 뜻이다.
  • Dockerfile로 이미지를 생성할 때는 항상 기존에 있는 이미지를 기반으로 새 이미지를 만들어야 하기 때문에 FROM은 반드시 설정해야한다.
  • 태그를 붙히지 않으면 자동으로 lateset가 생성된다.

 

COPY ./ /home/Docker_Practice/

  • COPY[복사할 호스트 파일 경로] [이미지에서 복사한 파일이 위치할 경로] 형식이다.
  • [복사할 호스트 파일 결로] 는 항상 현재 Dockerfile이 위치한 경로 내부에 있는 파일만 가능하다.
  • [이미지에서 복사할 파일이 위치할 경로] 는 항상 절대 경로로 설정해야한다.
  • COPY 명령어 덕분에 이미지를 만들 때, git에서 파일을 가져올 필요가 없어진다.

 

WORKDIR /home/Docker_Practice/

  • WORKDIR [경로] 형식이다.
  • WORKDIR 뒤에 오는 모든 RUN, CMD, ENTRYPOINT에 적용된다.
  • 리눅스의 cd와 같은 개념으로, [경로]로 작업 디렉토리로 이동한다고 보면 이해하기 쉬운 의미이다.

 

RUN apt-get update

RUN pip install -r requirements.txt

  • FROM에서 설정한 이미지 위에서 스크립트나 명령을 실행한다.
  • RUN으로 실행한 결과는 캐시되며 다음빌드 때 재사용한다.
  • apit-get update 로 환경파일을 업데이트 한다.
  • requirements.txt파일에 있는 의존성을 설치한다.

 

EXPOSE 8000

  • 호스트와 연결한 포트 번호를 설정해 준다. docker run에서의 --export 명령과 동일.

 

CMD ["bash", "-c", "python manage.py migrate && python manage.py runserver 0.0.0.0:8000"]

  • 도커 컨테이너가 구동될 때, 실행하는 명령어들의 집합이다. 
  • CMD가 여러개인 경우, 마지막 CMD만 실행된다.
  • bash 쉘에서 여러개의 명령어를 사용하려면 && 연산자로 명령어를 나누어주면 된다.

 


컨테이너 생성하기

docker network create django

docker run -d --name djangotest -v ${PWD}:/home/Docker_Practice -p 8000:8000 \
--net=django django:test

 

 

네트워크 만들기 : docker network create {네트워크 이름}

 

Docker의 network는 목적에 따라 다양한 종류의 네트워크 드라이버를 지원한다.

  • bridge : 하나의 호스트 컴퓨터 내에서 여러 컨테이너들이 서로 소통할 수 있게 해준다.
  • host : 호스트 컴퓨터와 동일한 네트워크에서 컨테이너를 돌리기 위해서 사용됨.

 

--net을 통해서 네트워크 연결을 깜빡했다면

docker network connect django djangotest

 

django 네트워크에 djangotest 컨테이너를 위와같이 연결해줄 수 있다.

 

 

docker network inspect django

 

inspect 명령어를 통해서 'django' 네트워크의 상태를 볼 수 있다.