반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Yes
- 컴퓨터공학
- 사이버보안
- 클라우드컴퓨팅
- 데이터베이스
- 딥러닝
- 파이썬
- 프로그래밍
- 컴퓨터과학
- 컴퓨터비전
- 데이터과학
- 웹개발
- I'm Sorry
- 알고리즘
- 버전관리
- 네트워크보안
- 빅데이터
- 소프트웨어공학
- 프로그래밍언어
- 2
- 데이터분석
- 인공지능
- 자바스크립트
- 머신러닝
- 데이터구조
- 자료구조
- 소프트웨어
- 코딩
- 보안
- 네트워크
Archives
- Today
- Total
스택큐힙리스트
도커 컨테이너가 서비스를 시작한 후 계속 실행하는 방법 본문
반응형
저는 제가 하려는 것과 같은 작업을 수행하는 것처럼 보이는 여러 가지 자습서를 봤는데, 그러나 어떤 이유로 인해 내 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