conda 가상환경을 작성하여 flask 웹 어플리케이션 작성에 필요한 라이브러리를 인스톨하고
app.py 에 작성했다고 하자.
같은 폴더에 아래와 같이 인스톨한 라이브러리 리스트를 작성하자.
pip list --format=freeze > requirements.txt
그러면 폴더에는
- app.py
- requirements.txt
가 존재한다.
같은 폴더에 Dockerfile 화일명으로 아래와 같이 작성하자.
FROM python:3.9-slim-buster
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
EXPOSE 5000
ENV FLASK_APP=app.py
CMD ["flask", "run", "--host", "0.0.0.0"]
FROM | 기본이 되는 이미지를 지정한다. FROM <image> FROM <image>:<tag> 사용할 <image> 와 <tab> 은 https://hub.docker.com/ 에서 검색 |
WORKDIR | RUN, CMD, ENTRYPOINT, COPY, ADD 명령어를 실행하기 전에 작업할 디렉토리를 설정한 후 자동 이동한다. |
COPY | 현재 작업중인 HOST폴더의 모든 화일, 서브폴더를 Dockerfile 내 현재 폴더 . (WORKDIR) 에 복사한다. |
RUN | 쉘 컴맨드를 실행한다. COPY 로 인해 requirements.txt 가 복사되었기 때문에 flask 에 필요한 라이브러리를 인스톨한다. |
EXPOSE | Container가 상시 Listen 할 PORT 를 지정한다. 단순히 지정만 할 뿐 HOST PORT와는 연결되지 않고 docker run 시의 -p 옵션에 의해 HOST PORT와 연결된다. |
ENV | Container내에서 사용될 환경변수를 설정한다. FLASK_APP 는 flask 의 main 함수가 들어있는 화일을 지정한다. |
CMD | Container가 실행될 시 기본명령을 지정한다. 이 Docker의 목적은 flask를 서비스하는 것이기 때문에 flask 를 기동하는 command 가 지정되어 있다. CMD ["<executable>","<param1>","<param2>"] CMD <command> <param1> <param2> CMD ["<param1>","<param2>"] (ENTRYPOINT의 파라미터) |
※ ENTRYPOINT 와 CMD 는 실행을 시킨다는 공통점이 있으나 같이 사용하는 경우에는 CMD 에 ENTRYPOINT 에 지정되어 있는 프로세스의 파라미터를 지정하는 역할을 하고, 각각 하나만 정의되어 있을 경우에는 ENTRYPOINT는 프로세스 자체를 실행시키는 것에 비해 CMD 는 쉘의 서브 프로세스를 이용하여 실행시키는 것이 다른 점이다.
여러가지 Dockerfile 샘플들을 보며 좀더 자세히 알아보길 바라며 다른 인스트럭션의 설명에 대해서는 아래 사이트를 참조
https://kapeli.com/cheat_sheets/Dockerfile.docset/Contents/Resources/Documents/index
정의된 Dockerfile 을 이미지 빌드하고 Container 로 실행하기 위해선 아래 칼럼을 참조
https://eldercoder.tistory.com/15
'Commands > docker' 카테고리의 다른 글
docker-compose 개발 결과물을 서버에 릴리스 (1) | 2023.12.09 |
---|---|
docker-compose.yaml 알아보기 (0) | 2023.12.09 |
docker-compose 명령어 (1) | 2023.12.07 |
(docker) 기본 사용 명령 (0) | 2023.08.11 |
docker & docker-compose 설치 (0) | 2023.08.11 |