본문 바로가기
Commands/docker

Dockerfile 알아보기

by 꼰대코더 2023. 12. 7.

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 Cheat Sheet - Kapeli

Usage: FROM FROM : FROM @ Information: FROM must be the first non-comment instruction in the Dockerfile. FROM can appear multiple times within a single Dockerfile in order to create multiple images. Simply make a note of the last image ID output by the com

kapeli.com

 

정의된 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