Linux管理・運用の基本
システム管理者のための実践ガイド
システム管理者のための実践ガイド
Linuxシステム管理において、コンテナや仮想マシンはアプリケーションの実行環境を隔離したり、OSレベルで完全に独立したシステムを構築したりするために不可欠な技術です。これらは、軽量で高速なコンテナと、強力な隔離性を持つ仮想マシンという異なる利点を持ち、それぞれの特徴を理解して使い分けることが重要となります。
この記事では、Linux上でのコンテナ・仮想マシン運用をこれから始める方のために、代表的な技術であるDocker、Podman、KVM、VirtualBoxの基礎と、実務で役立つコマンドの超入門を解説します。
コンテナ型仮想化は、ホストOSのカーネルを共有しながら、独立したファイルシステムやプロセス空間を持つ「コンテナ」という隔離された環境でアプリケーションを実行する技術です。仮想マシンと比べてオーバーヘッドが非常に少なく、起動が速いのが特徴です。
Dockerはコンテナ技術のデファクトスタンダードであり、コンテナの構築から実行、配布までを一元的に管理するプラットフォームです。
おすすめ初回コマンド
まずはdocker run hello-world
を実行して、Dockerが正しく動作することを確認してみましょう。
よく使うコマンド例
コマンド | 意味 | 使用例と解説 |
---|---|---|
docker run |
新しいコンテナを作成して実行 | docker run -it ubuntu /bin/bash 最小限のUbuntu環境をインタラクティブに実行。初回はイメージのダウンロードに少し時間がかかる場合があります。-i は標準入力を開いたままに、-t は擬似ターミナルを割り当てます。-d を付けるとバックグラウンドで実行されます。 |
docker ps |
稼働中のコンテナ一覧を表示 | docker ps -a 停止中のコンテナも含めて一覧表示。コンテナのIDや名前を確認できます。 |
docker stop |
稼働中のコンテナを停止 | docker stop [CONTAINER_ID] または docker stop [CONTAINER_NAME] |
docker images |
ローカルのイメージ一覧を表示 | docker images ローカルに存在するコンテナイメージを確認。 |
docker exec |
稼働中のコンテナ内でコマンドを実行 | docker exec -it [CONTAINER_ID] /bin/bash 稼働中のコンテナにアタッチし、シェルを起動します。 |
Dockerfileの基本
Dockerfile
は、コンテナイメージを自動的に作成するための設定ファイルです。
# ベースイメージを指定
FROM ubuntu:22.04
# メンテナー情報 (旧書式:MAINTAINER ユーザー名 は非推奨です)
LABEL maintainer="your-email@example.com"
# aptのアップデートとパッケージのインストール
RUN apt-get update && apt-get install -y nginx
# ポートの公開意図を宣言(実際の公開はdocker run時に行う)
EXPOSE 80
# コンテナ起動時に実行されるコマンド
CMD ["nginx", "-g", "daemon off;"]
※ EXPOSE
はコンテナが利用するポートの意図をメタデータとして示すもので、実際のポート公開はdocker run -p 80:80 nginx
のように-p
オプションで行います。公式のNginxイメージはデフォルトでNginxを起動するため、追加の引数は不要です。
Podmanは、Dockerと高い互換性を持つコンテナエンジンです。最大の特徴は、デーモン(常駐プロセス)が不要であり、rootless(非特権ユーザー)でのコンテナ実行が可能な点です。Dockerは通常root権限の常駐プロセスを必要としますが、Podmanはユーザーごとに独立してコンテナを動作させられるため、セキュリティ面で優位性があります。(Dockerにもrootlessモードは存在しますが、Podmanは当初からこの設計思想で開発されています。)
Podmanのコマンド体系はDockerとほぼ同じなので、Dockerユーザーはすぐに使いこなせます。
おすすめ初回コマンド
podman run hello-world
を実行して、Podmanが正しく動作することを確認してみましょう。(初回は自動でイメージがダウンロードされます。短い名前解決で失敗する場合は、podman run quay.io/podman/hello
を試してみてください。)
仮想マシンは、ハードウェアを仮想化して提供し、その上にゲストOSをインストールする技術です。コンテナよりも重いですが、OSレベルでの完全な隔離が可能です。
KVMは、Linuxカーネルに組み込まれたネイティブな仮想化機能です。ホストOS自体がハイパーバイザーとして機能するタイプ1(ネイティブ)ハイパーバイザーであり、多くはハードウェア支援仮想化を利用するため、非常に高いパフォーマンスを発揮します。主に本番サーバーやテスト環境での利用に適しています。
KVMの管理ツール virsh
virsh
は、KVMをはじめとするlibvirtで管理される仮想マシンを操作するためのコマンドラインツールです。
virsh list --all
: すべての仮想マシンを一覧表示virsh start [VM名]
: 仮想マシンを起動virsh shutdown [VM名]
: ゲストOSをシャットダウンvirsh destroy [VM名]
: 仮想マシンを強制停止Tips: virsh start [VM名] --console
は、ゲストOSにシリアルコンソールが設定されている場合にのみ、起動と同時にコンソール接続が可能です。設定がない場合は、起動後にvirsh console [VM名]
を実行してください。
VirtualBoxは、WindowsやmacOSなど、さまざまなホストOS上で動作する仮想化ソフトウェアです。ホストOSの上で動作するタイプ2(ホスト型)ハイパーバイザーであり、GUIで直感的に操作できるのが利点です。主に個人のPC上で手軽にLinuxやWindowsを動かしたいときに選ばれます。
VirtualBoxの管理ツール VBoxManage
VBoxManage
は、VirtualBoxをコマンドラインで操作するためのツールです。
VBoxManage list vms
: 登録されている仮想マシンを一覧表示VBoxManage startvm [VM名]
: 仮想マシンを起動VBoxManage controlvm [VM名] acpipowerbutton
: OSに電源ボタン通知を送り、正常なシャットダウンを促すVBoxManage controlvm [VM名] poweroff
: 仮想マシンを強制停止Tips: ヘッドレス起動
GUIなしで仮想マシンを起動したい場合は、VBoxManage startvm "VM名" --type headless
を実行します。
項目 | コンテナ(Docker/Podman) | 仮想マシン(KVM/VirtualBox) |
---|---|---|
隔離レベル | プロセス/ファイルシステム | OS/ハードウェア全体 |
カーネル | ホストOSと共有 | ゲストOSが独立して持つ |
オーバーヘッド | 非常に少ない | 多い |
起動時間 | 秒単位 | 分単位 |
セキュリティ | 基本的にホストとカーネルを共有。Podmanはrootless運用が可能 | カーネルも独立しているため、より高い隔離性 |
利用用途 | アプリケーションの実行環境、マイクロサービス | 異なるOS環境、本番サーバー、開発環境 |
docker logs [CONTAINER_ID]
でログを確認しましょう。起動に失敗している原因がわかります。docker exec -it [CONTAINER_ID] /bin/bash
でシェルを起動できます。podman info
でrootless設定やストレージの状況を確認してみましょう。podman logs
やpodman exec
など、Dockerと共通のコマンドも多く使えますので、まずはDockerのコマンドを試してみるのも良いでしょう。docker stop [CONTAINER_ID]
で停止してから、docker rm [CONTAINER_ID]
で削除しましょう。docker container prune
(停止中コンテナのみ削除)が便利です。docker system prune
(未使用のコンテナ/ネットワーク/イメージ/ビルドキャッシュを削除)でより広範囲のクリーンアップも可能です。なお、ボリュームはデフォルトで削除されないため、削除したい場合は--volumes
オプションを付ける必要があります。virsh list --all
で仮想マシンが認識されているか確認します。virsh start [VM名] --console
でコンソール接続を試み、起動時のエラーメッセージを確認してみましょう。VBoxManage controlvm [VM名] acpipowerbutton
でOSを正常シャットダウンできます。応答しない場合はpoweroff
で強制停止してください。この記事では、Linuxにおけるコンテナと仮想化技術の超入門として、Docker、Podman、KVM、VirtualBoxの基礎と主要なコマンドについて解説しました。これらの技術は、システムの安定性、効率、セキュリティを大きく向上させるために不可欠なものです。
まずは紹介したコマンドで手元の環境を動かしながら、それぞれの挙動を体験してみてください。この記事が、Linux上でのコンテナや仮想マシンの理解を深める一助となれば幸いです。ご覧いただきありがとうございました。
次回は、より実践的なセキュリティ対策として、「ログイン試行や不正アクセス監視(fail2ban, logwatch, auditdの導入と活用)」について解説します。