반응형
Docker 컨테이너에서 systemd 실행하기
기본적으로 Docker로 실행한 Ubuntu는 init 시스템이 없으며, systemd를 사용하지 않는다. 이는 Ubuntu 컨테이너가 주로 단일 프로세스를 실행하도록 설계되어 있기 때문이다. Docker 컨테이너는 단일 프로세스로 동작하는 것이 이상적이며, 여러 서비스를 동시에 관리하기 위해 컨테이너를 여러 개 실행하는 것이 일반적이다.
Docker 컨테이너에 systemd 설치 시도하기
// 컨테이너에 root 계정으로 접근
$ docker exec -it --user root <container-name> /bin/bash
$ apt-get update
// systemctl 설치
$ apt-get install systemd
// systemctl status 실행
$ systemctl status
- docker exec는 실행 중인 컨테이너에서 새로운 명령을 실행한다.
- -it는 컨테이너에 대화형 터미널을 연결한다.
- /bin/bash는 컨테이너 내에서 실행될 명령이 BashShell 임을 지정한다.
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
해당 에러 메시지가 뜨면서 systemctl 명령어가 실행되지 않는다. 위에서 설명했다시피 도커 컨테이너는 단일 프로세스로 동작하는 것을 기반으로 설계되었기 때문에 systemctl 명령어가 정상적으로 뜨기 위해서는 추가적인 작업이 필요하다.
git 설치 이후에 스크립트 실행
$ apt update && apt install sudo git -y
$ git clone https://github.com/DamionGans/ubuntu-wsl2-systemd-script.git && cd ubuntu-wsl2-systemd-script && sudo bash ubuntu-wsl2-systemd-script.sh --force
// 터미널 종료
$ exit
$ docker exec -it --user root graylog /bin/bash
// 컨테이너 재시작
$ docker restart <container-name>
$ systemctl status
정리하자면
궁금증을 해결하기 위해서 인터넷을 잔뜩 뒤져서 방법을 찾아냈지만... 굳이 도커 환경에서 systemd를 쓸일이 있을까하는 생각이 든다. 하나의 컨테이너에는 하나의 프로세스만 실행시키고 여러 프로세스를 실행하고 싶을때는 docker-compose를 이용해서 여러 컨테이너들을 묶어서 사용하도록 하자.
함께 읽으면 좋은 글
참고 사이트
'프로그래밍 > 도커(Docker)' 카테고리의 다른 글
도커 젠킨스(Jenkins)에서 PowerShell 사용 및 dotnet 빌드하기 (1) | 2024.12.11 |
---|---|
도커로 설치한 Redis CLI로 접근하기 (0) | 2024.12.02 |
도커(Docker)로 설치한 레디스(redis) 버전 확인하기 (3) | 2024.10.17 |
도커(Docker)로 Nginx 실행시 설정 파일 변경하는 방법 (0) | 2024.09.13 |
도커 파일(Dockerfile) 자주 쓰이는 명령어 정리 (0) | 2024.03.27 |
댓글