Docker를 사용하여 백그라운드에서 컨테이너를 지속적으로 실행

Marion Paul Kenneth Mendoza 2023년6월20일
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 Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

관련 문장 - Docker Container