본문 바로가기

리눅스

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

728x90

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

기본적으로 Docker 컨테이너는 systemd를 지원하지 않기 때문에 다음과 같은 방법을 사용하여 systemctl을 활성화할 수 있습니다.

1. Dockerfile 설정

Docker 이미지를 빌드할 때 systemd 지원을 활성화하려면 Dockerfile에 다음 명령을 추가합니다.

vim Dockerfile
# Use the CentOS 7 base image
FROM centos:7

# Install systemd which will replace the entry point
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done) && \
rm -f /lib/systemd/system/multi-user.target.wants/* && \
rm -f /etc/systemd/system/*.wants/* && \
rm -f /lib/systemd/system/local-fs.target.wants/* && \
rm -f /lib/systemd/system/sockets.target.wants/*udev* && \
rm -f /lib/systemd/system/sockets.target.wants/*initctl* && \
rm -f /lib/systemd/system/basic.target.wants/* && \
rm -f /lib/systemd/system/anaconda.target.wants/* && \
yum -y install epel-release; yum -y install epel-release; yum -y install openssh-server; yum -y install initscripts; yum -y install passwd; yum -y install yum-utils; yum -y install wget; yum -y install tar; yum -y install sudo; yum clean all; \
(cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*; \
rm -f /etc/systemd/system/*.wants/*; \
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*; \
rm -f /lib/systemd/system/anaconda.target.wants/*; \
rm -f /etc/security/limits.d/20-nproc.conf; \
mkdir -p /root/.ssh; \
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config; \
echo "root:root" | chpasswd; \
chmod 700 /root/.ssh
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]

(또는)

FROM centos:7

RUN yum -y install epel-release openssh-server initscripts passwd yum-utils wget tar sudo

RUN (cd /lib/systemd/system/; rm -rf sysinit.target.wants basic.target.wants anaconda.target.wants)

RUN (cd /lib/systemd/system/sockets.target.wants/; rm -f udev* initctl*)

RUN rm -f /etc/security/limits.d/20-nproc.conf

VOLUME [ "/sys/fs/cgroup" ]

CMD ["/usr/sbin/sysctl", "-w", "system.slice.default_user=root"]

이 Dockerfile은 systemd를 설치하고 SSH를 사용하여 root 계정에 로그인할 수 있도록 설정합니다.

2. Docker 이미지 빌드

Dockerfile을 사용하여 이미지를 빌드합니다.

docker build -t my-centos-systemd .

3. 컨테이너 실행

이미지를 사용하여 컨테이너를 실행합니다. --privileged 플래그를 사용하여 특권 모드로 실행해야 합니다.

docker run --privileged -d my-centos-systemd

4. 컨테이너에 접속

컨테이너에 접속하여 systemctl 명령을 실행할 수 있습니다.

docker exec -it [컨테이너 ID 또는 이름] /bin/bash

 

이제 컨테이너 내에서 systemctl 명령을 실행할 수 있습니다.

단, 이 방법은 컨테이너 내에서 systemd를 사용할 수 있게 해주지만, 일반적으로 권장되는 방법은 아닙니다. Docker를 사용할 때 서비스 관리를 다른 방식으로 수행하는 것이 더 효율적일 수 있습니다.

 

728x90