ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 /app
    COPY /app /app
    COPY pyproject.toml /app
    WORKDIR /app

     

    필자의 경우, app이라는 폴더를 만들고 -> 해당 디렉토리에 있는 app 항목을 '/app'으로 복사

    해당 디펜던시도  '/app' 아래로 복사

    작업 디렉토리를  '/app' 으로 지정함 -> cd 명령어와 동일 함을 알 수 있다.

     

    3. 이후 source를 복사한 뒤로, 본격적으로 의존성 패키지를 설치하는 환경을 만들어 준다.

    -> poetry 설치 및 실행 명령어 적어주기 .

    (그리고 poetry는 pip3을 이용하여 설치됨 !!!! )

     

    RUN pip3 install poetry

     

    4. 본격 poetry 사용

     

    RUN poetry config virtualenvs.create false
    RUN poetry install --no-dev --no-root

    poetry로 pyporject.toml에 추가되어 있는 패키지를 설치할 때 사용하는 명령어는 poetry inlstall이며,

    poetry install 할 때 주의 할 점이 존재한다. 

     

    -> poetry install --no-root를 붙여야 빌드 오류가 나지 않는 것

    이 이유는 --no-root를 붙여줘야 의존성만 설치를 해주기 때문이다!  

     

    5. 패키지가 모두 설치되었다면, expose를 이용하여 port 를 지정해주고, 서버를 띄워줄 command를 작성함

     

    EXPOSE 8001
    CMD ["uvicorn","main:app", "--host", "0.0.0.0", "--port", "8001"]

     

    expose는 dockerfile의 빌드로 생성된 이미지에서 열어줄 포트를 의미하며, 호스트 머신과 컨테이너 포트 매핑시 사용된다!! ** 중요 ** 

     

    컨테이너 생서 할 때 실행되며, 보통 컨테이너 내부에서 항상 돌아가는 서비스를 띄울 때 사용된다! 

     

    이것을 한번에 쓰면 아래와 같다. 

     

    # Dockerfile 
     
    FROM python:3.7.9

    RUN mkdir /app
    COPY /app /app
    COPY pyproject.toml /app
    WORKDIR /app


    RUN pip3 install poetry
    RUN poetry config virtualenvs.create false
    RUN poetry install --no-dev --no-root

    EXPOSE 8001
    CMD ["uvicorn","main:app", "--host", "0.0.0.0", "--port", "8001"]

     

Designed by Tistory.