docker-compose
docker-compose 예시
version: "3"
services:
service_name:
image: image_name
container_name: container_name
network_mode: "host"
build:
context: .
dockerfile: dockerfile_name
args:
- USER="user"
- PYTHON_VERSION=3.9.7
- CUDATOOLKIT_VERSION=11.1
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 0
capabilities: [gpu]
user: 1002:1002
volumes:
- /tmp/.X11-unix:/tmp/.X11-unix:ro
- /etc/localtime:/etc/localtime:ro
- ../../:/workspace
expose:
- "7001"
ports:
- "7001:22"
working_dir: /workspace
command: tail -f /dev/null
# command: ["python3", "something.py"]
# entrypoint: ["tini", "--"]
logging:
driver: "json-file"
options:
max-file: "20"
max-size: "100m"
/dev/null
- 주로 /dev/null의 위치를 가지는 null device는 라고 불리는 device file
- 리눅스 혹은 Unix-like한 운영체제에서 불필요한 출력 스트림을 버릴 수 있지만 성공 리포트를 받을 수 있는 곳
- 데이터 버리기: /dev/null은 특정 명령어나 프로그램이 데이터를 출력할 때 그 데이터를 실제로 저장하지 않고 버리기 위해 사용됩니다. 이것은 특히 프로그램이 표시된 결과를 저장하지 않고 무시하려고 할 때 유용합니다.
- 블랙홀처럼 동작: 이 파일로 데이터를 보내면 데이터는 사라지고 아무런 흔적도 남지 않습니다. 따라서 데이터를 보내면 마치 블랙홀에 빨려들어간 것처럼 사라집니다.
- 표준 출력 및 표준 에러 재지정: /dev/null은 종종 표준 출력이나 표준 에러를 재지정할 때 사용됩니다. 예를 들어, 표준 출력을 /dev/null로 리다이렉트하면 그 결과가 화면에 나타나지 않고 버려집니다.
tail -f /dev/null
- unix-like 운영체제에서 사용되는 tail명령은 파일의 마지막 부분을 읽는 명령어
- 이 명령어에서 -f 옵션은 follow를 나타내는 것으로 계속해서 파일의 마지막을 읽어들이는 명령
- 즉, 읽고 있는 파일이 계속해서 늘어나면 tail -f 옵션으로 마지막을 업데이트하며 볼 수 있음
- 주로 로그 파일등을 계속해서 업데이트하며 볼 때 많이 사용
- 이 명령을 null device file에 적용함으로서, 계속해서 null device file을 따라서 읽는 명령어를 실행하는 것
- 위의 도커 설정은 도커 컨테이너가 계속해서 null device file을 읽는 일을 entrypoint 커맨드로 설정함으로서, 컨테이너가 종료되지 않게끔 할 수 있음