본문 바로가기
개발과 기술

[Docker] 도커 컨테이너 실행유지 방법 및 /dev/null 설명

by growd 2020. 5. 15.

[Docker] 도커 컨테이너 실행 유지 방법 및 /dev/null 설명

 

 

도커 컨테이너는 detached(-d 옵션) 모드로 실행하면 entrypoint 커맨드를 실행 후, foreground(background의 반대 개념)에서는 바로 종료되도록 설계되었습니다. 이는 만약 컨테이너 내부의 서버나 서비스가 멈추면 사용자가 원하지 않아도 컨테이너도 함께 종료되는 문제가 발생할 수 있습니다.

 

혹은, 사용자가 컨테이너 내부에서 서버 같은 상시 작동하는 프로그램을 운영하는 것이 아니라, 컨테이너 내부의 환경을 이용하여 다른 작업을 하는 것을 원하는 경우가 있을 수 있습니다.

 

docker command를 이용하는 경우

docker run --entrypoint "tail -f /dev/null"

 

Dockerfile을 이용하여 이미지를 빌드하는 경우

# project/Dockerfile

FROM dockerimage:dockerimageversion

CMD tail -f /dev/null

 

docker-compose.yml파일을 이용하여 컨테이너를 실행하는 경우

# project/docker-compose.yml

version: "X"

services:
  service_name:
    container_name: container_name
    image: docker_image
    volumes:
      - ./:/app/
    working_dir: /app/
    command: tail -f /dev/null

 

 

/dev/null

주로 /dev/null의 위치를 가지는 null device는 라고 불리는 device file로써, 리눅스 혹은 Unix-like한 운영체제에서 불필요한 출력 스트림을 버릴 수 있지만 성공 리포트를 받을 수 있는 곳입니다. 운영체제 속 "블랙홀"로 불리기도 합니다.

 

tail -f /dev/null 설명

unix-like 운영체제에서 사용되는 tail명령은 파일의 마지막 부분을 읽는 명령어입니다. 이 명령어에서 -f 옵션은 follow를 나타내는 것으로 계속해서 파일의 마지막을 읽어들이는 명령입니다. 즉, 읽고 있는 파일이 계속해서 늘어나면 tail -f 옵션으로 마지막을 업데이트하며 볼 수 있습니다. 주로 로그 파일등을 계속해서 업데이트하며 볼 때 많이 사용합니다. 이 명령을 null device file에 적용함으로서, 계속해서 null device file을 따라서 읽는 명령어를 실행하는 것입니다. 위의 도커 설정은 도커 컨테이너가 계속해서 null device file을 읽는 일을 entrypoint 커맨드로 설정함으로서, 컨테이너가 종료되지 않게끔 할 수 있는 것 입니다.

댓글