问题背景

在最开始,我在笔记本中运行KVM虚拟机。每次休眠恢复时,在KVM中的虚拟机就会带来大量的CPU负载。

另外我使用的Linux发行版是Debian Testing分支。由于某些服务是特定于发行版名称的,所以这些服务没有办法安装。使用Docker也可以,因此也不是必须使用虚拟机才可以。

但是,如果使用Docker镜像,一个容器启动一个服务,那么我有很多服务岂不是要启动很多容器。

因此才有了这个想法:启动容器,运行systemd进程,使用systemctl进行服务管理,把容器当作虚拟机使用。(这可能违背了容器的最佳实践,但是那只是最常用的场景。在我的场景中,我的做法就是最佳实践。任何食材都具有多种烹饪方法)

本文将介绍如何在Docker Container中运行“systemd”进程,来进行系统及服务管理。

解决办法

执行如下命令:

#!/bin/sh

docker run -it             \
  --name vm-centos         \
  --hostname vm-centos     \
  --env container=docker   \
  --tmpfs /run             \
  --tmpfs /tmp             \
  --volume /sys/fs/cgroup:/sys/fs/cgroup:ro \
  --cap-add SYS_ADMIN      \
  centos:7 /sbin/init

参考文献

 

  • WikiNotes/在容器中运行systemd进程
  • Is there any concrete and acceptable solution for running systemd inside the docker container?