Docker

[Docker] 리눅스 부팅 시 도커 컨테이너 자동 실행 시키기

jhkimmm 2022. 1. 7. 10:13

도커 컨네이너를 서비스로 등록하여 부팅시 자동으로 실행되도록 설정해보겠습니다.

라즈비안 OS환경에서 실행했으며(우분투에서도 동일하게 동작합니다.) Django 웹서버로 만든 도커 컨테이너를 사용하겠습니다.

 

먼저 /etc/systemd/system 폴더에 .service파일을 작성해주어야 합니다.

서비스 파일명은 자유롭게 설정해주면 되며 저는 "docker-django.service"로 설정하였습니다.

//커멘드
sudo vim /etc/systemd/system docker-django.service
//docker-django.service 파일
[Unit]
Description=My Django Server
Wants=docker.service
After-docker.service

[Service]
RemainAfterExit=yes
ExecStart=/usr/bin/docker start [컨테이너 이름]
ExecStop=/usr/bin/docker stop [컨테이너 이름]

[Install]
WantedBy=multi-user.target

- Description :  이 서비스를 설명하는 내용을 적는 부분입니다.

- After, Wants : 명시된 서비스/환경이 시작된 이후에 우리 서비스를 실행하라는 설정입니다.

- ExecStart : 실행할 어플리케이션이 위치한 전체 경로를 입력해주어야 합니다. 저의 경우에는 /usr/bin 폴더에 docker실행파일이 위치해 있습니다.

 

systemd unit의 옵션들은 아래 블로그를 참고했습니다.

 

systemd unit 등록 관련 옵션 정리

- RHEL 7 의 OS 적인 가장 큰 변화는 3.x 커널을 사용한다는 점(물론 2.6.x 커널에서 큰 차이가 있는 것은 아니다.) 그리고 정통적인 init 데몬에서 systemd 데몬으로 변경이 되었다는 점이다. systemd 에 대

fmd1225.tistory.com

 

그런 다음 systemctl을 이용해서 서비스를 시스템에 등록해줍니다.

sudo systemctl enable docker-django.service

재부팅 후 아래 명령어를 이용해서 서비스의 실행상태를 확인합니다.

systemctl status docker-django.service

active가 찍혀있으면 정상적으로 실행되고 있다는 의미입니다.

 

+추가

active옆에 (exited)라고 적혀있어서 다른 서비스들을 확인해보니 active(running) 인 것도 있고 active(exited)인 것도 있었지만 모두 정상적으로 실행되고 있었습니다. exit와 running의 차이점이 궁금해 찾아본 결과

 

systemctl status active: exited vs running

Sorry for this noob question, I searched for it and found no explanation. I'm unable to understand the different of systemctl status active (exited) for active (running). Here are 2 examples on my ...

askubuntu.com

 제가 작성한 .service파일은 systemd의 특징인 monitoring이나 respawning을 사용하지 않고 단순히 Daemon을 실행시키는 스크립트일 뿐이어서, 도커 컨테이너를 실행시키는 스크립트를 정상적으로 실행하고 Exited되었다는 의미인 것 같습니다. 즉 active(running)이나 active(exited)이나 문제 없는 정상적인 실행입니다.