스택큐힙리스트

도커 컨테이너가 서비스를 시작한 후 계속 실행하는 방법 본문

카테고리 없음

도커 컨테이너가 서비스를 시작한 후 계속 실행하는 방법

스택큐힙리스트 2023. 11. 27. 12:09
반응형

저는 제가 하려는 것과 같은 작업을 수행하는 것처럼 보이는 여러 가지 자습서를 봤는데, 그러나 어떤 이유로 인해 내 Docker 컨테이너가 종료됩니다. 기본적으로 Docker 컨테이너 안에 웹 서버와 몇 가지 데몬을 설정하고 있습니다. 이 작업의 마지막 부분은 Dockerfile에서 CMD로 실행하는 run-all.sh라는 bash 스크립트를 통해 수행됩니다. run-all.sh는 다음과 같이 구성되어 있습니다:


service supervisor start
service nginx start

그리고 Dockerfile 내에서 다음과 같이 실행합니다:


CMD [sh, /root/credentialize_and_run.sh]

나는 수동으로 작업을 실행할 때(즉, -i -t /bin/bash로 이미지에 접속하는 경우) 서비스가 모두 올바르게 시작되는 것을 확인할 수 있으며, 이미지를 실행할 때도 모든 것이 올바르게 실행되는 것 같지만, 프로세스 시작 후에 이미지가 종료됩니다. 프로세스를 계속 실행하려면 컨테이너가 계속해서 실행되어야 한다고 알고 있습니다. 그럼에도 불구하고 docker ps -a를 실행하면 다음과 같이 나타납니다:


➜  docker_test  docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c7706edc4189 some_name/some_repo:blah sh /root/run-all.sh 8분 전 Exited (0) 8분 전 grave_jones

왜 그러는 걸까요? 왜 종료되는 걸까요? 내 bash 스크립트의 마지막에 while 루프를 추가하여 계속 실행할 수는 있지만, 종료되지 않는 방법이 무엇인가요?

답변 1

만약 Dockerfile을 사용하고 있다면 다음을 시도해 보십시오:


ENTRYPOINT [tail, -f, /dev/null]

(당연히 이것은 개발 목적으로만 사용되며, nginx와 같은 프로세스가 실행 중인 컨테이너를 유지할 필요는 없습니다...)

답변 2

Docker 컨테이너가 시작된 후 서비스를 계속 실행하는 방법에 대해 알아보겠습니다. Docker 컨테이너 서비스 유지라는 주제로 SEO 최적화된 한국어 글을 작성하였습니다.
제목: Docker 컨테이너에서 서비스를 실행한 후 지속적으로 유지하는 방법
서론:
Docker는 가볍고 효율적인 가상화 기술로, 개발 및 배포 프로세스를 단순화하고, 애플리케이션을 쉽게 실행할 수 있습니다. 그러나 Docker 컨테이너를 실행한 후에도 일부 사용자는 컨테이너가 자동으로 종료되는 문제를 경험할 수 있습니다. 본 글에서는 Docker 컨테이너가 서비스를 시작한 후에도 지속적으로 실행되도록 하는 방법을 알아보겠습니다.
본문:
1. Docker 컨테이너의 인스턴스 수량 증가
Docker 컨테이너는 기본적으로 실행한 서비스가 종료되면 종료되고, 사용자는 재시작해야 합니다. 하지만 인스턴스를 여러 개 실행하면 한 인스턴스에서 서비스가 종료되어도 다른 인스턴스가 유지되면서 서비스를 계속 제공할 수 있습니다. 따라서 동일한 이미지로 여러 인스턴스를 생성하고, 로드 밸런서를 사용하여 해당 인스턴스로 접속하는 방식으로 서비스를 지속적으로 유지할 수 있습니다.
2. 컨테이너를 백그라운드로 실행하기
Docker 컨테이너를 실행할 때 -d 옵션을 사용하여 백그라운드에서 실행할 수 있습니다. 이렇게 하면 컨테이너가 백그라운드에서 계속 실행되며, 사용자가 로그에 액세스하여 필요한 정보를 확인할 수 있습니다. 다음과 같은 명령어를 사용하여 컨테이너를 실행할 수 있습니다:
```
docker run -d 이미지명
```
3. 오토 리스타트 정책 설정
Docker는 컨테이너의 재시작 정책을 설정할 수 있는 기능을 제공합니다. 예를 들어, 컨테이너가 비정상적으로 종료되었을 때 자동으로 재시작하도록 설정할 수 있습니다. 이를 위해 --restart 옵션을 사용하고, 여러 옵션 중에서 재시작 정책을 선택할 수 있습니다. 예를 들어, 항상 재시작하는 경우 --restart=always로 설정할 수 있습니다.
4. Systemd 또는 Supervisor와의 통합
Docker 컨테이너에서 서비스를 실행하고 유지할 때는 Systemd 또는 Supervisor와 같은 프로세스 관리 도구를 사용하여 컨테이너의 생명주기를 관리할 수 있습니다. 이러한 도구는 서비스 실행 및 종료를 관리하므로, 컨테이너가 정상적으로 유지되도록 지원합니다.
결론:
Docker 컨테이너에서 서비스를 시작한 후에도 지속적으로 실행되도록 유지하는 방법을 알아보았습니다. Docker 인스턴스를 여러 개 실행하거나 백그라운드에서 실행하거나, 재시작 정책을 설정하거나, 프로세스 관리 도구를 통합하는 등 다양한 방법이 있습니다. 이를 적용하여 Docker 컨테이너에서 안정적으로 서비스를 실행하고 관리할 수 있습니다. 최종적으로, 독자는 Docker를 활용하여 안정적이고 효율적인 서비스 제공을 할 수 있게 될 것입니다.

반응형
Comments