1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

podmanで自分のnginxイメージを作成してROKSにデプロイする

Last updated at Posted at 2024-11-11

目的

以下のチュートリアルとなります。

  • podmanでregistry.access.redhat.com上のnginxから自分のイメージを作成(Linuxサーバーを想定)
  • IBM Cloud Container Registry(ICR)に作成イメージをPush
  • Red Hat OpenShift on IBM Cloud(ROKS)上に上記イメージをデプロイ

前提

  • Podmanは導入済み(RHEL8.10に導入)
  • ROKSはデプロイ済み (ICRとの接続も済。OCP4.14)
  • ibmcli、ocは導入済み
  • ICRのデプロイおよびNamespaceは作成済み

手順

ibmcliの準備

ibmcliは導入済みとする

ユーザーの作成

podmanを利用する場合、ルートレスコンテナを利用するため、/etc/subuid/etc/subgid に記載されたUID/GIDのユーザーが必要となる。
そのため、上記UID/GIDのユーザーではない場合、ユーザーを追加し、パスワード設定をする。

sudo useradd ユーザー名
sudo passwd ユーザー名

Container Registry CLI のインストールをおこなう

ibmcloud plugin install container-registry

ibmcloud plugin list

資料の取得

git cloneで資料を取得し、対象ディレクトリに移動

git clone https://github.com/sclorg/nginx-container.git nginx-container

cd nginx-container/examples/1.20/

もしくは、zipでダウンロードし、作業ディレクトリに配置する。

自分用ファイルを作成

以下のindex.htmlファイルを作成する。
作成後、index2.htmlも作成する(index.htmlをコピーしたものでよい)

<title>部分や<body>は適宜変更する。

イメージファイルを読み込むようにしてもよい。(以下のindex.htmlはindex-amaebi_computer.pngを読み込んでいる)

<html>
<head>
	<title>Test NGINX passed</title>
</head>
<body>
<h1>NGINX is working on ROKS</h1>
  <p>Hello, World!</p>
  <img src="index-amaebi_computer.png" alt="Legendary Japanese spirit, Amabie" title="Amabie" >
</body>
</html>

ファイルの配置ができたら、index.htmlindex2.html、使うイメージファイル等を
nginx-container/examples/1.20/test-app/ 直下に配置する。(ファイルを置き換える)

コンテナイメージの作成

Dockerfileの確認

nginx-container/examples/1.20/にあるDockerfileを書き換える。

イメージファイルを配置する場合、ADD を追加し、イメージファイルを追加する。

FROM registry.access.redhat.com/ubi8/nginx-120

# Add application sources
ADD test-app/nginx.conf "${NGINX_CONF_PATH}"
ADD test-app/nginx-default-cfg/*.conf "${NGINX_DEFAULT_CONF_PATH}"
ADD test-app/nginx-cfg/*.conf "${NGINX_CONFIGURATION_PATH}"
ADD test-app/index* .

# Run script uses standard ways to run the application
CMD nginx -g "daemon off;"

コンテナイメージのビルド

作成したDockerfileでコンテナイメージをビルドする

cd <Dockerfileがあるディレクトリ>
podman build -t <コンテナイメージ名>
(例) podman build -t nginx-app .

イメージの確認

podman images

(以下表示される)
REPOSITORY                                 TAG         IMAGE ID      CREATED         SIZE
localhost/nginx-app                        latest      66ee5daf56a3  10 seconds ago  451 MB
registry.access.redhat.com/ubi8/nginx-120  latest      eec8d440def2  2 months ago    450 MB

コンテナイメージの稼働確認

コンテナイメージを稼働させて、想定のファイルがみえることを確認する。

podman run -it -d -p <てきとうなPORT>:8080 <コンテナイメージ名>

確認

curl -Lk 127.0.0.1:<指定したPort>

コンテナイメージをICRへPUSH

参考

IBM Cloudにログイン

ibmcloud login

ICRのNamespaceが作成されていることを確認

ibmcloud cr namespace-list -v

作成したイメージにtagをつける

  • source_imageは作成したコンテナイメージ名
podman tag <source_image>:<tag> <region>.icr.io/<my_namespace>/<new_image_repo>:<new_tag>

例) podman tag localhost/nginx-app jp.icr.io/isei20241010-1516-xxxx/nginx-app-yk:1.0

ICRにログインする(IBM Cloudにログインするだけではプライベートレジストリは使えません)

ibmcloud cr login --client podman

コンテナイメージをICRのNamespaceにPushする

イメージの指定は、先程つけたtag名を使用する

podman push <region>.icr.io/<my_namespace>/<image_repo>:<tag>

例) podman push jp.icr.io/isei20241010-1516-xxxx/nginx-app-yk:1.0

イメージがPushされたことを確認

ibmcloud cr image-list

ROKSにデプロイする

ROKSにログインする

参考 CLI からクラスターへの接続

自分用のNamespace(Project)を作成する

oc create new-project <new-project>

NamespaceにImagePullSecretをコピーする

oc get secrets -n default | grep icr-io

oc get secret all-icr-io -n default -o yaml | sed 's/default/<new-project>/g' | oc create -n <new-project> -f -

Secretがコピーされたことを確認する

oc get secret -n <new-project> | grep all-icr-io

デプロイ用のyamlファイルを用意する(nginx-deploy.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: ここにICRのイメージを記載(例 jp.icr.io/isei20241010-1516-xxxx/nginx-app-yk:1.0)
        ports:
        - containerPort: 8080
      imagePullSecrets:
       - name: all-icr-io

Podのデプロイ

oc create -f nginx-deploy.yaml -n <new-project>

oc get pod -n <new-project>

Serviceの作成用yamlの作成 (nginx-svc.yaml)

apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  type: ClusterIP
  selector:
    app: nginx
  ports:
    - port: 8080
      targetPort: 8080

Serviceの作成

oc create -f nginx-svc.yaml -n <new-project>

oc get svc -n <new-project>

Routeの作成

oc expose svc nginx-svc -n <new-project>


oc get route -n <new-project>

デプロイしたnginxコンテナにアクセスできることを確認

上記のoc get routeに表示されているURLにアクセスする。

curl http://上記URL

GUIからもアクセスして確認する。

参考

Nginx 1.22

1
0
1

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?