Azure Container RegistryへDockerイメージを登録する

Dockerのイメージを登録・管理できるAzure Container Registryを使ってみたので手順をまとめます。

流れは次の通りです。

  1. Docker for Windowsをインストールする
  2. Azure Container Registryでレジストリを作成する
  3. WindowsでDockerイメージを作成する
  4. Container Registryへ作成したDockerイメージを登録する

PCはWindows 10 Pro (64bit)です。

※注意:記事作成時点ではAzure Conteiner Registryに登録したDockerイメージを削除できないようです。

Docker for Windowsのインストー

Docker for WindowsHyper-Vを使うのでWindows 10(64bit)のProfessionalエディションなどが必要(https://docs.docker.com/docker-for-windows/install/#what-to-know-before-you-install)ですが、Docker Toolbox(https://docs.docker.com/toolbox/overview/)を使えばその他WindowsでもDockerを使えるようです。

インストールはDocker公式ページのドキュメントに従って行います。

Install Docker for Windows | Docker Documentation

Docker for WindowsにはStableチャンネルやEdgeチャンネルがあるようですが、今回はStableチャンネルのインストーラーをダウンロードしてインストールしました。

インストーラーの指示に従ってインストールをした後、Hyper-Vが無効の状態の場合はDockerを起動するとダイアログが表示されるようです。

f:id:LocaQ:20170528230819p:plain:w500

ダイアログに書かれているようにHyper-Vを有効にするとVirtualBoxが使えなくなります。それで問題なければOKボタンをクリックするとHyper-Vが有効になりPCが再起動します。

再起動したらdockerコマンドが使えるか確認します。

コマンドプロンプトPowershellを開いて次のコマンドを実行します。

> docker --version
Docker version 17.03.1-ce, build c6d412e
> docker-compose --version
docker-compose version 1.11.2, build f963d76f
> docker-machine --version
docker-machine.exe version 0.10.0, build 76ed2a6

またはVisual Studio Codeで端末ウィンドウを開いても確認できます。

f:id:LocaQ:20170528231251p:plain:w600

各コマンドでバージョンが表示されればOKです。

コンテナーレジストリの作成

Azure Container Registryのドキュメントの手順に沿って作成します。

プライベート Docker レジストリの作成 - Azure Portal | Microsoft Docs

  1. Azure Portalを開く
  2. Marketplaceで「Azure コンテナー レジストリ」を検索する
  3. 発行元がMicrosoftの[Azure コンテナー レジストリ」を選択する
  4. [作成]をクリックする
  5. コンテナーレジストリ名などを入力して[作成]をクリックする

f:id:LocaQ:20170528230512p:plain:w350

レジストリ名には英数字しか使えないようです。

また、ここで管理ユーザーを有効にするとdockerコマンドでContainer Registryへログインする時に、ユーザー名にレジストリ名を、パスワードにアクセスキーを使えるようになります。今回はPCで作成したイメージをdockerコマンドでContainer Registryに登録したいので有効にします。

Dockerイメージの作成

Dockerイメージを作成するにはDockerfileが必要ですが、MonoをインストールしたUbuntuのコンテナを作成するDockerfileが既にあるのでそれを例に使います。Dockerfileの内容は次の通り。

FROM ubuntu:xenial-20161010
RUN apt-get update
RUN apt-get install -y mono-complete

任意のフォルダにこのDockerfileを保存します。

次はコマンドプロンプトまたはPowershellを開き、Dockerfileを保存したフォルダに移動後、Dockerイメージをビルドします。

> cd [Dockerfileのあるフォルダ]
> docker build -t [レジストリ名].azurecr.io/mono .

[レジストリ名]はContainer Registryを作成したときに指定した名前です。"-t"オプションの値は一定のフォーマットでなければなりません(次の章で説明します)。また、最後に" .“(ピリオドの前に空白あり)があります。

ビルドが終わったらイメージが作成できているか確認します。

> docker images
REPOSITORY                        TAG       IMAGE ID        CREATED        SIZE
[レジストリ名].azurecr.io/mono    latest    a5c78a372b93    6 hours ago    747 MB

Container RegistryへのDockerイメージの登録

Dockerイメージのリポジトリ名のフォーマット

Dockerイメージのリポジトリ名は次のフォーマットになっている必要があります。

[レジストリ名].azurecr.io/[Dockerイメージ名]

[Dockerイメージ名]は名前空間付きDockerイメージの名前です。名前空間はDockerイメージが属するグループのことで、"/“で区切って複数レベルの階層を構成できます。詳しくは次のドキュメントの[主な概念]のリポジトリとイメージを参照してください。

Azure のプライベート Docker コンテナー レジストリ | Microsoft Docs

“docker build"の時の”-t"オプションに指定した値はこのフォーマットになっています。

もし上記のフォーマットになっていなかったり、名前を変えたい場合はdockerコマンドで変更できます。

> docker tag [現在のリポジトリ名] [新しいリポジトリ名]

Container Registryへの登録

Container RegistryへのDockerイメージの登録は次のドキュメントを参考にします。

Docker イメージをプライベート Azure レジストリにプッシュする | Microsoft Docs

まずはdockerコマンドでContainer Registryへログインします。

> docker login [レジストリ名].azurecr.io/ -u [ユーザー名] -p [パスワード]
Login Succeeded

上記ドキュメントではAzure Active DirectoryのサービスプリンシパルというもののIDとパスワードを使っていますが、Container Registry作成時に管理ユーザーを有効にしているので別途ユーザーとパスワードが作成されています。そのユーザーとパスワードは、

  1. Azure Portalを開く
  2. 作成したContainer Registoryを選択
  3. [アクセスキー]をクリックする

で確認できます。

f:id:LocaQ:20170529003751p:plain:w600

ログイン後、Container RegistryへDockerイメージをプッシュします。

> docker push [レジストリ名].azurecr.io/mono
The push refers to a repository [[レジストリ名].azurecr.io/mono]
...
latest: digest: sha256:6e9a312338c88dcfb10fede48e5f0ff0d423ff15ed387510842d2945cd3633c9 size: 1782

プッシュが終わったら、

  1. Azure Portal
  2. 作成したContainer Registoryを選択
  3. [リポジトリ]をクリック

と操作してプッシュしたDockerイメージが表示されるか確認します。

f:id:LocaQ:20170529003247p:plain:w400

リポジトリ一覧に"mono"があれば登録ができています。