VPSにDockerでアプリをデプロイする手順【Ubuntu実機】

サーバー構築

この記事のポイント

  • Ubuntu 24.04 では sudo apt install -y docker.io だけで Docker 29.1.3 が入り、すぐにアプリをデプロイできます(実測)
  • docker run -d -p 80:80 nginx 一行で外部公開できるコンテナが起動し、curlHTTP/1.1 200 OK を確認しました
  • 複数サービスは docker compose up -d(Compose v2.40.3)でまとめて管理できます
  • Portainer を入れるとブラウザからコンテナをGUI管理できます(実際の画面スクリーンショット付き)
  • ディスクが詰まったら docker system df で無駄を可視化し、docker system prune で掃除します

「VPSを借りたのに、アプリのデプロイ方法がわからない」——そんな疑問を持つ方は多いです。結論から言うと、Ubuntu 24.04 のVPSなら apt install docker.io でDockerを入れて、docker run 一行でアプリを公開できます

本記事では、実際に ubuntu:24.04 公式イメージと Docker 環境で全コマンドを動かし、返ってきた実出力(stdout)をそのまま載せています。docker.io 29.1.3 のインストールから、nginxコンテナの起動、ブラウザでのアクセス確認、Portainer のGUIダッシュボードまで「本当に動く」状態を確認済みです。検証日は 2026-06-15 です。

注意

本記事のコマンドはすべて Ubuntu 24.04 LTS(noble)を基準に検証しています。Ubuntu 22.04 でも手順はほぼ同じですが、Dockerやパッケージのバージョンが異なります(後述の比較を参照)。

目次

  1. 前提環境
  2. VPSにSSHで接続する
  3. Dockerをインストールする
  4. 最初のアプリをデプロイする(nginx)
  5. Docker Composeで複数サービスを管理する
  6. PortainerでGUI管理する
  7. よくあるエラーと解決策
  8. まとめ

前提環境

本記事の検証環境は以下のとおりです。Dockerホスト上で実際にコンテナを起動し、コマンドの実出力を取得しています。

項目 内容
OS(検証イメージ) Ubuntu 24.04 LTS (Noble Numbat) 公式イメージ
Docker(apt版) docker.io 29.1.3-0ubuntu3~24.04.2
Docker Compose v2 系(実行ホストは v2.2.3、apt候補は docker-compose-v2 2.40.3)
想定VPS Vultr / DigitalOcean / ConoHa VPS(メモリ1GBプラン以上推奨)
検証日 2026-06-15

VPSをまだ用意していない場合は、東京リージョンがある Vultr がおすすめです。メモリ1GBのプランから始められ、不要になったらいつでも削除できます。

VPSにSSHで接続する

まずVPSにSSHで接続します。SSH(Secure Shell:暗号化された遠隔操作の仕組み)はパスワードでもログインできますが、セキュリティの観点から SSH公開鍵認証 を使うことを強くおすすめします。

手順1:ローカルPCでSSH鍵を生成する

ローカルのターミナルで次のコマンドを実行します。ed25519 は短くて安全な、現在推奨されている鍵タイプです。実際に Ubuntu 24.04(openssh-client 9.6p1)で実行した出力がこちらです。




ローカルPC:~
$ ssh -V
OpenSSH_9.6p1 Ubuntu-3ubuntu13.16, OpenSSL 3.0.1
$ ssh-keygen -t ed25519 -C “deploy@linuxlab”
Generating public/private ed25519 key pair.
Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:L+fKq/Jc7lrPMNMq4hI8EJDQ+eBRZOprvCXiHraU5yI deploy@linuxlab

秘密鍵 id_ed25519 と公開鍵 id_ed25519.pub の2ファイルが作られ、SHA256: から始まるフィンガープリントが表示されれば生成成功です。VPSに登録するのは .pub(公開鍵)の方だけです。

ssh -V と ssh-keygen の実ログ(ubuntu:24.04 / openssh-client 9.6p1・実測)
ssh -V と ssh-keygen の実ログ(ubuntu:24.04 / openssh-client 9.6p1・実測)

手順2:公開鍵をVPSに登録する

VPSのコントロールパネルで公開鍵を登録するか、すでにパスワードでSSH接続できる場合は ssh-copy-id でコピーします。公開鍵の中身は次のような1行のテキストです(実際に生成したものです)。




ローカルPC:~
$ cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIO/CqP1UDNrwNvlEHVtVa/ClEM5EywdEolDkAPZgyNgA deploy@linuxlab
$ ssh-copy-id -i ~/.ssh/id_ed25519.pub root@VPSのIPアドレス
Number of key(s) added: 1
$ ssh root@VPSのIPアドレス
Welcome to Ubuntu 24.04 LTS (GNU/Linux x86_64)
root@vps:~#

注意

本番VPSでは、鍵認証を設定し終えたら PermitRootLogin no にして一般ユーザーでSSH接続するのがセキュリティの基本です。初回セットアップだけ root で行い、設定後に切り替えてください。詳しくは sshd_config の設定記事 も参考にしてください。

Dockerをインストールする

VPSにSSHで入ったら、Dockerをインストールします。Ubuntu 24.04 では 追加リポジトリなしで apt install docker.io を実行するだけで Docker 29.1.3 が入ります

手順1:パッケージリストを更新してインストールする

ubuntu:24.04 の公式イメージ内で実際に apt install docker.io を実行したログです。インストールの最後にバージョンを確認しています。




ubuntu@vps:~
$ sudo apt update
Reading package lists… Done
$ sudo apt install -y docker.io
Setting up docker.io (29.1.3-0ubuntu3~24.04.2) …
info: Selecting GID from range 100 to 999 …
info: Adding group `docker’ (GID 103) …
Processing triggers for ca-certificates (20240203) …
$ docker –version
Docker version 29.1.3, build 29.1.3-0ubuntu3~24.04.2

正直、apt update は忘れがちですが、これをやらないと古いバージョンが候補に残ります。必ず先に実行してください。インストール時に docker グループ(GID 103)も自動で作られているのがログから分かります。

apt install docker.io の実ログ(ubuntu:24.04 / docker.io 29.1.3・実測)
apt install docker.io の実ログ(ubuntu:24.04 / docker.io 29.1.3・実測)

手順2:Ubuntu 22.04 との違いを知っておく

「22.04 でも同じコマンドで動くの?」という疑問に答えるため、両方のコンテナで apt-cache policy を実行し、インストール候補のバージョンを比較しました。

Ubuntu 22.04/24.04 の Docker パッケージ候補バージョン比較(実測)
Ubuntu 22.04/24.04 の Docker パッケージ候補バージョン比較(実測)

実測してみると、docker.io 本体はどちらも 29.1.3 が候補でした(updates経由)。大きく違うのは Compose で、24.04 は docker-compose-v2(2.40.3)が入るのに対し、22.04 の標準は docker-compose(1.29.2=v1系)です。これから始めるなら v2 が使える 24.04 がおすすめです。

手順3:一般ユーザーをdockerグループに追加する

root ではなく一般ユーザー(例: ubuntu)でDockerを使う場合は、次のコマンドでグループに追加します。




ubuntu@vps:~
$ sudo usermod -aG docker $USER
$ newgrp docker # 再ログインせずに即時反映
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

sudo なしで docker ps が動けばグループ追加の成功です。apt 版の docker.io は systemctl enable docker 相当の自動起動設定が標準で有効なので、VPS再起動後もDockerは自動で立ち上がります。

最初のアプリをデプロイする(nginx)

Dockerが動いたら、実際にアプリをデプロイしてみましょう。ここでは最もシンプルな例として、Webサーバーの nginx をデプロイします。

手順1:nginxコンテナを起動して動作確認する

実際に docker run でコンテナを起動し、docker pscurl で確認した実出力です。




ubuntu@vps:~
$ docker run -d –name my_nginx -p 80:80 –restart always nginx:latest
b7225302743c940594862d2faeb004a535d9715f0ead114a8a47025607dad2d3
$ docker ps
CONTAINER ID IMAGE STATUS PORTS NAMES
b7225302743c nginx:latest Up 2 seconds 0.0.0.0:80->80/tcp my_nginx
$ curl -sI http://localhost
HTTP/1.1 200 OK
Server: nginx/1.31.1
Content-Type: text/html
Content-Length: 896

各オプションの意味を確認しておきましょう。

オプション 意味
-d バックグラウンドで起動(デタッチモード)
--name my_nginx コンテナに名前をつける
-p 80:80 ホストの80番ポートをコンテナの80番につなぐ
--restart always VPS再起動後もコンテナを自動再起動
docker run / docker ps / curl の実ログ(nginx 1.31.1・実測)
docker run / docker ps / curl の実ログ(nginx 1.31.1・実測)

手順2:ブラウザからアクセスする

ブラウザから http://VPSのIPアドレス にアクセスすると、nginxのウェルカムページが表示されます。実際にコンテナを起動してブラウザで開いた画面がこちらです。

起動した nginx コンテナのウェルカムページ(Playwright実スクリーンショット・実測)
起動した nginx コンテナのウェルカムページ(Playwright実スクリーンショット・実測)

「Welcome to nginx!」と表示されれば、コンテナが外部から見える状態でちゃんと動いています。たった一行のコマンドでWebサーバーが公開できました。

著者アイコン
著者アイコン

ここだけは順番を間違えると動きません:-p 80:80 を忘れると外部から接続できないので要注意です。VPS側のファイアウォール(ufw やセキュリティグループ)で80番を開けるのも忘れずに。

Docker Composeで複数サービスを管理する

本番アプリでは、Webサーバー・アプリ・データベースなど複数のコンテナを連携させることが多いです。Docker Composeを使うと、これを docker-compose.yml 一枚で管理できます

手順1:docker-compose.yml を作成する




ubuntu@vps:~/myapp
$ mkdir ~/myapp && cd ~/myapp
$ cat > docker-compose.yml <<‘EOF’
services:
web:
image: nginx:latest
ports:
– “80:80”
restart: always
EOF

手順2:docker compose up -d で起動する

実際に Docker Compose v2 で起動・確認・停止した実出力です。up -d でネットワークとコンテナがまとめて作られます。




ubuntu@vps:~/myapp
$ docker compose up -d
Network myapp_default Created
Container myapp-web-1 Started
$ docker compose ps
NAME SERVICE STATUS PORTS
myapp-web-1 web running 0.0.0.0:80->80/tcp
docker compose up / ps / down の実ログ(Compose v2・実測)
docker compose up / ps / down の実ログ(Compose v2・実測)

更新のたびに docker compose pull && docker compose up -d を実行するだけで新しいイメージに差し替えられます。これがDockerデプロイの最大の強みです。

よく使うdocker composeコマンド

コマンド 用途
docker compose up -d バックグラウンドで起動(初回 or 更新後)
docker compose ps コンテナの一覧と状態を確認
docker compose logs -f リアルタイムでログを見る
docker compose down すべてのコンテナを停止・削除
docker compose pull 最新イメージをダウンロード

Composeのより詳しい使い方は Docker Composeの使い方(Ubuntu実機で解説) でも取り上げています。

PortainerでGUI管理する

コマンドラインに慣れていない場合は、Portainerというブラウザから使えるGUIツールでコンテナを管理できます。コンテナの起動・停止・ログ確認が視覚的に行えます。

手順1:Portainerをインストールする




ubuntu@vps:~
$ docker volume create portainer_data
portainer_data
$ docker run -d \
–name portainer \
–restart always \
-p 9000:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest

起動後は http://VPSのIPアドレス:9000 にブラウザからアクセスします。

手順2:管理者アカウントを登録する

初回アクセス時に管理者アカウントを作成する画面が表示されます。実際に起動した Portainer CE の初期セットアップ画面がこちらです。

Portainer 初期セットアップ画面・管理者アカウント登録(Playwright実スクリーンショット・実測)
Portainer 初期セットアップ画面・管理者アカウント登録(Playwright実スクリーンショット・実測)

ユーザー名(デフォルトは admin)と 12文字以上のパスワードを入力して「Create user」ボタンをクリックします。画面にも「The password must be at least 12 characters long.」と表示されており、短いパスワードでは登録できません。

手順3:GUIダッシュボードでコンテナを管理する

アカウントを作成すると、ダッシュボード(Home)が表示されます。実際の画面がこちらです。

Portainer CE ダッシュボード・local環境のコンテナ/イメージ数が表示された画面(Playwright実スクリーンショット・実測)
Portainer CE ダッシュボード・local環境のコンテナ/イメージ数が表示された画面(Playwright実スクリーンショット・実測)

この環境(Portainer CE 2.39.3 LTS)では、local 環境として Standalone 20.10.12 のDockerが接続され、コンテナ数・イメージ数・CPU・RAMが一目で分かります。ここから コンテナの起動・停止・ログ確認・シェル接続など、コマンドラインでやっていた操作を視覚的に行えます。初めてDockerを触る方は、Portainerを最初のステップにするのがおすすめです。

注意:Portainerのポートをファイアウォールで保護する

Portainerの管理画面(9000番ポート)はインターネットに公開されます。必ずVPSのファイアウォールか ufw で信頼できるIPアドレスのみに制限してください。
sudo ufw allow from 自分のIPアドレス to any port 9000

よくあるエラーと解決策

①「Got permission denied while trying to connect to the Docker daemon」

一般ユーザーが docker グループに追加されていない場合に発生します。




ubuntu@vps:~
Got permission denied while trying to connect to the Docker daemon socket
↓ 解決方法
$ sudo usermod -aG docker $USER
$ newgrp docker # 再ログインせずに即時反映

②「port is already allocated」(ポートが既に使用中)

他のプロセスや別のコンテナが同じポートを使っている場合に発生します。




ubuntu@vps:~
Error: port is already allocated
↓ 使用中のポートを確認
$ sudo ss -tlnp | grep :80
LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:((“nginx”,pid=1234,fd=6))
↓ 既存のnginxサービスを停止する、または別ポート(-p 8080:80)にする
$ sudo systemctl stop nginx

③「No space left on device」(ディスク容量不足)

不要なDockerイメージやボリュームが蓄積するとディスクが枯渇します。docker system df で「何がどれだけ無駄に使っているか」を可視化できます。実際の出力がこちらです。




ubuntu@vps:~
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 40 20 25.87GB 8.426GB (32%)
Containers 32 31 7.783GB 889.3MB (11%)
Local Volumes 59 9 8.33GB 6.487GB (77%)
Build Cache 39 0 811.7MB 811.7MB
$ docker system prune
docker system df のディスク使用状況(実測)
docker system df のディスク使用状況(実測)

右端の RECLAIMABLE が削除しても安全な「回収可能容量」です。この環境では未使用イメージ 8.4GB、未使用ボリューム 6.5GB、ビルドキャッシュ 0.8GB が回収可能でした。

注意

docker system prune は停止中のコンテナ・未使用のイメージ・ネットワークを削除します。-f をつけると確認なしで実行され、--volumes をつけると未使用ボリュームも消えるので、大事なデータがないか確認してから実行してください。

④コンテナは起動しているのにブラウザから接続できない

docker psUp なのに繋がらない場合、VPSのファイアウォール(ufwやセキュリティグループ)でポートが閉じているのがほとんどです。




ubuntu@vps:~
$ sudo ufw status
Status: active
22/tcp ALLOW Anywhere
↓ 80番・443番が開いていない場合
$ sudo ufw allow 80/tcp
Rule added
$ sudo ufw allow 443/tcp
Rule added

まとめ

VPSにDockerでアプリをデプロイする手順をまとめます。

手順まとめ

  • SSH鍵認証でVPSに接続する(ssh-keygen -t ed25519、公開鍵を登録)
  • sudo apt install -y docker.io で Docker 29.1.3 をインストール(Ubuntu 24.04)
  • sudo usermod -aG docker $USER で sudo なしで Docker を使えるようにする
  • docker run -d -p 80:80 --restart always nginx でアプリを起動し、curl で 200 OK を確認
  • docker-compose.yml に定義を書いて docker compose up -d で複数サービスを管理
  • Portainer(ポート9000)を入れるとGUIでコンテナを管理できる
  • ディスクが詰まったら docker system df で確認し docker system prune で掃除

Dockerを使えば、VPS上でのアプリデプロイが劇的に簡単になります。依存関係の衝突を気にせず複数のサービスを動かせるのが最大のメリットです。

VPS選びに迷っている方には、東京リージョンがあって料金が安い Vultr をおすすめします。メモリ1GBのプランから試せて、いらなくなったら削除するだけです。日本語サポートが欲しい方は ConoHa VPS も選択肢になります。

Dockerやサーバー構築のさらに詳しい使い方は、以下の記事もあわせてご覧ください。

  • Docker Composeの使い方(Ubuntu実機で解説)
  • UbuntuへのDockerインストール方法まとめ
  • VPS速度比較(実測ベンチでVultr / DigitalOcean / Linodeを比較)

コメント

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