728x90
반응형
Dockerfile 로 장고 서버를 띄워보자
FROM python:3.11-alpine
ARG APP_HOME=/app
# 파이썬이 표준출력과 표준에러출력을 버퍼링 하지 않도록 설정
ENV PYTHONUNBUFFERED 1
# 파이썬이 .pyc 바이트코드파일을 작성하지 않도록 설정
ENV PYTHONDONTWRITEBYTECODE 1
WORKDIR ${APP_HOME}
# 패키지들은 자주 바뀌지 않기 때문에 인스톨을 따로 가져가는게 좋다.
# 만약 전체 카피로만 requirements 를 가져오게 되면 코드가 수정되었을 때
# 다시 인스톨을 해줘야하는 일이 발생하기 때문에 따로 이미지 레이어를 쌓아준다.
COPY ./requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . ${APP_HOME}
RUN python3 manage.py migrate
CMD ["gunicorn", "lion_app.wsgi:application", "--config", "lion_app/gunicorn_config.py"]
기본 파이썬 이미지는 Debian-based 로 안정적이고 다른 라이브러리나 패키지와 호환이 잘 되지만 크기가 크다는 문제점이 있다. 그래서 특정 기능만을 수행하면 되는 컨테이너 환경에서는 크기를 무시할 수 없기 때문에 경량화된 Alpine python 이미지를 사용하는데 경량화 시키면서 최소한의 필수 패키지만을 포함하기 떄문에 공격 가능한 영역이 줄어 보안적으로 좋다.
Dockerfile 이 실행되는 경로가 종요하다고 다시 생각하게 된 부분이 COPY 명령어를 적용할 때 였다. 복사 붙여 넣는 작업을 수행하는데 인자로 받는 부분에서 앞부분이 현재 Dockerfile 이 있는 위치의 영향을 받고 그 뒤는 WORKDIR 혹은 Root 경로가 된다. 꼭 인지하고 작성하도록 하자
CMD 명령어는 우리가 명령어를 실행시킬때 띄어쓰기로 구분하는 과정을 리스트로 받아서 구분하는 특징을 가지고 있다.
실행명령어
docker build -t {image_name}:{my_tag} .
Dockerfile 이 존재하는 경로에서 위 명령어를 실행시켜주면 된다. 만약 해당경로에 여러 도커파일이 있어서 지정을 해야한다면,
docker build -t {image_name}:{my_tag} -f {target.Dockerfile} .
% docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test 0.1 01b0b58c73ca 2 hours ago 89.8MB
...
빌드한 이미지를 실행시켜 보면
docker run --name test-ctnr -d -p 8000:8000 test:0.1
lion_app % docker run --name test-ctnr -d -p 8000:8000 test:0.1
eb3c8b93e5b815eb90b2283ac4fea48c1f839cef1cc45c34e55dc8ad3e4e4d00
lion_app % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eb3c8b93e5b8 test:0.1 "gunicorn lion_app.w…" 3 seconds ago Up 2 seconds 0.0.0.0:8000->8000/tcp test-ctnr
lion_app %
728x90
반응형
'Dev. > Docker' 카테고리의 다른 글
[Cloud] 배포 - Docker : 장고 기본 css 파일 매핑 (0) | 2023.08.12 |
---|---|
[Cloud] 배포 - Docker : docker-compose.yml (0) | 2023.08.12 |
[Cloud] 배포 - Docker : Volume (0) | 2023.08.10 |
[Cloud] 배포 - Docker : Dockerhub (0) | 2023.08.07 |
[Cloud] 배포 - Docker : Dockerfile (0) | 2023.08.06 |
댓글