Docker

Docker entrypoint

끈끈 2023. 6. 1. 01:28

 

  • entrypoint를 활용해 컨테이너가 생성될 때 실행할 명령어를 지정하는 방법

 

entrypoint란?

 

  • docker 컨테이너가 생성될 때 기본적으로 실행 할 명령어를 지정해 주는 옵션
  • entrypoint는 Dockerfile과 docker-compose.yml 모두 작성할 수 있다
  • 만약 Dockerfile, docker-compose.yml 모두 entrypoint가 작성되어 있다면 Dockerfile의 entrypoint는 무시되고 docker-compose.yml의 명령어가 우선적으로 수행된다

 

Dockerfile

 

FROM python:3.9.15

# .pyc 파일을 생성하지 않도록 설정합니다.
ENV PYTHONDONTWRITEBYTECODE 1

# 파이썬 로그가 버퍼링 없이 즉각적으로 출력하도록 설정합니다.
ENV PYTHONUNBUFFERED 1

# /app/ 디렉토리를 생성합니다.
RUN mkdir /app/

# /app/ 경로를 작업 디렉토리로 설정합니다.
WORKDIR /app/

# main.py 파일을 /app/ 경로로 복사합니다.
COPY ./main.py /app/

 

 

docker-compose.yml

 

version: '3.8' # docker-compose.yml에 사용될 문법 버전을 정의합니다.

services:
  example: # 서비스 이름을 지정합니다. 서비스 이름은 컨테이너끼리 통신할 때 사용됩니다.
    container_name: example # 컨테이너 이름을 지정합니다.
    build: . # 현재 경로에 있는 Dockerfile을 사용해 이미지를 생성합니다.
    entrypoint: sh -c "python3 main.py" # 작업 디렉토리에 존재하는 main.py 파일을 실행시킵니다.
    restart: always # 컨테이너가 종료됐을 때 다시 실행시켜 줍니다.

 

임의의 파이썬 파일을 만들어서 실행해보기

 

vi 편집기를 사용해 실행시킬 python 파일을 만들고,

 

entrypoint를 사용해 컨테이너에서 실행시켜 보기

 

vi 편집기로 main.py 파일을 열고 수정해보기

 

main.py:

from time import sleep
for i in range(100):
    print(f"print number : {i}")
    sleep(1)

 

# 컨테이너 생성
sudo docker compose up --build -d
>> --build : 이미 빌드된 이미지가 있기 때문

# print문 출력 확인
sudo docker compose logs -f
>> logs 명령어를 사용해 작성 한 print문이 정상적으로 출력되는지 확인
>> ctrl + C : log 나가기

 

 

'Docker' 카테고리의 다른 글

Docker postgresql 컨테이너 생성  (1) 2023.06.01
docker-compose.yml 두 개 이상의 컨테이너 생성하기  (1) 2023.06.01
Dockerfile 이미지 빌드하기  (2) 2023.06.01
Docker volume  (4) 2023.06.01
Docker compose, port forwarding  (2) 2023.05.31