1 ポイント 投稿者 chcv0313 2025-12-26 | 9件のコメント | WhatsAppで共有

数十人が共同で使用するサーバーがあります。

それぞれがコンテナでプロジェクトを配信しているのですが、

サーバーの再起動などの問題が発生したときに、これらのコンテナに管理者がどう対応すべきか悩んでいます。

普段のDockerコンテナ起動コマンドを一つひとつ提出してもらって、それを実行してあげるべきなのか、
あるいはDocker Composeで構成して、プロジェクトごとにフォルダへ入って compose up を実行してあげるべきなのかなど、

管理者として複数のコンテナをどのように管理しているのか、アドバイスをお願いします。

9件のコメント

 
chcv0313 2025-12-31

ご回答いただいた皆さま、ありがとうございます。今年の目標は Kubernetes の導入に定めることになりそうです。

 
popopo 2025-12-28

コンテナをデーモン化して、OS 起動時にコンテナも実行されるようにするのが最も簡単です。

  • 再起動前に1つずつ正常終了もできます。

EL(Enterprise Linux、RHEL 系を総称)系であれば、コンテナを systemd サービスとして登録できます。Quadlet というそうです。

 
bungker 2025-12-27

質問だけを見ると、depend onrestart always、あるいは unless stoped で解決できそうにも見えますが、質問には含まれていない難しい状況があるのだと思います。とはいえ、数十人規模なら結局は Kubernetes に行く必要がありそうです。

質問文のとおりにそのまま AI に聞いても、答えは見つけられると思います。

 
tujuc 2025-12-27
  1. インフラはどこに置いていますか? AWS? 自前 or サーバーホスティング? Azure?
  2. 1人で管理していますか?
  3. 今はどのような状態で作業していて、どこまで理解していますか?

上の内容があれば、もっと話しやすくなると思います。

単純におっしゃっていることを基準に回答するなら……

コンテナ実行コマンドがなぜ必要なのか分かりません。Composeファイルを作ってもらって、それを基準にすべて同じコマンド(Composeコマンド)で起動できるように構成するのが一番良いです。

:) 管理者なのですから、そう作ってほしいと言えば他の方がやってくれるはずなので、押し切ってしまいましょう :)

私は、k8sは1人で管理する環境では負担が大きいソリューションだと思っているので、あまりおすすめしません。
インフラはいつでもシンプルに構成するのが一番良いと考えています.

 
chcv0313 2025-12-27

オンプレミスのサーバー4台です。
一人で対応しています。
セキュリティ審査を通過して会社にDockerが導入されてからまだ4か月目で、k8s は概念だけ知っています。Docker向けのHARBOR導入もまもなく私が実施しなければならず、Harborが導入された後はDocker Hubは遮断される予定です。おそらくDocker Hubを開けておけるのは私だけで、依頼が入ったら私がDocker Hubからイメージを取得して社内の
Harborに上げる形式になると思います。

Composeコマンドで押し切ること、プロジェクトごとにフォルダへ移動して一つひとつ compose up を実行することは非現実的だと考えてやっておらず、その代わりにDockerコマンドを絶対パスで実行してほしいと依頼していましたが、最近になってそれが間違ったアプローチではないかという考えを拭えません。

 
byun1114 2025-12-27

Docker の再起動オプションを付ければいいのではないですか?

 
click 2025-12-26

こういう場合は Kubernetes を使って、ユーザーごとに context を割り当てるのがよいです。
ユーザーごとにその context のみ使えるように権限を制限することもできます。

 
cafedead 2025-12-26

Kubernetesを使用します。

 
selene 2025-12-29

私も tujuc さんと似た考えですが、熟練者なしで一人で k8s を導入し、事故なく安定的に運用するのは、かなりリスクがあると思います。

ただ、4台のサーバーを数十人が共用している状況とのことなので判断が難しいですが、
関係する人数を基準にするよりも、サーバープログラムの数が多すぎて複雑な状況であれば、k8s の学習を検討してみるのは良いと思います。

もし私が投稿者さんと同じ状況なら、以下の段階ごとに環境を改善していったと思います。

  1. サーバープログラムがいつ停止しても問題ないように対策する => graceful shutdown の実装、stateless に動作するようなリファクタリングなどを含む。(またはエンジニアに依頼)
  2. サーバープログラムのコンテナ化および汎用化 => 各サービスごとに Dockerfile と docker compose ファイルを作成し、同じコマンドで実行したときに必ず起動できるように強制します。
  3. 管理者以外のエンジニアがサーバーに接続する必要がないように管理する => Jenkins/GitHub Actions/AWS CodePipeline など好みの CI/CD プラットフォームを使って、GitOps に近い形で構築できます。これくらいまで達成できれば、エンジニアは再デプロイや再起動をパイプラインの再実行レベルで十分に制御できます。
  4. その後、ほかの方がおっしゃっているように高度化(K8s や ArgoCD などの導入)