Docker를 사용하여 백그라운드에서 컨테이너를 지속적으로 실행
Docker는 백그라운드에서 실행될 때 자동으로 컨테이너를 종료합니다. 그러나 프로세스가 완료되더라도 인스턴스가 계속 실행되도록 해야 하는 특정 인스턴스가 있습니다. 이 기사에서는 백그라운드에서 도커 컨테이너를 계속 실행하는 방법에 대해 설명합니다.
백그라운드에서 Docker 컨테이너 실행
컨테이너를 실행하는 방법을 단순화하려면 다음과 같이 백그라운드에서 컨테이너를 실행해야 합니다.
docker run -d image sample
아래와 같이 실행하는 대신:
docker run -i -t image sample
-d
를 사용하는 것이 좋습니다. 단 하나의 명령으로 컨테이너를 실행할 수 있고 Ctrl+P + <를 눌러 컨테이너의 터미널을 분리할 필요가 없기 때문입니다. kbd>Q.
그러나 -d
매개변수에 문제가 있습니다. 결과적으로 명령이 포그라운드에서 실행되지 않는 한 컨테이너가 즉시 중지됩니다.
컨테이너에서 Apache 서비스를 실행하려는 경우를 사용하여 이를 설명하겠습니다. 이를 수행하는 직관적인 방법은 다음과 같습니다.
docker run -d apache-server apachectl start
그러나 Apache Daemon을 분리하면 apachectl
이 종료되기 때문에 시작된 컨테이너는 즉시 중지됩니다.
도커는 이것을 좋아하지 않습니다. Docker는 전경에서 계속 실행하려면 명령이 필요합니다. 그렇지 않으면 애플리케이션이 컨테이너를 중지하고 종료한다고 생각합니다.
포그라운드에서 컨테이너 실행
foreground 옵션으로 apache 실행 파일을 직접 실행하여 이 문제를 해결할 수 있습니다.
docker run -d apache-server /usr/sbin/apache2 -D NO_DETACH -D FOREGROUND
여기에서 apachectl
이 수행하는 작업을 수동으로 수행하고 apache 실행 파일을 실행합니다. 이 접근 방식을 사용하면 Apache가 포그라운드에서 계속 실행됩니다.
다시 말하지만 프로세스는 Unix 기반 이미지마다 다릅니다.
문제는 일부 응용 프로그램이 포그라운드에서 실행되지 않는다는 것입니다. 또한 환경 변수를 직접 내보내는 등의 추가 작업이 필요합니다.
이 상황에서 명령에 tail -f /dev/null
을 추가할 수 있습니다. 꼬리
가 전경에서 계속 실행되기 때문에 컨테이너가 멈추지 않습니다.
이전 사례에서 이 기술을 사용할 수 있습니다.
docker run -d apache-server apachectl start && tail -f /dev/null
tail -f /dev/null
은 우리에게 해를 끼치지 않으므로 모든 응용 프로그램에 대해 이 해결 방법을 사용할 수 있습니다.
컨테이너를 무기한 실행
데몬 -d
모드에서 컨테이너를 무한정 활성 상태로 유지하는 또 다른 간단한 방법은 컨테이너의 인수로 sleep infinity
를 실행하는 것입니다. 이는 데몬 모드에서 TTY를 할당하는 것과 같은 이상한 작업을 수행하는 것과는 별개입니다.
sleep
을 기본 명령으로 만드는 것과 같이 명령이 특이하긴 하지만.
docker run -d apache-server sleep infinity
또한 -t
매개변수는 pseudo-tty
를 할당하고 트릭도 수행해야 합니다. 이것은 bash가 대화식 TTY에 연결되어 있다고 생각하기 때문에 계속 실행되도록 조작합니다.
docker run -t -d apache-server
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn