#どういう状況だってばよ!?
- CentOSで定期実行を実現する為にsystemdを自作したい。
- 実機のCentOSだと自作systemdが動くのに、Docker上のCentOSだとなぜかダメ。
- 具体的にはDocker上だと下記のエラーでこける。
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
#あたいはこんな環境でやってます
この記事は下図のようにWindows10のDocker Desktopをインストール済で、Docker-composeももれなくセットでインストールされている前提になります。
#まずはdocker-compose.ymlを新規作成
どこかのフォルダにdocker-compose.ymlという設定ファイルがある訳ではないです。
また、docker-compose.ymlを置く場所はひとまずどこでもよかとです。
Docker初心者なので『docker-compose.ymlって設定ファイルどこにあるの…?どこに置かなきゃいけないの…?』なんて右往左往してました…(´・ω・`)
docker-compose.yml ≒ コンテナ作成手順書(指示書) って捉えるといいかな~って思います。
んで、今回は『C:\Users\waokitsune\centos8_systemd_test』というフォルダにdocker-compose.ymlを作成してみました。
#docker-compose.ymlの中身
参考サイトさん を参照させてもらいました。
(centosという名前のイメージは既にある前提のymlになります)
version: "3.8"
services:
centos8_systemd_test:
image: centos
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
cap_add:
- SYS_ADMIN
command: /sbin/init
#PowerShellでDocker-composeにymlを食わせる
PowerShellを起動してまずはdocker-composeが置いてある場所へ行き…
cd C:\Users\waokitsune\centos8_systemd_test
docker-composeコマンドでコンテナ作成。
docker-compose up -d
#ymlを食わせて出来たコンテナを使うぞい
Docker Desktopのダッシュボード開いて、端末起動!
ああ…なんか頭痛が痛いみたいなコンテナ名になっちゃってますね…(´・ω・`)
まずは ps aux
でプロセスを見てみましょい。
なんか行けそうな気がします。
ちなみに自作systemdが動かなかったコンテナの ps aux
結果はこちら。
テキストファイルを作成するシェルスクリプトファイル『zoi.sh』をルート直下に作成します。
#!/usr/bin/bash
touch /zoizoi.txt
作ったシェルスクリプトファイルに実行権限を与えてあげます。
chmod 755 /zoi.sh
そして、『/etc/systemd/system』フォルダーに『zoi.service』ファイルを作成します。
作ったシェルスクリプトをキックするだけの簡単なやつです。
[Unit]
Description=kyoumoitinitigannbaruzoi
[Service]
Type=simple
ExecStart=/zoi.sh
[Install]
WantedBy=multi-user.target
準備ができたので『zoi.service』を起動してみます。
systemctl start zoi.service
エラー無く終了したっぽいです。
本当か?本当にそうかぁ~?
systemctl status zoi.service
で確認。
白丸なので正常終了っぽいです。
(シェルスクリプトに実行権限与え忘れてサービス起動した痕跡があるのはモアイ教ご愛敬)
ls /
でも確認。
シェルスクリプトによってテキストファイルが作成されてます。
OKっす。
無事、Docker上のCentOSで自作systemdを動かせました。
#蛇足
docker-compose.ymlがあると『まったく同じ環境をまた作る』が簡単にできて便利だと思いました。
#バージョン
Windows10 Pro バージョン1909 OSビルド19042.630
Docker Desktop:2.5.0.1(49550) Engine:19.03.13 Compose:1.27.4
PSVersion 5.1.19041.610
CentOS Linux release 8.2.2004 (Core)