用Docker (/sbin/init) 启动Debian (Jessie)

使用/sbin/init在docker上运行

由于上一篇文章中的Wheezy启动非常顺利,所以我决定在Jessie上也试一试。

Debian + Apache2 + PHP5可以被称为:Debian加上Apache2和PHP5。

这次版本由之前的7.9改为了8.2。
由于Jussis中没有/sbin/init,所以不知道如何停止getty…

FROM debian:8.2

MAINTAINER takara

WORKDIR /root/

ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update
RUN apt-get -y install apache2 php5
ENV DEBIAN_FRONTEND dialog

EXPOSE 80

CMD ["/sbin/init", "3"]

建造

$ docker build -t deb_init:8.2 .

常驻执行

在守护进程中运行

$ docker run -d --name deb_init -h deb_init deb_init:8.2

进入内部确认进程

$ docker exec -it deb_init bash
root@deb_init:~# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  1.5  0.4  28160  4192 ?        Ss   23:18   0:00 /sbin/init 3
root        21  0.6  0.3  31172  3368 ?        Ss   23:18   0:00 /lib/systemd/systemd-journald
root        26  0.7  0.2  38900  2984 ?        Ss   23:18   0:00 /lib/systemd/systemd-udevd
root        47  0.0  0.1  12836  1836 ?        Ss   23:18   0:00 /sbin/agetty --noclear tty1 linux
root        50  0.0  0.1  12836  1844 ?        Ss   23:18   0:00 /sbin/agetty --noclear tty2 linux
root        53  0.0  0.1  12836  1828 tty6     Ss+  23:18   0:00 /sbin/agetty --noclear tty6 linux
root        54  0.0  0.1  12836  1832 ?        Ss   23:18   0:00 /sbin/agetty --noclear tty5 linux
root        56  0.0  0.1  12836  1904 tty4     Ss+  23:18   0:00 /sbin/agetty --noclear tty4 linux
root        58  0.0  0.1  12836  1864 tty3     Ss+  23:18   0:00 /sbin/agetty --noclear tty3 linux
root        84  0.2  2.1 219060 21536 ?        Ss   23:18   0:00 /usr/sbin/apache2 -k start
www-data    87  0.0  0.6 219084  7164 ?        S    23:18   0:00 /usr/sbin/apache2 -k start
www-data    88  0.0  0.6 219084  7164 ?        S    23:18   0:00 /usr/sbin/apache2 -k start
www-data    89  0.0  0.6 219084  7164 ?        S    23:18   0:00 /usr/sbin/apache2 -k start
www-data    90  0.0  0.6 219084  7164 ?        S    23:18   0:00 /usr/sbin/apache2 -k start
www-data    91  0.0  0.6 219084  7164 ?        S    23:18   0:00 /usr/sbin/apache2 -k start
root        95  0.6  0.3  20236  3204 ?        S    23:18   0:00 /bin/bash
root       111  0.0  0.2  17492  2056 ?        R+   23:18   0:00 ps aux

与Debian Wheezy不同,无法停止tty。
即使使用systemctl disable getty@.service也只能停止tty1。唉。
但是,确认可以通过systemctl stop getty@tty1之类的命令停止它。只能加一个服务来停止它了。

有没有更好的方法呢?如果你知道的话,请给我指教一下。

#!/bin/bash
### BEGIN INIT INFO
# Provides:          ttystop
# Required-Start:
# Required-Stop:
# Should-Start:
# Default-Start: 3 4 5
# Default-Stop:
# X-Interactive:     true
# Short-Description: ttystop
### END INIT INFO
systemctl stop getty@tty1 getty@tty2 getty@tty3 getty@tty4 getty@tty5 getty@tty6

注册服务

请在Dockerfile的底部添加以下代码来注册以下服务。

COPY asset/ttystop /etc/init.d/
RUN chkconfig --add ttystop

重建完成后启动

暂时说,tty已经消失了。

root@deb_init:~# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  1.7  0.4  28192  4432 ?        Ss   11:05   0:00 /sbin/init 3
root        25  0.8  0.3  31172  3460 ?        Ss   11:05   0:00 /lib/systemd/systemd-journald
root        27  0.8  0.3  38996  3188 ?        Ss   11:05   0:00 /lib/systemd/systemd-udevd
root        85  0.3  2.1 219060 21904 ?        Ss   11:05   0:00 /usr/sbin/apache2 -k start
www-data    88  0.0  0.7 219084  7260 ?        S    11:05   0:00 /usr/sbin/apache2 -k start
www-data    89  0.0  0.7 219084  7260 ?        S    11:05   0:00 /usr/sbin/apache2 -k start
www-data    90  0.0  0.7 219084  7260 ?        S    11:05   0:00 /usr/sbin/apache2 -k start
www-data    91  0.0  0.7 219084  7260 ?        S    11:05   0:00 /usr/sbin/apache2 -k start
www-data    92  0.0  0.7 219084  7260 ?        S    11:05   0:00 /usr/sbin/apache2 -k start
root        96  1.6  0.2  20236  3052 ?        S    11:05   0:00 /bin/bash
root       101  0.0  0.1  17492  2028 ?        R+   11:05   0:00 ps aux

这个命令没有停止(我尝试了)

RUN systemctl disable getty-static
RUN systemctl disable getty@
RUN systemctl disable getty-static
RUN systemctl list-unit-files --type=service|grep getty
RUN ln -sf lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@tty2.service
RUN ln -sf lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@tty3.service
RUN ln -sf lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@tty4.service
RUN ln -sf lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@tty5.service
RUN ln -sf lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@tty6.service
RUN systemctl disable getty@tty1
RUN systemctl disable getty@tty2
RUN systemctl stop getty@tty3
RUN systemctl stop getty@tty4
RUN systemctl stop getty@tty5
RUN systemctl stop getty@tty6

( ̄ヘ ̄;)ウーン
不知道正确答案是什么呢?

请参考以下网站

systemd常见问题解答