- 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 |