본문 바로가기

리눅스

CentOS 7 컨테이너 내에서 systemctl을 사용하는 방법(centos init)

728x90

CentOS 7 컨테이너 내에서 systemctl을 사용하는 방법(centos init)

호스트 운영체제가 CentOS 7일 경우

테스트 환경

$ cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)

privileged 모드로 컨테이너 실행

  • Docker 컨테이너를 실행할 때 --privileged 플래그를 사용하여 컨테이너를 특권 모드로 실행합니다.
docker run -d --privileged --cap-add=SYS_ADMIN --privileged --name centos7 centos:7 /sbin/init

Docker 컨테이너 목록 확인

docker ps -a
$ docker ps -a
CONTAINER ID   IMAGE      COMMAND        CREATED         STATUS         PORTS     NAMES
bd898ff016d1   centos:7   "/sbin/init"   6 minutes ago   Up 6 minutes             centos7

Docker 컨테이너 CentOS 7에 접속

docker exec -it centos7 bash

systemctl 서비스 상태 확인

systemctl status
$ docker exec -it centos7 bash     
[root@bd898ff016d1 /]# systemctl status
● bd898ff016d1
    State: running
     Jobs: 0 queued
   Failed: 0 units
    Since: Wed 2023-01-18 00:06:17 UTC; 8min ago
   CGroup: /docker/bd898ff016d12d203e14db9f74539a32b895db122315c3ad7f80c6a072929c99
           ├─1 /sbin/init
           └─system.slice
             ├─systemd-logind.service
             │ └─47 /usr/lib/systemd/systemd-logind
             ├─dbus.service
             │ └─46 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
             ├─systemd-udevd.service
             │ └─27 /usr/lib/systemd/systemd-udevd
             ├─system-getty.slice
             │ └─getty@tty1.service
             │   └─66 /sbin/agetty --noclear tty1 linux
             └─systemd-journald.service
               └─17 /usr/lib/systemd/systemd-journald
[root@bd898ff016d1 /]#
728x90

호스트 운영체제가 Ubuntu일 경우

테스트 환경

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.1 LTS
Release:        22.04
Codename:       jammy

** 호스트 운영체제가 우분투일 경우에 centos7 컨테이너 systemctl 명령을 사용할 수 없다.

privileged 모드로 컨테이너 실행

docker run -d --privileged --cap-add=SYS_ADMIN --privileged --name centos8 centos /sbin/init

Docker 컨테이너 목록 확인

docker ps -a
$ docker ps -a
CONTAINER ID   IMAGE     COMMAND        CREATED          STATUS          PORTS     NAMES
f2e657ea6557   centos    "/sbin/init"   12 seconds ago   Up 10 seconds             centos8

Docker 컨테이너 CentOS 8에 접속

docker exec -it centos8 bash

systemctl 서비스 상태 확인

systemctl status
$ docker exec -it centos8 bash
[root@f2e657ea6557 /]# systemctl status
● f2e657ea6557
    State: degraded
     Jobs: 0 queued
   Failed: 1 units
    Since: Wed 2023-01-18 00:49:15 UTC; 39s ago
   CGroup: /
           ├─init.scope
           │ ├─ 1 /sbin/init
           │ ├─71 bash
           │ ├─85 systemctl status
           │ └─86 [less]
           └─system.slice
             ├─systemd-udevd.service
             │ └─35 /usr/lib/systemd/systemd-udevd
             ├─systemd-journald.service
             │ └─27 /usr/lib/systemd/systemd-journald
             └─dbus.service
               └─52 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
[root@f2e657ea6557 /]#

 

CentOS 컨테이너에서 systemd를 실행하는 것은 일반적으로 권장되지 않으며, 컨테이너화된 환경에서 더 나은 방식으로 서비스 관리를 수행하는 것이 좋습니다. Docker 컨테이너 내에서 서비스를 실행하기 위해 Entrypoint, CMD 또는 Supervisord와 같은 다른 방법을 고려하는 것이 일반적인 접근 방식입니다.

 

728x90