일단 Docker를 쓸려면 Docker Desktop이랑 Docker에서 회원가입을 통해 아이디를 만들어야된다. 일단 이거는 기본적으로 되어있다고 생각하고 시작해볼까 한다.
https://docs.docker.com/desktop/install/windows-install/
https://docs.docker.com/desktop/install/linux-install/
일단 나는 Django로 프로젝트를 진행했기 때문에 프로젝트가 있다고 가정하고 진행할 예정이다.
만약에 프로젝트 만드는 법이 궁금하다면 https://velog.io/@dbstjd0924/django-project-mysql-연결하기 여기를 참고하면 좋을 듯하다.
requirements.txt 생성
사실 프로젝트 빌드할 때 기본적으로 하는거기 때문에 간단하게 설명을 하면 가상환경내에 설치된 라이브러리와 버전을 정리해주는 파일을 만드는 것이다. 이 파일을 통해 나중에 새로운 가상환경에서도 간단한 명령어를 통해서 한번에 다운 받을 수 있다.
pip freeze > requirements.txt
혹시나 나중에 컨테이너 빌드할때 Exited
에러가 발생하는 경우에는 이 파일 안에 의존성 문제일 확률이 높기 때문에
pip install -r requirements.txt
이 명령어로 제대로 작동하는지 테스트 해보는게 좋을 듯 하다.
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를 사용해서 배포하는거를 올릴 예정이다.
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
가 떠있으면 프로젝트 어딘가에 오류가 생겨서 실행이 안되는거다.
로컬에서 이미지를 만들었으니깐 다른 클라우드나 서버에서 바로 쓸 수 있도록 Docker hub에 올린다.
docker push [image]
이러면 이렇게 허브에 올라가는거를 확인할 수 있다.
나는 일단 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
이렇게 하면 끝난다.