【Docker基礎】コンテナの改造

 コンテナは単にイメージから作って起動し、使うだけではありません。ときには 設定ファイルの変更パッケージの追加インストールなどを行いたい、つまり コンテナを改造したい場合が出てきます。
 こうした改造は、ファイルのやりとりLinux コマンドによる操作の 2 つを組み合わせることで実現できます。ここでは、コンテナをカスタマイズするための基本的なアプローチと、「bash」を使ってコンテナ内部を操作する際のポイントを詳しく解説します。

コンテナ改造の必要性

  • 自社開発のシステムを載せる
    ・オリジナルのアプリや設定をコンテナに組み込み、量産や移動が簡単になる。
  • 公式ソフトウェアの細かな調整
    ・たとえば Apache を使う場合、デフォルト設定を変更したい・独自モジュールを入れたいなど

コンテナを改造する2つの方法

  1. ファイルのやりとり
    ・以前学んだ コピーマウント を駆使し、設定ファイルやプログラムをコンテナ内へ入れる・取り出す。
  2. Linux のコマンドで命令
    ・コンテナ内で bash を起動し、ソフトウェアのインストールや設定を直接行う。

 多くの場合、これら 2 つを組み合わせてカスタマイズを行い、最後にイメージとして書き出す(commit)か、Dockerfile で再現性のある管理を行います。

bash を使ったコンテナ内の操作

1. なぜ bash が必要?

Docker コマンド (docker run, docker stop など) はあくまで コンテナの外 からの操作。
 コンテナ“内部” で細かい操作をするには、shell(bash など) を使って、Linux のコマンドを直接実行します。

2. bash の起動方法

  1. docker execdocker exec -it <コンテナ名> /bin/bash
    ・すでに稼働中のコンテナに対して シェルを起動 し、コンテナ内部を操作できるようにする。
  2. docker run(イメージ起動時に bash を呼ぶ) docker run -it --name <コンテナ名> イメージ名 /bin/bash
    ・代わりに、元々のソフトウェア(例: Apache)を起動するコマンドが実行されなくなる。
    ・Apache などが自動でスタートしない状態になるので、デバッグや追加設定用

3. コンテナ内操作と Linux コマンド

  • コンテナを親、bash を子プロセス としてイメージ
  • bash 内では apt install, yum install, echo, cp など 通常の Linux コマンド が使える。
  • 操作を終えたら exit コマンドで bash を閉じ、Docker エンジンへの命令モード に戻る。

注意点:bash を起動すると Apache が動かない?

  • docker run -it イメージ /bin/bash の場合、コンテナは bash をメインプロセスとして起動
  • Apache (httpd) が自動起動しないため、「コンテナ改造後に Apache も動かしたい」なら、あとから docker start が必要
  • もしくは exec コマンドで “あとからコンテナ内に入る” ほうが、Apache は最初から起動しているので簡単

まとめ

  1. コンテナを改造する 2 つの方法
    ・ファイルのやりとり(コピーやマウント)
    ・コンテナ内で Linux コマンド実行(bash などを使う)
  2. bash が果たす役割
    ・コンテナ内部でのコマンド実行に必須
    docker exec -it <コンテナ名> /bin/bash で稼働中コンテナに入れる。
  3. 作業完了後は exit
    ・bash を終了してコンテナ外(Docker エンジン操作モード)に戻る。
  4. Apache などが動かなくなるケース
    run 時の引数として /bin/bash を指定 → もとのアプリが起動しない。
    exec のほうが本番環境のアプリを止めずに作業できる。

 このように、コンテナ外から Docker コマンドコンテナ内から bash という二段構えで、ソフトウェアのインストールや設定ファイルの編集などを進めるイメージです。次のコンテンツでは、なぜ bash を起動すると Apache が止まるのかの仕組みについて、もう少し詳しく解説していきます。