継続的インテグレーション パイプラインを立ち上げようとしているのですが、そのためにはコンテナー内に abc.deb ファイルを apt でインストールする必要があります。
debian/control ファイルには以下が含まれます:
Depends: ${python3:Depends}, ${misc:Depends}, python3-webpy, systemd
debian/rules ファイルには以下が含まれます (関連する部分のみを以下に紹介します)。
%:
dh $@ --with=python3,systemd
override_dh_systemd_start:
dh_systemd_start -p<application>
override_dh_installinit:
dh_systemd_start
私の Dockerfile は次のようになります:
FROM <relevant base image>
COPY results/*.deb /packages/
RUN export DEBIAN_FRONTEND=noninteractive && apt-get update && \
apt-get install -y --no-install-recommends --auto-remove \
dumb-init \
procps \
/packages/*.deb && \
apt-get autoremove -y && \
apt-get autoclean -y && \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /var/cache/apt
CMD tail -f /dev/null
docker 内で docker exec を実行し、 ps aux を実行すると、次の結果が得られます。
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 2388 756 ? Ss 11:51 0:00 /bin/sh -c tail -f /dev/null
どうすれば systemd を PID 1 として使用できますか? つまり、dumb-init です!
複数の記事を見てみましたが、どうやらそれは不可能のようで、同じ記事で確認する必要があります。良い記事は次のとおりです (いくつか例を挙げると):
https://lwn.net/Articles/676831/
https://blog.phusion.nl/2015/01/20/docker-and-the-pid-1-zombie-reaping-problem/
答え1
としてグレースフルリスタートコメントで述べたように、systemdベースイメージからビルドすることができます。例えば、Centos システムしかし、dockerコンテナ内でsystemdを使用することは絶対に推奨されません。私の関連する質問。
依存関係を満たすためだけにsystemdが必要な場合は、より良い方法はdeb 依存関係を無視する。