VPSでDockerを始めよう
ApexVPSチーム著 • 最終更新日:2026年7月 • 8分で読めます
VPSでDockerを実行すると、空のUbuntuボックスからウェブアプリ、データベース、またはセルフホストサービスを数分で稼働させることができます。システムパッケージや依存関係の競合に悩む代わりに、ビルド済みのイメージをプルしてコンテナを起動するだけです。この初心者向けガイドでは、UbuntuやDebianへのDockerとDocker Composeのインストール、必要な中核概念、最初のコンテナの起動、ボリュームによるデータ永続化、そして問題を避けるためのセキュリティの基本を説明します。
なぜVPSでDockerを実行するのか?
仮想プライベートサーバーは完全なrootアクセスと専用リソースを提供し、コンテナのニーズにぴったりです。Dockerをインストールすれば、多数の分離されたサービスを互いに干渉させることなく並行して実行できます。各コンテナには独自のライブラリが同梱されているため、Nodeアプリ、Postgresデータベース、リバースプロキシを1台のマシンでクリーンに共存させられます。目標がVPSでのアプリのセルフホスティング(個人クラウド、Wiki、メディアサーバーなど)なら、Dockerはすべてのサービスを整然と再現可能に保ちます。
コンテナは移植性にも優れています。ラップトップで動く同じComposeファイルがサーバーでも動くため、典型的な「自分のマシンでは動くのに」問題を解消します。ミス後にサービスを再構築するのも、パッケージを再インストールするのに午後を費やすのではなく、数秒で完了します。
重要な概念を分かりやすい言葉で
コマンドラインに触れる前に、4つの基本要素を知っておくと役立ちます:
- イメージ — アプリケーションとその実行に必要なすべてを含む読み取り専用テンプレートです。Docker Hubなどのレジストリからダウンロードします。スナップショットやクラスのようなものと考えてください。
- コンテナ — イメージの実行中のインスタンスです。自由に起動、停止、削除できます。クラスから作成されるオブジェクトのように、同じイメージから多数のコンテナを実行できます。
- ボリューム — コンテナの書き込み可能レイヤーの外部に存在する永続ストレージです。ボリュームにより、コンテナを置き換える際にデータベースやアップロードされたファイルを安全に保てます。
- ネットワーク — コンテナが名前で相互に通信できるようにする仮想ネットワークです。DockerはComposeプロジェクトごとに自動的にネットワークを作成するため、アプリはフレンドリーなホスト名でデータベースに到達できます。
ステップ 1: Ubuntu または Debian に Docker をインストールする
Docker Engineをインストールする最も簡単で公式にサポートされている方法は、便利なスクリプトを使用することです。SSHでサーバーに接続し、次のコマンドを実行します:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
これにより、ComposeプラグインとともにDocker Engineがインストールされます。完了したら、バージョンを確認します:
docker --version
docker compose version
デフォルトではDockerにsudoが必要です。通常のユーザーで実行するには、dockerグループに自分を追加してから、ログアウトして再ログインし、変更を反映させます:
sudo usermod -aG docker $USER
Dockerはほとんどのシステムで起動時に自動開始します。手動で有効にする必要がある場合は、次のようにします:
sudo systemctl enable --now docker
パッケージリポジトリ方式を希望する場合や、お使いのディストリビューションの詳細な手順が必要な場合は、公式のDockerインストールドキュメントにすべてのオプションが記載されています。上記の便利なスクリプトは新しいVPSに最適です。
ステップ 2: 最初のコンテナを実行する
古典的なhello-worldイメージでインストールをテストします:
docker run hello-world
Dockerはイメージをプルし、一度実行して確認メッセージを表示します。次に、実際に目に見えるものを実行しましょう。このコマンドはNginxウェブサーバーをバックグラウンドで起動し、ホストのポート8080をコンテナのポート80にマッピングします:
docker run -d -p 8080:80 --name web nginx
ブラウザでhttp://your-server-ip:8080を開くと、Nginxのウェルカムページが表示されるはずです。知っておくと便利なフラグをいくつか紹介します:
-dはコンテナをデタッチモード(バックグラウンド)で実行します。-p 8080:80はポートをhost:containerとして公開します。--name webはコンテナに覚えやすい名前を付けます。
実行中のものを確認し、完了したらコンテナを停止して削除します:
docker ps
docker stop web
docker rm web
日常の作業のほとんどは、いくつかのコマンドで対応できます。docker imagesはプルしたイメージを一覧表示し、docker logs webはトラブルシューティングのためにコンテナの出力を表示し、docker exec -it web bashは実行中のコンテナ内でシェルを開いて内部を調べられます。これらの5つか6つのコマンドを覚えれば、小さなサーバーを自信を持って管理でき、必要に応じて残りを調べられます。
ステップ 3: マルチコンテナアプリにDocker Composeを使用する
長いdocker runコマンドを入力するのはすぐに飽きてしまいます。Docker Composeを使えば、スタック全体を1つのファイルで記述し、1つのコマンドで起動できます。compose.yamlというファイルを作成しましょう:
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- web-data:/usr/share/nginx/html
restart: unless-stopped
volumes:
web-data:
同じディレクトリから、すべてをバックグラウンドで起動します:
docker compose up -d
Composeがネットワーク、名前付きボリューム、コンテナを自動的に作成します。便利なコマンドもご紹介:
docker compose ps
docker compose logs -f
docker compose down
restart: unless-stoppedポリシーにより、再起動やクラッシュ後もサービスが自動的に復旧します。24時間監視していないサーバーには便利です。
ステップ4: ボリュームでデータを永続化
ここは初心者が最も間違えやすいポイントです。コンテナのファイルシステムに書き込まれた内容は、コンテナが削除または再作成されると消えてしまいます。データを保持するには、ボリュームに保存しましょう。一般的な2つの方法があります:
- 名前付きボリューム — Dockerが管理し、データベースに最適です。上記のCompose例では
web-dataを使用しています。 - バインドマウント — ホスト上のフォルダをコンテナに直接マップします。例:
./config:/etc/app。手動で編集したい設定ファイルに最適です。
コマンドラインからボリュームを検査・管理:
docker volume ls
docker volume inspect web-data
重要なパスがボリュームを指している限り、コンテナを削除して再構築してもデータは失われません。ボリュームディレクトリをサーバーのバックアップに含めてください。
ステップ5: イメージとコンテナの更新
コンテナイメージには、他のソフトウェアと同様にセキュリティおよび機能のアップデートがあります。Composeスタックを更新するには2段階の手順が必要です: 新しいイメージをプルし、コンテナを再作成します。
docker compose pull
docker compose up -d
データがボリュームに保存されているため、再作成は安全です。時間が経つと未使用のイメージが溜まりディスクを消費します。定期的に削除しましょう:
docker image prune
予測可能で再現性のある更新を望む場合は、latestではなくpostgres:16のような特定のバージョンタグに固定してください。予期しない変更を避けられます。
初心者のための基本的なDockerセキュリティ
コンテナは便利ですが、魔法のセキュリティ境界ではありません。いくつかの習慣でトラブルを防げます:
- 信頼できるイメージのみを実行する。公式イメージや有名なパブリッシャーを優先しましょう。チュートリアルで推奨されたからといって、ランダムなイメージをrootで実行しないでください。信頼できないイメージはサーバー上でコードを実行します。
- コンテナ内ではrootを避ける。多くの公式イメージは非rootユーザーをサポートしているか、Dockerfileで
USERディレクティブを使用して設定できます。制限付きユーザーで実行すると、アプリが侵害された場合の影響範囲を抑えられます。 - 必要なポートのみを公開する。すべての
-pフラグはインターネットへの扉を開きます。データベースはDockerの内部ネットワークに置き、Webフロントエンドだけを公開してください。 - ホストを常に最新の状態に保つ。Dockerのセキュリティは、安全なサーバーから始まります。
sudo apt update && sudo apt upgradeを定期的に実行し、SSHをロックダウンしてください。
何かを公開する前に、VPSを最初の10分で保護するためのチェックリストをご確認ください。SSHキー、ファイアウォール、自動アップデートがDockerホストと完璧に連携します。
Dockerに最適なVPSの選び方
Dockerは控えめなハードウェアでも動作しますが、複数のコンテナをスタックすると専用リソースが重要になります。共有・オーバーセルドホスティングでは、騒がしい隣人が最悪のタイミングでデータベースを圧迫する可能性があります。ApexVPSは真に専用のvCPU、NVMe SSDストレージ、完全なrootアクセスを提供し、コンテナが期待どおりのパフォーマンスを発揮できるようにします。すべてのプランでUbuntu、Debianなどの人気ディストリビューションをサポートし、サインアップ時にSSHキーを設定できます。
お支払いはOxaPay経由の暗号通貨のみで、Bitcoin、Ethereum、USDTを含む30種類以上の暗号通貨に対応しています。クレジットカードも銀行口座もKYCも不要です。アクセス情報を受け取るためのメールアドレスを提供するだけです。ApexVPSの料金ページで仕様とリージョンを比較して、ご自身のコンテナワークロードに適したプランをお選びください。
よくある質問
VPSでDockerを実行するには多くのRAMが必要ですか?
いいえ。Docker自体は軽量で、オーバーヘッドはほとんどありません。1つまたは2つのコンテナは2GBのRAMで快適に動作しますが、4GB以上あればデータベースや複数のサービスを同時に実行するための余裕が生まれます。
docker-compose と docker compose のどちらを使うべきですか?
現代のインストールでは、Composeはプラグインとして提供されるため、コマンドはスペース付きのdocker composeです。古いスタンドアロンのdocker-composeバイナリもまだ動作しますが、廃止されつつあります。新規セットアップではプラグインバージョンを使用してください。
コンテナを削除したとき、私のデータはどこに保存されますか?
コンテナ内に書き込まれたものはすべて削除時に失われます。重要なデータは名前付きボリュームまたはバインドマウントに保存して、コンテナの再作成後も存続できるようにしてください。それがデータベースやアップロードを安全に保つ方法です。
Docker対応VPSを暗号通貨で支払うことはできますか?
はい。ApexVPSのチェックアウトはOxaPay経由の暗号通貨のみで、Bitcoin、Ethereum、USDTを含む30種類以上のコインに対応しています。サインアップにはメールアドレスのみが必要で、クレジットカードや本人確認は不要です。