本ブログは、オラクル・クラウドの個人ブログの1つです。
初めに
2022年12月に、OCI コンテナ・インスタンスという新サービスがリリースされました。これは、サーバーを管理せずに迅速かつ簡単にコンテナを実行できるサーバーレス・コンピュート・サービスです。コンテナ化されたアプリケーションは、Kubernetes よりも簡単な方法で実行できます。
前回のブログでは、OCI Computeインスタンスで Nginx コンテナを利用する方法を紹介しました。今回はOCIコンテナ・インスタンスを作成し、その上でNginx コンテナを実行する方法を紹介します。
目次
1. 事前準備
1-1. 認証トークンの生成
Docker イメージを OCI レジストリにプッシュするには、事前に認証トークンを生成する必要があります。 生成方法は、ドキュメントをご参考ください。
1-2. レポジトリの作成
メニュー → 開発者サービス → コンテナとアーティファクト → コンテナ・レジストリ → 「レジストリの作成」
リポジトリ名を入力し、「レジストリの作成」をクリックします。
作成後、以下のようになります。ユーザーとネームスペースをメモしておいてください(後ほど使います)。
1-3. Dockerイメージを OCI レジストリにプッシュ
この例では、dockerfile を使用して、Dockerイメージをビルドします。 このステップは、OCI
Computeインスタンスで実行されます。 なお、テストのために Nginx のウェルカム・ページを置き換えます。 イメージが作成されたら、それをOCI レジストリにプッシュします。
もし、Computeインスタンスに docker がインストールされていない場合は、まずそれをインストールしてください。 (以前のブログの Step-1 をご参照)
a) dockerfile の準備
[opc@linux8-nginx ~]$ cat dockerfile
FROM nginx
RUN mkdir -p /usr/share/nginx/html
RUN echo "<h1>Hello Nginx</h1>" > /usr/share/nginx/html/index.html
VOLUME /usr/share/nginx/html
EXPOSE 80
[opc@linux8-nginx ~]$
b) イメージのビルド
[opc@linux8-nginx ~]$ sudo docker build -t nginx_demo .
[+] Building 9.6s (7/7) FINISHED
=> [internal] load build definition from dockerfile 0.0s
=> => transferring dockerfile: 250B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/nginx:latest 2.1s
=> [1/3] FROM docker.io/library/nginx@sha256:6650513efd1d27c1f8a5351cbd33edf85cc7e0d9d0fcb4ffb23d8fa89b601ba8 5.3s
......
=> [2/3] RUN mkdir -p /usr/share/nginx/html 0.7s => [3/3] RUN echo "<h1>Hello Nginx</h1>" > /usr/share/nginx/html/index.html 0.9s
=> exporting to image 0.6s
=> => exporting layers 0.6s
=> => writing image sha256:19735e14b0a66d10d4b268c01b9da10110823f4e9619fd9fddfb2e573054d067 0.0s
=> => naming to docker.io/library/nginx_demo 0.0s
[opc@linux8-nginx ~]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx_demo latest 19735e14b0a6 7 minutes ago 142MB
[opc@linux8-nginx ~]$
curl コマンドで確認します。 (Webブラウザでも構いません。)
[opc@linux8-nginx ~]$ curl localhost
<h1>Hello Nginx</h1>
[opc@linux8-nginx ~]$
c) イメージのタグ付け
[opc@linux8-nginx ~]$ sudo docker tag 19735e14b0a6 nrt.ocir.io/<namespace>/repo-nginx:latest
[opc@linux8-nginx ~]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx_demo latest 19735e14b0a6 19 minutes ago 142MB
nrt.ocir.io/<namespace>/repo-nginx latest 19735e14b0a6 19 minutes ago 142MB
[opc@linux8-nginx ~]$
d) OCI コンテナ・レジストリにログイン
コマンド: docker login <region-key>.ocir.io
<region-key>: 東京リージョンの場合、nrt となります。その他のリージョンについては、こちらの一覧を参照してください。
コマンドを実行すると、ユーザー名とパスワードの入力が求められます。
ユーザー名:OCI コンテナ・レジストリの画面に表示されているネームスペースとユーザー名を入力 (Step 1-2 をご参照ください。それらの間の「/」を忘れずに。)
パスワード:Step 1-1 で生成された認証トークンを入力
[opc@linux8-nginx ~]$ sudo docker login nrt.ocir.io
Username: <namespace>/<user>
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
[opc@linux8-nginx ~]$
e) Docker イメージのプッシュ
コマンド:docker push <target-tag>
例: docker push nrt.ocir.io/<namespace>/repo-nginx:latest
[opc@linux8-nginx ~]$ sudo docker push nrt.ocir.io/<namespace>/repo-nginx
Using default tag: latest
The push refers to repository [nrt.ocir.io/<namespace>/repo-nginx]
......
latest: digest: sha256:bc5ca8e3ea4715e7ab4141542cc9c3e30b51358c62f0ae8aa6412c00c0315775 size: 1983
[opc@linux8-nginx ~]$
2. コンテナ・インスタンスの作成
コンテナ・インスタンス → 「コンテナ・インスタンスの作成」
コンテナ・インスタンス名を入力し、可用性ドメインとシェイプはデフォルトのままにします。
コンテナ名(任意)を入力し、「イメージの選択」をクリックします。
「OCIコンテナ・レジストリ」タブで、リポジトリとイメージを選択し、「イメージの選択」ボタンをクリックして戻ります。
イメージの URL は次のようになります。 「次へ」をクリックして詳細情報を確認します。
例:<region-id>.ocir.io/<namespace>/<repo-name>:<tag>
情報を確認した上、「作成」をクリックします。
コンテナ・インスタンスはすぐに作成されます。ACTIVE になったら、パブリック IP をコピーしておいてください(接続用)。
3. Nginxへの接続
Web ブラウザーを開き、URL ボックスにコンテナ・インスタンスのパブリック IP を入力します。(例:http://XXX.XXX.210.138
)
他のComputeインスタンスから接続してみます。 ( コマンド:curl <public_ip>
)
[opc@linux8 ~]$ curl XXX.XXX.210.138
<h1>Hello Nginx</h1>
[opc@linux8 ~]$
ここまで、Nginxの動作確認は完了です。OCI ロードバランサーのバックエンド・サーバとしても動作できます。コンテナ・インスタンスを LB のバックエンドに追加する時、LB作成後、コンテナ・インスタンスのIPアドレスを指定してください(詳細を省略)。
以上
関連記事
オラクル・クラウドの個人ブログ一覧
OCIでNginxのDockerイメージを利用する
OCI コンテナ・インスタンスと標準VMでのコンテナの実行の違い
オフィシャル・リンク
製品サイト
公式ドキュメント
Announcing the availability of OCI Container Instances (英語)
Getting started with OCI Container Instances(英語)
Container Instancesに関するよくある質問