전체 글

문득 Docker로 직접 프로그램을 돌려보고 싶었다.

Python 실행시켜서 print 명령어를 통해 host terminal stdout에 출력하도록


❓ python:latest 이미지 내려받아서 실행하면 Linux 설치하고 그 위에서 파이썬 돌리는거겠지? OS가 필요하긴 하니까.

-d 옵션으로 백그라운드에서 컨테이너 실행하고 exec -it bash로 들어가면, 리눅스 폴더 구조가 나오고 bin에 python이 있다

👉 맞다. Debian base인듯

https://stackoverflow.com/questions/47047520/python-base-image-vs-ubuntu-base-image-installing-python-separately-in-docker

 

 

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

+ Recent posts