배포1 | Docker

Yeseul Han·2022년 8월 16일
0

이미지 vs 컨테이너 차이

컨테이너는 환경과 컴퓨터os 패키지들을 포함한다! aws등 배포 서버도 container 단위에서 이뤄지는 것

바인드마운트란?

  • 도커 내부에서 데이터베이스가 아닌 소스코드들도 실시간으로 변경한 것을 추적할 수 있도록 해주는 것!
  • 바인드마운트를 해주는 것으로 소스코드를 변경해도 도커가 추적하기 때문에, 브라우저에서 걸려있는 포트번호에 접속해서 새로고침하면 변경내용을 매번 이미지 빌딩을 하지 않아도 바로바로 확인할 수 있다!
  • 바인드마운트의 장점은 이렇게 실시간으로 작업을 지속하면서 한 번 코드 적고 이미지를 빌드하는 것이 아닌, 개발자가 원하는 분기에 여러 작업을 하고 마친 뒤 빌드할 수 있게 한다!
  • 왜 굳이 IDE에서 확인 다 하고 빌딩하는 것이 아니라 도커 바인드마운트를 통해서 확인하느냐? → IDE에서 작업을 마치고 도커로 옮겨줘도 되고, 도커에서 시작하면서 바인드 마운트로 작업할 수도 있다!(추가 수정)

Dockerfile

0. FROM

도커 파일은 os 안에서 작동된다. 도커허브에서 검색해서 어떤 os를 컨테이너 안에 사용할지 정할 수 있다.

예를들어

FROM python:3.8-slim-buster

요렇게 쓰여 있으면 가벼운 버전의 리눅스 os+파이썬 3.8 내장이다.

1. WORKDIR

어플리케이션을 실행할 폴더를 새로 만들어주자. 여기선 app이라는 폴더를 만들어보았다.

WORKDIR /app

2. COPY->RUN requirements.txt

app폴더 안에는 requirements를 인스톨 할 수 있도록 requirements.txt 파일이 있어야 한다. 베이스 폴더에 있는 requirements.txt를 복사해 도커내 /app폴더에 넣고 이름을 requirements.txt로 지정한다는 뜻이다.

COPY requirements.txt requirements.txt

복사된 requirements.txt파일 속 requirements를 깔아보자.

RUN pip3 install -r requirements.txt

3. 디렉토리 내 모든 파일 복사

로컬 디렉토리 내 모든 파일을 복사해서 /app 폴더 안에 넣어준다.

COPY . .

4. 커맨드

python3 manage.py runserver를 해주자.
컨테이너에서 접근할 포트가 필요해서 8000포트를 지정해준다.

CMD ["python3", "manage.py", "runserver", "0.0.0.0:8000"]

5. .dockerignore

venv는 도커파일에 올라가지 않길 바라기 때문에 dockerignore에 추가해준다.

6. 짜잔

짧고 간단한 도커파일이 완성되었다

7. 도커빌드

docker build --tag python-django .
# .에 있는 파일들을 python-django라는 태그를 붙여서 이미지를 빌드해라

docker run --publish 8000:8000 python-django

%%. 기현튜터님 도커파일

FROM python:3.10.0-alpine
ENV PYTHONDONTWRITEBYTECODE=1  #파이시 파일이 필요하지 않기 때문에 바이트 코드를 쓰지 말라는 것
ENV PYTHONUNBUFFERED=1  #파이썬이 버퍼링 없이 출력되도록 

RUN apk update
RUN apk add build-base python3-dev py-pip jpeg-dev zlib-dev

COPY requirements.txt /usr/src/app/
WORKDIR /usr/src/app
RUN pip install -r requirements.txt

COPY . /usr/src/app/
profile
코딩 잘하고 싶다

0개의 댓글