LoginSignup
3
1

OCI コンテナ・インスタンスでNginxコンテナを実行する

Last updated at Posted at 2023-02-28

初めに
2022年12月に、OCI コンテナ・インスタンスという新サービスがリリースされました。これは、サーバーを管理せずに迅速かつ簡単にコンテナを実行できるサーバーレス・コンピュート・サービスです。コンテナ化されたアプリケーションは、Kubernetes よりも簡単な方法で実行できます。

前回のブログでは、OCI Computeインスタンスで Nginx コンテナを利用する方法を紹介しました。今回はOCIコンテナ・インスタンスを作成し、その上でNginx コンテナを実行する方法を紹介します。

目次

1. 事前準備

1-1. 認証トークンの生成

Docker イメージを OCI レジストリにプッシュするには、事前に認証トークンを生成する必要があります。 生成方法は、ドキュメントをご参考ください。

1-2. レポジトリの作成

メニュー → 開発者サービス → コンテナとアーティファクト → コンテナ・レジストリ → 「レジストリの作成」
image.png
リポジトリ名を入力し、「レジストリの作成」をクリックします。

作成後、以下のようになります。ユーザーネームスペースをメモしておいてください(後ほど使います)。
image.png

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 ~]$

プッシュ後、コンテナ・レジストリの中身を確認してください。
image.png

2. コンテナ・インスタンスの作成

コンテナ・インスタンス → 「コンテナ・インスタンスの作成」
image.png

コンテナ・インスタンス名を入力し、可用性ドメインとシェイプはデフォルトのままにします。

VCNとサブネットを指定し、「次へ」をクリックします。

コンテナ名(任意)を入力し、「イメージの選択」をクリックします。

OCIコンテナ・レジストリ」タブで、リポジトリとイメージを選択し、「イメージの選択」ボタンをクリックして戻ります。

イメージの URL は次のようになります。 「次へ」をクリックして詳細情報を確認します。
例:<region-id>.ocir.io/<namespace>/<repo-name>:<tag>

情報を確認した上、「作成」をクリックします。
image.png
コンテナ・インスタンスはすぐに作成されます。ACTIVE になったら、パブリック IP をコピーしておいてください(接続用)。
image.png

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に関するよくある質問

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1