Azure Container RegistryのDocker Imageを指定してデプロイ
せっかくOpenShiftをAzureにデプロイしているので、Azureのサービスを活用した仕組みを作ってみました。
Azure Container Registryからコンテナイメージを取得するようにしておけば、危険かもしれない野良コンテナを持ち込まれないようにすることも可能になります。 また、社内のコンテナリポジトリで標準化されたコンテナイメージを配布する仕組みがあれば、OpenShift上でもローカルで実行する場合でも環境を統一することができます。
Azure Container Registry に Wildfly イメージを登録
docker hub から wildfly のコンテナイメージを取得して、Azure Container Repository に pushします。
docker pull docker.io/jboss/wildfly docker tag docker.io/jboss/wildfly xxxregistry-on.azurecr.io/komizoregistry/wildfly docker login xxxregistry-on.azurecr.io docker push xxxregistry-on.azurecr.io/komizoregistry/wildfly
OpenShift にアプリケーションをデプロイ
今回デプロイする Wildfly のコンテナイメージは、root ユーザーで実行されるようになっているので、特権コンテナとして実行するための設定と、Azure Container Registry へのアクセスに認証が必要になるのでsの設定も必要です。
プロジェクトの作成
oc new-project extrepo
Secret の作成
Azure Container Registory にアクセスするための認証情報を登録します。 docker login すると、ホームディレクトリの配下に認証情報のファイルが作成れます。 Docker version 1.12.5, build 047e51b/1.12.5 では、~/.docker/config.json ファイルです。
この認証情報を利用して、OpenShift から Azure Container Registry にアクセスするためのSecretを作成します。
oc secrets new external-registry .dockerconfigjson=docker-config.json
特権コンテナの実行を許可
OpenShiftのMasterサーバーで、クラスタ管理者(system:admin)でポリシーを設定します。
oadm policy add-scc-to-group anyuid system:serviceaccounts:extrepo
Secret を設定
oc secrets add serviceaccount/default secrets/external-registry --for=pull
コンテナイメージのpullにsecretが設定されたことを確認します。
$ oc describe serviceaccount/default Name: default Namespace: extrepo Labels: <none> Image pull secrets: default-dockercfg-8tmb3 external-registry Mountable secrets: default-token-miful default-dockercfg-8tmb3 Tokens: default-token-c36r2 default-token-miful
コンテナイメージを指定してデプロイ
アプリケーションをデプロイして、URL でアプリケーションを公開できるようにRouteを作成します。
oc new-app --docker-image=xxxregistry-on.azurecr.io/komizoregistry/wildfly:latest oc expose wildfly