전체 글
-
Docker로 간단한 Python 스크립트 실행하기2023.10.08
Docker로 간단한 Python 스크립트 실행하기
문득 Docker로 직접 프로그램을 돌려보고 싶었다.
Python 실행시켜서 print 명령어를 통해 host terminal stdout에 출력하도록
❓ python:latest 이미지 내려받아서 실행하면 Linux 설치하고 그 위에서 파이썬 돌리는거겠지? OS가 필요하긴 하니까.
-d 옵션으로 백그라운드에서 컨테이너 실행하고 exec -it bash로 들어가면, 리눅스 폴더 구조가 나오고 bin에 python이 있다
👉 맞다. Debian base인듯
🤔 `docker run python:latest python print("Hello World")` 처럼 명령 바로 실행은 안되나보다
무조건 .py 스크립트 짜서 python test.py 해주는 식으로 해야하나봄
👉 python 옵션 중 '-c' 를 쓰면 파이썬 명령을 string 형태로 넘겨서 실행시켜줄 수 있음. 이거 안키면 python script 파일을 인자로 넘겨줘야함
# Dockerfile for running simple python command directly from console
FROM python:latest
WORKDIR /usr/app/src
CMD ["python", "-c", "print('Hello World!')"]
docker build --tag py_cmd_img .
docker run --name py_cmd_container py_cmd_img
🤔
그냥 `docker run --rm -v .:/usr/src/myapp -w /usr/src/myapp python:latest python test.py` 하면 host stdout으로 출력되는데,
`docker run --rm -v .:/usr/src/myapp -w /usr/src/myapp -t python:latest python test.py`
로 하는건 -t 옵션 안주면 host stout으로 안뜬다!
# test.py
import time
print("Hello World")
i = 0
while True:
print("I'm actually alive:{0}".format(i))
time.sleep(1)
i += 1
-i 옵션은 내가 stdin으로 뭘 입력할때,
-t 는 그냥 터미널 연결하는거?
https://huisam.tistory.com/entry/Dockerfile
--rm 해야 컨테이너 종료 후 삭제
--it 보통 같이 쓰는데..
docker run -v .:/usr/src/myapp -w /usr/src/myapp python:latest python test.py
-t 안붙이면 - host terminal stdout에 print 내용 출력 안됨, docker logs로도 확인 불가능, 컨테이너 종료해야 print한 것들이 log파일로 flush 돼서 docker logs로 확인 가능
docker run -v .:/usr/src/myapp -w /usr/src/myapp -t python:latest python test.py
-t 붙이면 - host terminal stdout에 print 내용 출력됨, docker logs로는 확인 불가, 컨테이너 종료해도 log파일 안남는 듯 (docker logs로 확인 불가)
docker logs --follow --tail 10 mystifying_meninsky
Dockerfile 내에서 WORKDIR 안해줬으면 커맨드에서 -w로 디폴트 진입 디렉토리 지정해줄 수 있다 (해주는게 좋다. 안그러면 root 디렉토리로 진입함)
Docker는 container에서 발생한 log를 기본적으로 json 형태로 저장.
근데 이걸 stdout으로 바꿀 수 있나?
https://docs.docker.com/config/containers/logging/configure/
'<Infra> > [Docker]' 카테고리의 다른 글
Docker 공부 리소스 모음 (0) | 2023.10.07 |
---|