관리자

centos docker container에서는 기본적으로 systemctl을 사용할 수 없다.

docker hub의 official centos image에 따르면, systemd가 포함은 되어있지만 default로 inactive하다.(centos:7 부터)

(systemctl은 systemd를 관리하는 명령어이다.)

 

hub.docker.com/_/centos/#Systemd_integration

systemd를 사용하기 위해서는 추가 작업이 필요하다.

해결방법

  1. systemd를 사용할 수 있는 base 이미지 만들기

    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"]
  2. 위에서 만든 base 이미지를 바탕으로 이미지를 생성한다.
    ex)

    FROM local/c7-systemd
    RUN yum -y install httpd; yum clean all; systemctl enable httpd.service
    EXPOSE 80
    CMD ["/usr/sbin/init"]
  1. docker run에서 cgroups mount

    $ docker run -ti -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 80:80 <image name:tag>
    • ubuntu를 사용한다면 -v /tmp/$(mktemp -d):/run도 cgroup과 함께 추가해준다.

 

부가 설명

  • systemd는 CAP_SYS_ADMIN capability가 필요하지만 docker의 non previlieged container는 보안 문제로 CAP_SYS_ADMIN capability가 없다.
    하지만 previleged container는 비권장 사항이다.

  • 또한, systemd는 cgroup 파일을 필요로하니, –v /sys/fs/cgroup:/sys/fs/cgroup:ro를 통해 read-only mode로 마운트한다.

  • systemd만을 사용하기 위해서 rm -rf <wants들>를 이용해서 삭제한다.

 

참고 링크

developers.redhat.com/blog/2014/05/05/running-systemd-within-docker-container/
unix.stackexchange.com/a/490783

'linux, docker, kubernetes' 카테고리의 다른 글

Cgroup  (0) 2021.01.15
apt vs apt-get 비교(APT, dpkg)  (0) 2021.01.10
linux remote ssh 접속  (0) 2021.01.10

remote server에 ssh로 접속하기 위해서는

openssh-server openssh-clients

가 필요하다

아래 명령어로 설치, 실행한다.

# yum 또는 apt-get
yum –y install openssh-server openssh-clients

systemctl sshd start

systemctl sshd enable

systemctl sshd status

'linux, docker, kubernetes' 카테고리의 다른 글

Cgroup  (0) 2021.01.15
apt vs apt-get 비교(APT, dpkg)  (0) 2021.01.10
docker centos, ubuntu systemctl(service)  (0) 2021.01.10

+ Recent posts