머리말
- 초보자를 위한 무작정 따라하기 글 입니다.
- Django의 프로젝트에서 진행됩니다.
운영체제 및 프로그램
- 윈도우에서 진행하였습니다.
- Visual Studio Code 사용
목차
- Docker Desktop 설치하기
- Django 프로젝트를 위한 Dockerfile 작성하기
- docker-compose.yml 파일 작성하기
- 흔히 겪는 오류와 해결 방법
- Docker 컨테이너 관리 기본
1. Docker Desktop 설치하기
1.1 운영 체제별 설치 방법
- https://docs.docker.com/desktop/ 에서 자신의 운영체제에 맞게 Docker Desktop을 다운 받습니다.
1.2 설치 후 확인 사항
- WSL 설치 확인
2. Dockerfile 작성하기
2.1 Dockerfile의 경로
- Manage.py가 있는 곳 즉 프로젝트의 루트 디렉토리에 Dockerfile을 새 파일로 만든 후 내용을 작성하시면 됩니다.
2.2 기본 Dockerfile 구조
2.3 주요 명령어
2.3.1 FROM python:3.10
- 의미: Docker 이미지를 빌드할 때 사용하는 기본 이미지를 지정합니다. 여기서는 python:3.10 이미지를 사용하고 있으며, 이는 Python 3.10이 설치된 공식 Python Docker 이미지입니다.
- 설명: 이 이미지는 Python 환경을 미리 설정해 두었기 때문에, 추가적인 Python 설치 과정 없이 바로 파이썬 명령어와 패키지를 사용할 수 있습니다.
2.3.2 ENV PYTHONUNBUFFERED 1
- 의미: 환경 변수를 설정합니다.
- 설명: PYTHONUNBUFFERED=1은 Python이 출력을 버퍼링하지 않도록 설정하는 옵션입니다. 즉, 로그나 콘솔 출력을 바로바로 확인할 수 있게 합니다. 보통 Docker 환경에서는 실시간 로그 확인이 중요한데, 이 설정은 이를 위해 필요합니다.
2.3.3 WORKDIR /app
- 의미: 작업 디렉토리를 /app으로 설정합니다.
- 설명: Docker 컨테이너 내부에서 모든 명령이 실행되는 기본 디렉토리를 지정합니다. 이후의 모든 명령은 /app 디렉토리에서 실행됩니다.
2.3.4 RUN pip install --upgrade pip
- 의미: pip를 최신 버전으로 업그레이드합니다.
- 설명: Python 패키지 관리자인 pip의 최신 버전을 설치합니다. 최신 버전을 유지함으로써 최신 기능 및 보안 패치를 적용할 수 있습니다.
2.3.5 COPY requirements.txt /app/
- 의미: 로컬의 requirements.txt 파일을 Docker 컨테이너의 /app/ 디렉토리로 복사합니다.
- 설명: 이 파일에는 Python 패키지들의 목록이 포함되어 있으며, 이후 이 파일을 참조하여 필요한 패키지를 설치하게 됩니다.
2.3.6 RUN pip install -r requirements.txt
- 의미: requirements.txt 파일에 정의된 모든 패키지를 설치합니다.
- 설명: Django와 그 외에 애플리케이션이 필요로 하는 모든 라이브러리를 설치합니다. -r 옵션은 requirements.txt 파일을 참조하여 설치한다는 의미입니다.
2.3.7 COPY . /app/
- 의미: 현재 디렉토리(.)의 모든 파일을 Docker 컨테이너의 /app/ 디렉토리로 복사합니다.
- 설명: 애플리케이션 소스 코드와 다른 필요한 파일들을 모두 컨테이너로 복사합니다. 이 단계에서 프로젝트 내의 파일들이 Docker 컨테이너로 이동하게 됩니다.
2.3.8 CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
- 의미: 컨테이너가 실행되었을 때 실행할 기본 명령을 지정합니다.
- 설명: Django 개발 서버를 실행하는 명령입니다. python manage.py runserver 0.0.0.0:8000는 Django 서버를 8000번 포트에서 모든 IP 주소(0.0.0.0)로 접속 가능하도록 실행하는 명령입니다. 이를 통해 컨테이너 외부에서 이 서버에 접근할 수 있게 됩니다.
3. docker-compose.yml 파일 작성하기
3.1 docker-compose.yml 경로
- Manage.py가 있는 곳 즉 프로젝트의 루트 디렉토리에 docker-compose.yml을 새 파일로 만든 후 내용을 작성하시면 됩니다.
3.2 기본 docker-compose의 구조
3.3 주요 명령어
3.3.1 services:
- 의미: Docker Compose에서 여러 개의 서비스를 정의할 수 있으며, 여기서 services는 그 서비스들의 집합입니다. 이 파일에서는 하나의 서비스 web만 정의되어 있습니다.
- 설명: services는 컨테이너 그룹을 의미하며, 여러 개의 애플리케이션을 정의할 수 있지만 여기서는 Django 웹 서버 하나만 정의하고 있습니다.
3.3.2 web:
- 의미: Django 애플리케이션을 실행하는 컨테이너를 정의합니다.
- 설명: 이 항목에서 web은 서비스의 이름입니다. 이 이름을 사용하여 이 서비스를 참조하거나 컨테이너를 관리할 수 있습니다.
3.3.3 build: .
- 의미: Docker 이미지를 빌드할 때 현재 디렉토리(.)에 있는 Dockerfile을 사용하라는 의미입니다.
- 설명: 현재 디렉토리(.)에 있는 Dockerfile을 참조하여 이미지를 빌드합니다. Dockerfile이 포함된 경로가 현재 디렉토리라서 .으로 지정되었습니다. 즉, 이 Compose 파일은 앞서 설명한 Dockerfile을 기반으로 컨테이너를 빌드합니다.
3.3.4 ports:
- 의미: Docker 컨테이너의 포트를 호스트(로컬 시스템)에 매핑합니다.
- 설명: 호스트 시스템의 포트 8000을 Docker 컨테이너의 포트 8000에 연결합니다. 즉, 로컬에서 localhost:8000으로 접근하면 Docker 컨테이너 내부에서 실행 중인 Django 서버에 접속할 수 있게 됩니다.
3.3.5 - "8000:8000"
- 의미: 호스트의 포트 8000과 컨테이너의 포트 8000을 매핑합니다.
- 설명: Docker 컨테이너에서 실행되는 Django 서버는 기본적으로 0.0.0.0:8000에서 대기 중입니다. 이 설정을 통해 로컬에서 Django 서버에 접근할 수 있습니다.
3.3.6 volumes:
- 의미: 호스트 파일 시스템과 Docker 컨테이너 사이의 파일 동기화 및 공유를 설정합니다.
- 설명: 로컬 파일 시스템의 특정 디렉토리와 컨테이너의 디렉토리를 연결하여 파일을 공유합니다. 이를 통해 애플리케이션 코드와 정적 파일을 컨테이너와 호스트 간에 동기화할 수 있습니다.
3.3.7 - .:/app
- 의미: 현재 디렉토리(.)를 컨테이너의 /app 디렉토리로 마운트합니다.
- 설명: 로컬 개발 환경에서 코드가 수정되면 이 변경 사항이 Docker 컨테이너 내의 /app 디렉토리에 바로 반영됩니다. 이렇게 하면 Docker 컨테이너를 다시 빌드하거나 재시작하지 않고도 Django 애플리케이션을 바로 업데이트할 수 있습니다.
3.3.8 - ./staticfiles:/app/staticfiles
- 의미: 로컬의 staticfiles 디렉토리를 컨테이너의 /app/staticfiles 디렉토리로 마운트합니다.
- 설명: Django에서 collectstatic 명령어로 모은 정적 파일을 이 경로에 저장합니다. 이 설정을 통해 정적 파일이 로컬과 컨테이너 간에 공유되고, 컨테이너 내 Django 서버에서 정적 파일을 제공할 수 있게 됩니다.3.4 docker-compose 프로세스4. 흔히 겪는 오류와 해결 방법

4.1 패키지 호환성 문제 - requirements.txt의 호환 문제
저는 여기서 좀 많이 머리가 아팠습니다. 기존에 작업했던 프로젝트 가상환경에 설치된 모듈들의 버전 ex) Django가 몇 버전인지 등을 놓쳤던 경우가 있습니다. 터미널에서 나오는 에러를 꼼꼼히 읽으면 고치실 수 있을 겁니다.
4.2 시간대 설정 오류 - 사례: "Incorrect timezone setting: Asia/seoul"
이 오류는 좀 어이없던 오류였습니다. Setting.py에 시간대 설정을 Asia/Seoul이 아닌 Asia/seoul로 작성하여 오류가 생겼었습니다.
4.3 400 Bad Request 오류
settings.py에서 ALLOWED_HOSTS 설정을 제대로 안했던 문제가 있었습니다.
5. Docker 컨테이너 관리 기본 (powershell 환경)
5.1 시작
명령어: docker-compose up -d
위의 명령어를 작성하면 이제 Docker desktop과 연동이 됩니다.
다음 시간에는 Docker Desktop과 연동된 모습을 보면서 기본적인 기능들을 살펴볼 예정입니다.
무작정 따라하기를 하시면서 Docker에 대해 이해하셨으면 좋겠습니다.
'IT > Docker' 카테고리의 다른 글
Django 개발자를 위한 Docker Desktop 사용 가이드 (1) | 2024.09.19 |
---|