现在,centos:7和centos:latest基本容器中都包含Systemd,但是默认情况下它不处于活动状态。为了使用systemd,您将需要包含类似于以下示例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删除了许多可能导致问题的单位文件。从这里,您就可以构建基础映像了。
$ docker build --rm -t local/c7-systemd .
为了使用上面创建的启用systemd的基本容器,您将需要创建Dockerfile与下面类似的容器。
FROM local/c7-systemd
RUN yum -y install httpd; yum clean all; systemctl enable httpd.service
EXPOSE 80
CMD ["/usr/sbin/init"]
构建此镜像:
$ docker build --rm -t local/c7-systemd-httpd .
运行已启用systemd的应用程序容器 为了使用systemd运行容器,您将需要从主机挂载cgroups卷。下面是一个示例命令,它将运行先前创建的启用了systemd的httpd容器。
$ docker run -ti --privileged=true -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 80:80 local/c7-systemd-httpd
该容器在有限的上下文中与systemd一起运行,并安装了cgroups文件系统。有报道说,如果您使用的是Ubuntu主机,则-v /tmp/$(mktemp -d):/run除了cgroups挂载外,还需要添加其他内容。
Content type
Image
Digest
Size
72.6 MB
Last updated
over 5 years ago
docker pull system386/centos-systemd:7.9.2009