Facebook Twitter
お問い合わせ
TOPICS
更新情報
ホーム > ブログ > AWS > 【Oracle Cloud】OCI上のゲームサーバーをDockerでコンテナ化し、AWSに移植してみた

【Oracle Cloud】OCI上のゲームサーバーをDockerでコンテナ化し、AWSに移植してみた

ブログ
AWS
Oracle Cloud
2026.07.01

皆さま、こんにちは!h.serizawaです。

私はプライベートでOCI上に人狼ゲームをはじめとした複数のゲームが遊べるゲームサーバーを構築・運用しています。

今回はそのゲームサーバーを題材に、コンテナ技術(Docker)を使ってOCIからAWSへ移植してみました。

「コンテナって何がいいの?」「クラウドをまたいで動くって本当?」という疑問を、実際に手を動かしながら解説していきます。


コンテナとは何か

コンテナを一言で表すと、「アプリとその動作に必要な環境をひとまとめにしたパッケージ」です。現環境をそのままコピーして、別環境(クラウドやサーバ、PC)でも動かすことができる技術です。

仮想マシンとの違いをざっくり整理するとこうなります。

 

比較項目 仮想マシン(VM) コンテナ
起動時間 数分 数秒
サイズ GBオーダー(OS込み) MBオーダー
移植性 環境に依存しやすい どこでも同じように動く
ホストOSとの関係 ゲストOSを丸ごと仮想化 ホストOSのカーネルを共有

 

コンテナの最大の強みは「移植性」です。OCI上でビルドしたコンテナイメージをAWSに持っていって、そのまま起動できる。今回はそれを実際のゲームサーバーで行います。


今回やること

OCIで動いているNode.jsのゲームサーバー(インスタンス)をDockerコンテナ化し、そのイメージをAWS EC2でも動かします。

まず現在のサーバーの状態です。PM2というプロセスマネージャーで管理して稼働中です。

項目 OCI(元の環境) AWS(移植先)
インスタンス VM.Standard.E2.1.Micro EC2 t3.micro
OS Ubuntu 22.04 LTS Amazon Linux 2023
アーキテクチャ AMD x86_64 AMD x86_64
アプリ管理 PM2 Docker

 

ポイントは2つあります。

・AMD x86_64アーキテクチャを選ぶこと。

OSをあえて変えること。

 

OCI側はUbuntu、AWS側はAmazon Linux 2023と異なるOSを使うことで、「OSが違っても同じコンテナが動く」というコンテナの移植性を確認します。


Step 1:OCI上にDockerをインストールする

まず既存のOCIゲームサーバーにDockerを追加します。Ubuntu 22.04にはDockerが標準搭載されていないため、公式インストールスクリプトを使います。既存のPM2やサーバーには影響しません。

sudo apt-get update
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker ubuntu
exit
# 再ログイン後
docker --version

補足
sudo usermod -aG docker ubuntu でubuntuユーザーをdockerグループに追加しています。
これにより以降のdockerコマンドをsudoなしで実行できます。
設定を反映するため、一度ログアウトして再接続が必要です。


Step 2:Dockerfileと.dockerignoreを作成する

Dockerfileはコンテナイメージの設計図です。ゲームサーバーのディレクトリに2つのファイルを追加するだけです。

 

Dockerfileの作成

vi /home/ubuntu/werewolf/Dockerfile

以下の内容を入力します。

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
EXPOSE XXXX
CMD ["node", "server.js"]

Dockerfileの定義項目

内容 意味
FROM node:20-alpine Node.js 20の軽量ベースイメージを使用(実際の環境に合わせてv20を指定)
WORKDIR /app コンテナ内の作業ディレクトリを指定
COPY package*.json ./ 依存関係ファイルを先にコピー(ビルドキャッシュ活用で高速化)
RUN npm install --production 本番用パッケージのみインストール(開発用を除外して軽量化)
COPY . . アプリ全体をコピー
EXPOSE XXXX 使用するポートXXXXを宣言
CMD ["node", "server.js"] コンテナ起動時に実行するコマンド

補足
package*.json を先にCOPYして npm install を実行しているのは、Dockerのレイヤーキャッシュを活用するためです。
パッケージに変更がない限り npm install のレイヤーがキャッシュされるため、2回目以降のビルドが大幅に速くなります。

 

.dockerignoreの作成

vi /home/ubuntu/werewolf/.dockerignore

以下の内容を入力します。

node_modules/
npm-debug.log
.git/

補足
node_modules/ はDockerfile内の npm install で自動生成されるため、ホスト側のものをコンテナに持ち込む必要はありません。
除外することでビルド時間の短縮とイメージサイズの削減ができます。
.git/ を除外することで開発履歴が本番イメージに混入するのを防ぎます。


Step 3:イメージをビルドしてOCIで動作確認

docker build コマンドでDockerfileからイメージを生成します。

cd /home/ubuntu/werewolf/
docker build -t werewolf:latest .
docker images | grep werewolf

OCI上で起動して動作確認します。実際のポートはPM2のサーバーが使用中のため、テスト用にホスト側ポートを変えて起動します(コンテナ内部は実際の使用ポートのまま)。

docker run -d \
  --name werewolf-container \
  -p XXXX:XXXX \
  --restart unless-stopped \
  werewolf:latest

docker ps
docker logs werewolf-container

補足
-p XXXX:XXXX は「ホスト側ポート → コンテナ内ポート」のマッピングです。
既存のPM2で動いているゲームサーバーを止めずにテストできます。
docker ps で「Up」状態、docker logs に「人狼サーバー起動」と表示されればOKです。


Step 4:Docker Hubにアップロードして移植準備

OCI上でビルドしたイメージをDocker Hub(パブリックなコンテナレジストリ)にアップロードします。Docker Hubに置くことで、インターネットにアクセスできるどのサーバーからでも docker pull できるようになります。

まず https://hub.docker.com/ にアクセスしてアカウントを作成します(「Sign Up」から登録)。

 

アカウント作成後、OCIサーバーのターミナルからログインします。ターミナルにワンタイムコードとURLが表示されるので、ブラウザでURLにアクセスしてコードを入力すると認証が完了します。

docker login

補足
ターミナルにワンタイムコードとURLが表示されます。
ブラウザでそのURLにアクセスしてコードを入力すると認証が完了し、「Login Succeeded」と表示されます。

続いてイメージにタグを付けてDocker HubへPushします。

docker tag werewolf:latest your-username/werewolf:latest
docker push your-username/werewolf:latest

補足
your-username の部分はご自身のDocker Hubユーザー名に置き換えてください。
docker tag でDocker Hubのリポジトリ名に対応したタグを付け、docker push でアップロードします。

補足
⚠️ Docker Hubのパブリックリポジトリはインターネット上に公開されます。
ソースコードを公開したくない場合は検証後にリポジトリを削除するか、有料プランのプライベートリポジトリのご利用をご検討ください。


Step 5:AWS EC2で同じイメージを起動する

セキュリティグループの作成

AWSコンソールからセキュリティグループを作成し、SSHとゲームサーバーのポートを開放します。

 

EC2インスタンスの起動

以下の表に記載したパラメータでEC2インスタンスを作成します。

項目
AMI Amazon Linux 2023
インスタンスタイプ t3.micro
キーペア 新規作成(.pem形式)
セキュリティグループ 上記で作成したもの
ストレージ 8GiB gp3(無料枠内)
パブリックIPの割り当て 有効化

補足
OCI側と同じAMD x86_64アーキテクチャを選択することで、プラットフォームの違いによるコンテナの動作不具合を排除します。
OSはあえてAmazon Linux 2023(OCI側はUbuntu)を選択。OSが異なってもコンテナが動くことを実証するのが今回のポイントです。

EC2へのSSH接続

chmod 400 ~/path/to/your-key.pem
ssh -i ~/path/to/your-key.pem ec2-user@18.181.184.137

補足
.pem キーファイルのパーミッションを400(オーナーのみ読み取り可)に変更しないとSSH接続がエラーになります。
ec2-user はAmazon Linux 2023のデフォルトユーザー名です。

DockerのインストールとコンテナのPull・起動

Amazon Linux 2023ではパッケージマネージャーがaptではなくdnfです。これがOCI(Ubuntu)との違いの一つですが、コンテナ側は関係ありません。

sudo dnf install -y docker
sudo systemctl start docker
sudo usermod -aG docker ec2-user
exit
# 再ログイン後
docker --version

補足
Amazon Linux 2023ではDockerサービスはインストール後に手動で起動する必要があります(sudo systemctl start docker)。
ec2-user をdockerグループに追加して sudo なしでdockerコマンドを実行できるようにします。
グループ変更を反映するため、一度ログアウトして再接続してください。

docker run -d \
  --name werewolf-container \
  -p XXXX:XXXX \
  --restart unless-stopped \
  your-username/werewolf:latest

docker ps
docker logs werewolf-container

補足
docker run コマンドはイメージがローカルにない場合、自動的にDocker Hubからpullします。

ブラウザでアクセスして動作確認します。

http://[EC2のパブリックIP]:[ポート番号]/werewolf.html

 

Dockerfileを書き直す必要も、npm install を再実行する必要もありません。OCI(Ubuntu)上でビルドしたイメージが、OSの異なるAWS(Amazon Linux 2023)でそのまま動きました。

 

まとめ

今回はOCI上で運用中のゲームサーバーをコンテナ化してAWSへの移植を通じて、コンテナ技術の基礎をご紹介しました。

 

ポイント 内容
コンテナの移植性 OCIでビルドしたイメージがOSの異なるAWSでもそのまま動く
既存環境への影響 DockerはPM2と共存可能。運用中のサーバーを止めずに検証できる
Dockerfileの役割 アプリの実行環境をコードで定義。どのクラウドでも再現できる

 

 

ここまで読んでいただき、ありがとうございました。

今回はプライベートで運用しているゲームサーバーを題材に、OCIからAWSへのコンテナ移植に挑戦しました。「既存のサーバーを止めずにコンテナ化したい」「クラウドをまたいで同じアプリを動かしたい」といった場面での参考にしていただければと思います。

コンテナ技術を活用したクラウド移植を検討する際の一例としてご参考になれば幸いです。
最後まで読んでいただき、ありがとうございました。


参考リンク


この記事が気に入ったら
「いいね!」

この記事を書いた人


関連コンテンツ

CONTACT お問い合わせ

Cloudiiのサービスやプロダクトについて
興味をお持ちの方は、
お気軽にお問い合わせください。