
目次
はじめに
みなさん、はじめまして。
Oracle Cloud Infrastructure検証チームの新人です。
本記事では、Oracle Cloud Infrastructure(OCI)で開発者サービスとして提供されている、コンテナ・インスタンスを使用して、シンプルなWebアプリケーションをコンテナ化していきます。
こちらの記事は
ORACLE MASTER Bronze DBA 2019とOracle Cloud Infrastructure 2024 Certified Foundations Associateを取得しました!
に登場した社員です!

コンテナ・インスタンスとは?
コンテナ・インスタンスは、サーバ管理が不要で、かつコンテナイメージを指定することで高速かつ簡単に実行できるサーバレスのコンピュートサービスです。
また、コンテナ・レジストリと連携することで、コンテナイメージをセキュアに管理することが可能です。
コンテナとは?
コンテナは、アプリケーションと実行に必要な環境を1つのまとまりにし、パッケージ化する技術のことです。
これにより、実行するOSの違いや、アプリケーションに必要なライブラリ・依存パッケージを気にすることなく、軽量かつ高速で、アプリケーションの開発と運用が可能になります。
仮想マシンとコンテナのアーキテクチャの違い
一般的に、仮想マシンとコンテナには、以下のようなアーキテクチャの違いがあります。
- 仮想マシン(VM):ハイパーバイザー上で複数のゲストOSを動作させます。
各VMは独立したOSを持ち、アプリケーションはそのOS上で動作します。
これにより高い分離性がありますが、OSごとのリソース消費が大きく、起動に時間がかかります。 - コンテナ:ホストOSのカーネルを共有し、アプリケーションと依存関係のみをパッケージ化します。
コンテナエンジンがプロセスを隔離するため、軽量で起動が速く、リソース効率に優れます。開発者フレンドリーなサービスだね!

実際にやってみた
事前に必要なもの
コンテナ化するにあたり、以下3つのファイルは最低限必要となります。
- 実行するアプリケーション関連ファイル
- アプリケーションの依存パッケージ情報
- Dockerfile
本記事では、PythonのフレームワークであるFlaskを用いて、簡易的なWebアプリケーションを作成しました。
コンテナでapp.pyを直接実行し、ブラウザで http://<パブリックIP>:8080 にアクセスすると、
文字列 "Hello OCI" を表示するような動作になっています。
- app.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello OCI"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8080)
- requirements.txt
Flask==3.1.2
- Dockerfile
FROM python:3.12-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD ["python", "app.py"]
構成図
本記事の構成図は以下になります。
また、OCI上でネットワーク設定が必要になります。
- コンテナ・インスタンスを作成する対象コンパートメントにVCNが作成されていること
- VCN内にパブリック・サブネットが構成されていること
- インターネット・ゲートウェイ、サービス・ゲートウェイが構成されていること
- セキュリティ・リストのイングレス・ルールで、HTTPリクエストを待ち受けるポートを許可していること
1. 認証トークンの生成
コンテナイメージのビルド、プッシュする際に
Oracle Cloud Infrastructure Registry(OCIR)へのログインが必要となります。
このログインで、認証トークンが必要なため作成します。
プロファイル > ユーザ設定 > 自分のプロファイル > トークンおよびキー から、認証トークンを生成できます。

2. リポジトリの作成
コンテナイメージを保存する、リポジトリを作成します。
コンソールから メニュー > 開発者サービス > コンテナとアーティファクト > コンテナ・レジストリ から「リポジトリの作成」を選択します。
コンパートメント/アクセス方法/リポジトリ名を指定し、「作成」をクリックします。
リポジトリが作成されました。
OCIRのログインに、ユーザ名とネームスペースを使用するため控えてください。

3. コンテナイメージをビルドする
OCIのCloud Shellでは、Dockerが使用できます。
今回は、Cloud Shell上で、コンテナイメージをビルドしていきます。
Dockerはアプリケーションを
コンテナイメージにするためのプラットフォームだよ!

OCIコンソールからCloud Shellを起動します。
最初に アクション > アーキテクチャ から、現在のアーキテクチャをX86_64に変更します。
ここで注意したい点として、コンテナを作成する際は、プルするコンテナイメージとのアーキテクチャを一致させる必要があります。
本記事では、コンテナ・インスタンスのシェイプをAMD(X86_64)で作成するために変更しました。
コンテナはX86_64、イメージはARM64と
いったように異なると、コンテナは作成できないよ!

続いて、OCIRにログインします。
Usernameは作成したリポジトリのネームスペースとユーザ名、Passwordは認証トークンを入力します。
$ docker login nrt.ocir.io Username: <ネームスペース>/<ユーザ名> Password: <認証トークン> Login Succeeded!
Cloud Shellのエディタ/GUIで以下のファイルをアップロードします。
(必要に応じて、作業用ディレクトリを作成してください)
- 実行するアプリケーション関連ファイル
- アプリケーションの依存パッケージ情報
- Dockerfile
$ ls -l ./oci-app-demo total 12 -rw-r--r--. 1 XXXX oci 256 Dec 4 01:32 app.py -rw-r--r--. 1 XXXX oci 619 Dec 4 01:35 Dockerfile -rw-r--r--. 1 XXXX oci 29 Dec 4 01:34 requirements.txt
アップロードが完了したら、docker buildコマンドでコンテナイメージをビルドします。
$ docker build -t nrt.ocir.io/<ネームスペース>/oci-app-demo:1.0.0-demo .
・
・
Successfully tagged nrt.ocir.io/<ネームスペース>/oci-app-demo:1.0.0-demo
5472095e3d7d79e8279c074ad531ab36529b1ab4f8b226d3ff88d01fc844fb30
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nrt.ocir.io/<ネームスペース>/oci-app-demo 1.0.0-demo 5472095e3d7d 3 seconds ago 138 MB
$ docker image inspect nrt.ocir.io/<ネームスペース>/oci-app-demo:1.0.0-demo --format '{{.Architecture}}'
amd64
ビルドが完了したら、作成したリポジトリにコンテナイメージをプッシュします。
$ docker push nrt.ocir.io/<ネームスペース>/oci-app-demo:1.0.0-demo
Getting image source signatures
Copying blob ...
Writing manifest to image destination
4. コンテナ・インスタンスの作成
メニュー > 開発者サービス > コンテナとアーティファクト > コンテナ・インスタンス から
「コンテナ・インスタンスの作成」をクリックします。
今回は検証用のためメモリを2GBに変更し、それ以外はデフォルトの構成で作成します。

続いて、コンテナの構成を設定します。
イメージは先ほどプッシュしたものを選択します。

最後に確認画面です。構成に問題なければ「作成」をクリックします。
1~2分ほどで作成が完了し、ステータスが「アクティブ」と表示されます。

5. 作成したコンテナにアクセスする
それでは、作成したコンテナにアクセスしてみましょう。
ブラウザから、http://<パブリックIP>:8080にアクセスします。

「Hello OCI」と表示されました。
さらにローカルPCのコマンドプロンプトから、curlコマンドでHTTPリクエストを送信してみましょう。
C:>curl http://<パブリックIP>:8080
Hello OCI
先ほどと同様に、「Hello OCI」とレスポンスがありました。
6. ログの確認
最後にコンテナのログを確認します。

検証しているローカルPCのグローバルIPから、コンテナにHTTPリクエストが送信され、正常に処理されていることが確認できます。
画像にある①はブラウザからコンテナにアクセスしたログ、②はcurlコマンドでアクセスしたログです。

①については、ブラウザの仕様で、自動的にFaviconを読み込むように設定されているため、404のエラーコードが発生しています。
ですが、本記事での検証ではFaviconを設定していないため、問題ありません。
さいごに
いかがでしたでしょうか?
コンテナ・インスタンスを使用することで、アプリケーションを簡単にコンテナ化することができます。
弊社にはOCIに詳しいエンジニアが多数在籍しております。
何かご不明なことやご興味を持たれたことがございましたら、お気軽にお問い合わせください!
他にもOCIの記事をたくさん投稿しているよ!
気になることがあったらチャットでも質問してね!

投稿者プロフィール

-
「親しみやすさと技術力」をテーマに、技術情報・サービス・インフラ系資格取得に役立つ情報、社員等の情報をお届けします。
90名強の事業部員で鋭意、執筆中です。
少しでも当社を知って頂けるよう、愛情込めて頑張ります!
※facebook、X(旧twitter)、インスタグラムでは「DBひとりでできるもん」の更新情報を発信しています。
最新の投稿
Infrastructure(IaaS)2026年1月27日【OCI】コンテナ・インスタンスでアプリケーションコンテナを作成してみた
資格取得2026年1月26日ORACLE MASTER Gold DBA 2019を取得しました!
投稿者プロフィール2026年1月23日くつのプロフィール
資格取得2026年1月22日Google Cloud Certified Generative AI Leaderを取得しました!



