VPSにDocker検証環境を構築する完全手順

VPSにDocker検証環境を構築する手順の図解 Linux
VPSにDocker検証環境を構築する完全手順

※本記事にはアフィリエイト広告(PR)を含みます。

なぜ「VPS+Docker」が検証環境に向いているのか

新しいミドルウェアを試す、改修前に挙動を確認する、ちょっとしたツールを常時起動しておく――そんな「自分専用の検証サーバー」が欲しい場面は多いものです。自宅PCは電源を落とせば止まり、家庭用回線の外部公開もリスクがあります。クラウドの無料枠も選択肢ですが、無料期間や制約が多く、素の検証環境としては設定項目が増えがちです。

その点VPSなら、常時稼働・固定グローバルIP・root権限ありという条件が最初から揃っています。そこにDockerを載せれば、ミドルウェアごとにOSを汚さずに使い捨てられるので、「試して壊してまた作り直す」検証サイクルが回しやすくなります。本記事では、VPS契約後のセキュリティ設定からDockerのインストール、Docker Composeでの動作確認までを実務目線でまとめます。

前提条件

本記事はUbuntu LTS(22.04/24.04、および執筆時点で最新の26.04)を前提にしています。検証用途の目安スペックは以下の通りです。

  • vCPU:1〜2コア
  • メモリ:2GB以上(複数コンテナ同時起動なら4GB以上を推奨)
  • ディスク:SSD 30〜50GB程度(イメージやログの蓄積を考慮)
  • OS:Ubuntu 22.04 LTS または 24.04 LTS

メモリ1GBでも動きますが、DBコンテナを複数起動するとOOMで落ちやすいため2GB以上を推奨します。

XServer VPSの料金・スペックを公式サイトで見る

VPS契約後の初期設定(セキュリティ)

Dockerを入れる前に、VPS自体の初期設定を済ませておきます。ここを省略すると検証環境が不正アクセスの踏み台にされるリスクがあるため、必ず実施してください。

作業用ユーザーの作成とSSH鍵認証

rootの直接ログインは避け、一般ユーザーを作成してsudo権限を付与します。

sudo adduser deployuser
sudo usermod -aG sudo deployuser

手元のPCで鍵ペアを作成し、公開鍵をVPSに登録します(既存の鍵があれば流用可)。

ssh-keygen -t ed25519 -C "[email protected]"
ssh-copy-id [email protected]

鍵ファイルのパーミッションが緩いとSSHクライアントに拒否されるため、権限を締めておきます。

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 600 ~/.ssh/authorized_keys

鍵認証が通ることを確認したら、/etc/ssh/sshd_configでパスワード認証とrootログインを無効化します。

sudo sed -i 's/#PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo sed -i 's/#PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo systemctl restart sshd

注意:設定変更後は現在のセッションを切らず、別ターミナルから新規ログインできるか必ず確認してください。ここで接続できなくなるとVPSコンソールからの復旧作業が必要になります。

ファイアウォール(ufw)と不要ポートの閉塞

SSHとHTTP/HTTPS以外のポートは閉じておきます。可能であればSSHは管理者の固定IPからのみ許可すると安全性が上がります。

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow from 192.0.2.100 to any port 22 proto tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

注意点として、Dockerは-pでポートを公開する際にiptablesを直接書き換えるため、ufwで許可していないポートでも外部到達できてしまうことがあります。公開したくないポートは127.0.0.1:8080:80のようにバインド先を明示してください。

Dockerのインストール手順(Ubuntu/apt リポジトリ)

執筆時点(2026年7月)のDocker公式ドキュメント(docs.docker.com)に基づく、apt リポジトリを使う現行手順です。バージョンでコマンドが変わることがあるため、実施前に最新版も確認してください。

既存パッケージの削除

ディストリビューション提供のdocker.ioなどが競合するため削除します(未インストールなら何も起きません)。

sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc podman-docker

aptリポジトリの登録

sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

現行のドキュメントでは/etc/apt/sources.list.d/docker.sourcesにdeb822形式で記述する方式が案内されています。

sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update

Dockerパッケージのインストール

Docker Engine本体、CLI、containerd、Docker Compose v2をCLIプラグインとして導入するdocker-compose-pluginをまとめて入れます。単体のdocker-composeバイナリは非推奨のため使いません。

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl status docker
sudo systemctl enable --now docker

enable --nowで起動確認と同時に、再起動時の自動起動も有効化します。

一般ユーザーでdockerコマンドを使えるようにする

毎回sudoを付けたくない場合は、作業ユーザーをdockerグループに追加します。これはsudoなしでデーモンを操作できることを意味するため、自分専用の検証環境であることを前提に行ってください。

sudo usermod -aG docker deployuser
newgrp docker

動作確認

hello-worldで疎通確認

docker run hello-world

「Hello from Docker!」が表示されれば、デーモンとの通信・イメージのpull・コンテナ起動まで一通り正常です。

Docker ComposeでNginx+DBを起動する

検証用途で頻出する「Webサーバー+データベース」の組み合わせを立ち上げます。作業ディレクトリにdocker-compose.ymlを作成します。

mkdir ~/lab && cd ~/lab
nano docker-compose.yml
services:
  web:
    image: nginx:stable
    ports:
      - "127.0.0.1:8080:80"
    restart: unless-stopped
  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: examplepassword
      POSTGRES_DB: sampledb
    volumes:
      - db_data:/var/lib/postgresql/data
    restart: unless-stopped

volumes:
  db_data:

起動と状態確認は次のコマンドです。

docker compose up -d
docker compose ps
curl http://127.0.0.1:8080

127.0.0.1にバインドしているため外部には公開されません。実際に外部公開する場合は、Nginxをリバースプロキシとしてexample.com宛のリクエストを内部コンテナへ振り分け、ufwで80/443番のみ許可する形が基本になります。

よく使う運用コマンドとログ・ディスク管理

検証環境は「作っては壊す」を繰り返すため、放置するとディスクを圧迫しがちです。

docker system df
docker system prune -a --volumes

docker system dfで使用容量を確認し、不要なものはpruneで削除します。--volumesは未使用ボリュームも対象になるため、DBデータを消したくない場合は付けずに実行してください。

見落としがちなのがログの肥大化です。既定のjson-fileログドライバはサイズ上限がないため、長期稼働のコンテナには上限を設定しておきます。

sudo tee /etc/docker/daemon.json <<EOF
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
EOF

sudo systemctl restart docker

ディスク空き容量はdf -h /var/lib/dockerで定期的に確認しておくと、突然の容量枯渇に気づきやすくなります。

つまずきやすい点

  • メモリ不足によるOOM Killer:メモリの少ないプランで複数コンテナを起動すると、カーネルのOOM Killerがプロセスを強制終了させます。dmesg | grep -i oomで発生有無を確認してください。
  • ポート競合:ホスト側で既にNginx等が動いていると、コンテナ側で同じポートを公開しようとして起動に失敗します。sudo ss -ltnpで事前確認を。
  • 権限まわりのエラーdockerグループ追加直後はSSHセッションを張り直すまで反映されないことがあります。
  • systemdの自動起動忘れ:VPS再起動後にDockerが起動していないケースがあります。systemctl enable --now dockerを実行済みか確認してください。
  • 時刻同期のズレ:時刻がずれるとTLS証明書の検証エラーの原因になります。timedatectlでNTP同期を確認しましょう。

よくある質問

VPSのスペックはどれくらいから検証用として使えますか

メモリ2GB・vCPU1〜2コアあれば、Nginx+DB程度の構成なら十分です。複数サービスを同時に動かすなら4GB以上を検討してください。

docker-composeコマンドとdocker composeコマンドの違いは何ですか

docker-composeは単体バイナリで配布されたv1系の呼び方で非推奨です。現行はCLIプラグインのdocker compose(スペース区切り)を使います。

rootでDockerを操作してはいけないのですか

禁止ではありませんが、Dockerデーモンの操作権限は管理者権限に近いものです。作業ユーザーを分けたほうが事故時の影響範囲を抑えられます。

検証環境を壊してしまった場合、どう復旧すればよいですか

docker compose downで破棄しdocker compose up -dで再構築するだけです。設定ファイルを管理しておけば、VPSを作り直しても数分で再現できます。

本番環境にもこの手順をそのまま使えますか

基本の流れは共通ですが、本番ではTLS終端、ログ収集、ヘルスチェック、バックアップなど追加検討事項が増えます。本記事は検証用途の最小構成として参考にしてください。

まとめ

VPS+Dockerの検証環境は、初期設定に手間はかかるものの、一度作れば「試したらすぐ壊せる」自由度の高い環境として長く使えます。ポイントは、インストール手順そのものよりも、その手前にあるSSH鍵認証やufwによる不要ポート閉塞といったセキュリティ対策を省略しないことです。今回の手順を土台に、自分の用途に合わせて構成を育てていってください。

XServer VPSの料金・スペックを公式サイトで見る

最終更新:2026年7月

タイトルとURLをコピーしました