Docker로 Django 배포하기

장윤성·2024년 3월 5일
0

Requirement

일단 Docker를 쓸려면 Docker Desktop이랑 Docker에서 회원가입을 통해 아이디를 만들어야된다. 일단 이거는 기본적으로 되어있다고 생각하고 시작해볼까 한다.

https://docs.docker.com/desktop/install/windows-install/

https://docs.docker.com/desktop/install/linux-install/

local 에서 docker build

일단 나는 Django로 프로젝트를 진행했기 때문에 프로젝트가 있다고 가정하고 진행할 예정이다.

만약에 프로젝트 만드는 법이 궁금하다면 https://velog.io/@dbstjd0924/django-project-mysql-연결하기 여기를 참고하면 좋을 듯하다.

  1. requirements.txt 생성

    사실 프로젝트 빌드할 때 기본적으로 하는거기 때문에 간단하게 설명을 하면 가상환경내에 설치된 라이브러리와 버전을 정리해주는 파일을 만드는 것이다. 이 파일을 통해 나중에 새로운 가상환경에서도 간단한 명령어를 통해서 한번에 다운 받을 수 있다.

    pip freeze > requirements.txt

    혹시나 나중에 컨테이너 빌드할때 Exited 에러가 발생하는 경우에는 이 파일 안에 의존성 문제일 확률이 높기 때문에

    pip install -r requirements.txt

    이 명령어로 제대로 작동하는지 테스트 해보는게 좋을 듯 하다.

  2. Dockerfile 작성

    도커파일이란?

    도커 이미지를 생성하기 위한 DSL으로서 몇가지 명령어들 커스텀 이미지를 만들 수 있게 한다. 자세한 명령어는 https://cultivo-hy.github.io/docker/image/usage/2019/03/14/Docker정리/#dockerfile-기본-명령어 여기로 참고하면 좋을 듯 하다.

    일단 도커파일은 manage.py가 있는 곳에서 작성한다. 그리고 혹시나 같은 위치에 .git과 같이 서비스 실행에 필요 없는 파일들은 .dockerignore을 생성해서 넣어줘야 한다. (안하면 build할 때 에러 남)

    FROM python:3.8.5
    WORKDIR /usr/src/app
    
    COPY requirements.txt ./
    RUN pip install -r requirements.txt
    
    COPY . .
    
    EXPOSE 8000
    
    # 그대로 빌드 하는 경우
    CMD ["python", "manage.py", "runserver","0.0.0.0:8000"]
    
    # gunicorn 사용하는 경우
    CMD ["gunicorn", "--bind","0.0.0.0:8000","recommendu.wsgi:application"]
    

    사실 runserver로 배포하는거는 django에서 권장하고 있지 않기 때문에 나중에 nginx와 docker-compose를 사용해서 배포하는거를 올릴 예정이다.

Docker Image 생성

image 생성하기 전에 일단 docker login 로 로그인을 진행해야 한다.

docker build [option] [dockerid/projectname]:[version] [경로]
>>> docker build -t dbstjd0924@recommendu:0.1.0 .

. 은 현재 경로를 나타낸다.

뭐 이런 식으로 뜨면 성공이다.

docker images

이렇게 현재 존재하는 이미지들도 확인 가능하다.

이미지 실행하기

이미지 생성했으니깐 이제 이거를 실행시켜야 된다.

docker run --name [container name] -d -p [host port]:[container port]
docker run --name recommenduContainer -d -p 8000:8000 dbstjd0924/recommendu:0.1.0
-d : 계속해서 실행한다는 옵션
-p : 포트포워딩을 진행한다는 옵션
[host port] : 내가 열어줄 포트의 번호
[container port] : Dockerfile에 명시한 포트번호

실행하면 이렇게 컨테이너 아이디가 밑줄에 뜨는데 이러면 성공한거다.

docker ps -a

아래의 명령어를 입력하면 이렇게 컨테이너가 잘 떠있는거를 확인 할 수 있다.

여기서 STATUS가 중요한데, 저 사진처럼 up [time] 형식으로 떠있으면 프로젝트가 잘 돌아가는거고 EXITED가 떠있으면 프로젝트 어딘가에 오류가 생겨서 실행이 안되는거다.

Image를 Docker hub에 push

로컬에서 이미지를 만들었으니깐 다른 클라우드나 서버에서 바로 쓸 수 있도록 Docker hub에 올린다.

docker push [image]

이러면 이렇게 허브에 올라가는거를 확인할 수 있다.

push한 이미지 다른 서버에 pull

나는 일단 gcp를 사용하고 있기 때문에 gcp에 내 프로젝트를 pull해볼 예정이다.
그렇기 때문에 gcp에 docker를 다운받아야 된다. 다운받는 reference는 https://docs.docker.com/engine/install/ubuntu/
여기서 확인하면 더 정확하다.

# 사용자가 root여야지 다운받을 수 있으니깐 사용자 바꿔준다
su - 
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

이렇게 설정하고

apt install docker.io

이러면 docker가 설치된다. 그 이후에 docker login으로 로그인 해준다
그 이후에는 push와 비슷한 방식으로 명령어를 써주면된다.

docker pull dbstjd0924/recommendu:0.1.0


이렇게 하면 끝난다.

profile
소개를 어떻게 한줄로 해요..

0개의 댓글