본문 바로가기

리눅스

[draft] CentOS 7 컨테이너 내에서 init를 사용하는 방법

728x90

CentOS 7 컨테이너 내에서 init를 사용하는 방법(centos7 init)

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

1. Dockerfile 설정

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

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

ENV container docker

# Install systemd and necessary packages
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/*;

# Mount /run/systemd/system
VOLUME ["/sys/fs/cgroup"]

# Set systemd environment variables
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 --tag anti1346/centos7:init --no-cache .

3. 컨테이너 실행

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

docker run --privileged -d --name centos7-init anti1346/centos7-init:latest

4. 컨테이너에 접속

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

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

 

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

 

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

 

728x90