用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常见问题解答