Jasper Inc.

地方在住エンジニアのテック&ライフブログ

【OCI】コンテナインスタンスとコンテナレジストリの使い方

OCIでももちろんコンテナインスタンスとレジストリを使うことができます。AWSでいうところのECSとECRですね。今回はそれらを使ってNginxを起動させるまでの手順を解説します。

Nginx + Dockerfile で動作確認

ディレクトリ構成

MyApp
┣ src
┃ ┗ index.html
┗ Dockerfile

index.html

<h1>Hello Docker!</h1>

Dockerfile

FROM nginx
COPY /src /usr/share/nginx/html    // srcをhtml配下にコピー

Dockerコマンド

// イメージを作成
docker build -t nginx:0 . 

// イメージからコンテナを起動
docker run -itd -p 8080:80 --name nginx nginx:0 

ブラウザからアクセス

localhost:8080 にアクセスすると、下記の通り表示されたので確認完了。

イメージをコンテナレジストリにプッシュ

下準備として、tenancy namespace (=オブジェクト・ストレージ・ネームスペース)の確認と認証トークンの生成をします。

オブジェクト・ストレージ・ネームスペース

テナンシ詳細から、オブジェクト・ストレージ・ネームスペースもコピーして、どこかにペーストしておいてください。

認証トークン

自分のプロファイルの下部から認証トークンを生成し、メモ帳などどこかに保存しておきます。

docker loginからのタグ付け、プッシュまで

// コンテナレジストリにログインする
// コマンド: docker login <region-key>.ocir.io
// <region-key>は日本東部(東京)であれば、nrt

% docker login nrt.ocir.io

Username: <tenancy-namespace>/<username> 
Password: <認証トークン>

// ↑事前に確認&生成したものを入力

Authenticating with existing credentials...
Login Succeeded

// ↑ログイン成功

// イメージのタグ付けとプッシュ
// コマンド: docker tag <image-identifier> <target-tag>
// <image-identifier>はイメージIDもしくはイメージ名
// <target-tag>は<region-key>.ocir.io/<tenancy-namespace>/<repo-name>:<version>の形式
% docker tag nginx:0 nrt.ocir.io/nrmflgj4uufo/nginx:0

// コマンド: docker push <target-tag>
// <target-tag>は<region-key>.ocir.io/<tenancy-namespace>/<repo-name>:<version>の形式
% docker push nrt.ocir.io/nrmflgj4uufo/nginx:0
公式ドキュメント

このへんのコマンドは少々わかりにくいので、公式ドキュメント(ヘルプセンター)を見た方が正直わかりやすいかと思います。

Docker CLIを使用したイメージのプッシュ

コンテナレジストリで確認

OCIコンソールのコンテナレジストリで確認すると、イメージが追加されていることがわかります。

イメージからコンテナインスタンスを起動

OCIのコンソールからコンテナ・インスタンスを開き、「Create container instance」をクリックしたら、名称を入力したりシェイプを選択します。

Networkingの項目も展開し、VCNを選択します。

コンテナイメージを選択する際に、「Provide credentials manually」にチェックをつけて、「Registry username」と「Registry password」を入力するのを忘れずに。「Registry username」は<tenancy-namespace>/という形式で、「Registry password」は認証トークンでOKです。

最後にCreateをクリックしたら、起動を待ちましょう。

無事にコンテナが起動してアクティブになったので、パブリックIPを確認。

ブラウザからアクセスすると、無事にindex.htmlが表示されました。

おわりに

以上、コンテナレジストリとインスタンスの基本的な使い方を解説しました。自動化するサービスやツールと組み合わせれば、開発からデプロイまでが割と簡単にできそうですね。