Azure Container RegistryのDocker Imageを指定してデプロイ

せっかくOpenShiftをAzureにデプロイしているので、Azureのサービスを活用した仕組みを作ってみました。

f:id:akubicharm:20170127194249p:plain

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