시스템 통합

시스템 통합

나는 이것을 묻는다질문 나는 systemd-udev-trigger가 권한이 있든 없든 docker 컨테이너에서 실행되어서는 안 된다고 생각합니다.

docker 컨테이너에서 systemd-udev-trigger를 실행해야 하는 몇 가지 시나리오가 있습니까?

답변1

첫 번째이자 가장 덜 구체적인 대답은 systemd-udev가 컨테이너 내부에서 실행되도록 설계되지 않았다는 것입니다. Docker는 systemd를 실행하기 위한 것이 아니라 단지 데몬을 실행하기 위한 것입니다.

언급한 컨테이너 이미지에는 systemd 실행에 대한 지침이 있습니다. 여기에는 권한이 없는 컨테이너 내에서 실행될 udev 서비스를 제거하는 작업이 포함됩니다. 빌드 프로세스 후에는 패키지 관리자를 사용하면 안 되므로 이는 Docker 컨테이너 내에서 작동합니다.

권한 있는 컨테이너에서는 이 지침이 udev도 비활성화하는 데 충분해야 한다고 생각합니다. 내 Fedora 26 시스템에서는 이것이 정적입니다 sysinit.target. 코드 가 sysinit.target.systemd-tmpfiles-setup.service

시스템 통합

Systemd는 이제 centos:7 및 centos:latest 기본 컨테이너에 포함되지만 기본적으로 활성화되지는 않습니다. systemd를 사용하려면 다음 Dockerfile 예시와 유사한 텍스트를 포함해야 합니다.

시스템 기본 이미지의 Dockerfile

dockerfile FROM centos:7 ENV container docker 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/*; VOLUME [ "/sys/fs/cgroup" ] CMD ["/usr/sbin/init"]

이 Dockerfile은 문제를 일으킬 수 있는 많은 단위 파일을 제거합니다. 여기에서 기본 이미지를 빌드할 수 있습니다.

console $ docker build --rm -t local/c7-systemd .

시스템 지원 애플리케이션 컨테이너 예

위에서 생성한 기본 systemd 지원 컨테이너를 사용하려면 Dockerfile아래와 유사한 컨테이너를 생성해야 합니다.

dockerfile FROM local/c7-systemd RUN yum -y install httpd; yum clean all; systemctl enable httpd.service EXPOSE 80 CMD ["/usr/sbin/init"]

다음 이미지를 빌드하세요.

console $ docker build --rm -t local/c7-systemd-httpd .

시스템 지원 애플리케이션 컨테이너 실행

systemd로 컨테이너를 실행하려면 호스트 시스템에서 cgroups 볼륨을 마운트해야 합니다. 다음은 이전에 생성한 systemd 지원 httpd 컨테이너를 실행하는 명령 예입니다.

console $ docker run -ti -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 80:80 local/c7-systemd-httpd

컨테이너는 systemd를 사용하여 제한된 컨텍스트에서 실행되며 cgroups 파일 시스템이 마운트되어 있습니다. Ubuntu 호스트를 사용하는 경우 -v /tmp/$(mktemp -d):/run cgroup 외에도 설치를 추가해야 한다는 보고가 있습니다 .

관련 정보