-
dockerfile 작성하기Backend/Docker 2023. 8. 1. 14:53
필자는 API 서비스 아주 간단하게 만들었고, 이를 서버에 띄울려고 한다.
로컬에서 테스트를 해보는 것도 좋지만, docker가 익숙하지 않기에 이번 기회에 조금 친해지고자
dockerfile을 한번 작성해보았다.
그리고 이어서 dockerfile을 기반으로 docker-compose.yml 파일도 연달아 작성해보도록 하겠다.
1.제일 윗줄에는 이미지를 어디서 가져왔는지에 대한 출처를 적어준다.
FROM python:3.7.9
2. image가 올라갔을 때, 수행되는 명령어를 적어준다.
RUN mkdir /appCOPY /app /appCOPY pyproject.toml /appWORKDIR /app필자의 경우, app이라는 폴더를 만들고 -> 해당 디렉토리에 있는 app 항목을 '/app'으로 복사
해당 디펜던시도 '/app' 아래로 복사
작업 디렉토리를 '/app' 으로 지정함 -> cd 명령어와 동일 함을 알 수 있다.
3. 이후 source를 복사한 뒤로, 본격적으로 의존성 패키지를 설치하는 환경을 만들어 준다.
-> poetry 설치 및 실행 명령어 적어주기 .
(그리고 poetry는 pip3을 이용하여 설치됨 !!!! )
RUN pip3 install poetry4. 본격 poetry 사용
RUN poetry config virtualenvs.create falseRUN poetry install --no-dev --no-rootpoetry로 pyporject.toml에 추가되어 있는 패키지를 설치할 때 사용하는 명령어는 poetry inlstall이며,
poetry install 할 때 주의 할 점이 존재한다.
-> poetry install --no-root를 붙여야 빌드 오류가 나지 않는 것
이 이유는 --no-root를 붙여줘야 의존성만 설치를 해주기 때문이다!
5. 패키지가 모두 설치되었다면, expose를 이용하여 port 를 지정해주고, 서버를 띄워줄 command를 작성함
EXPOSE 8001CMD ["uvicorn","main:app", "--host", "0.0.0.0", "--port", "8001"]expose는 dockerfile의 빌드로 생성된 이미지에서 열어줄 포트를 의미하며, 호스트 머신과 컨테이너 포트 매핑시 사용된다!! ** 중요 **
컨테이너 생서 할 때 실행되며, 보통 컨테이너 내부에서 항상 돌아가는 서비스를 띄울 때 사용된다!
이것을 한번에 쓰면 아래와 같다.
# DockerfileFROM python:3.7.9
RUN mkdir /appCOPY /app /appCOPY pyproject.toml /appWORKDIR /app
RUN pip3 install poetryRUN poetry config virtualenvs.create falseRUN poetry install --no-dev --no-root
EXPOSE 8001CMD ["uvicorn","main:app", "--host", "0.0.0.0", "--port", "8001"]'Backend > Docker' 카테고리의 다른 글