1. 概要

このチュートリアルでは、Dockerイメージをプライベートリポジトリにプッシュする方法を説明します。 まず、Dockerイメージの基礎となるサンプルアプリケーションを作成します。 次に、プライベートDockerリポジトリにログインする方法を確認し、最後にイメージにタグを付けてリポジトリにプッシュする方法を学習します。

2. プライベートDockerリポジトリ

プライベートDockerリポジトリは、それらに含まれるイメージへのアクセスを制限します。 パブリックリポジトリとは異なり、許可されたユーザーのみが画像にアクセスできます。 このようにして、組織、チーム、さらには1人のユーザーなど、特定のユーザーグループのみにアクセスを許可することができます。 これにより、Dockerイメージを公開したくないプロジェクトに最適です。

Dockerリポジトリをプライベートにすることは、リポジトリ設定を介して行われます。 これがどのように行われるかの詳細はプロバイダーによって異なる場合がありますが、通常はチェックボックスをオンにするだけです。

プライベートDockerリポジトリが何に適しているかがわかったので、そのようなリポジトリにイメージをプッシュする方法を見てみましょう。 手順は、イメージをパブリックリポジトリにプッシュするのと同じです。 唯一の違いは、リポジトリがプライベートとしてマークされていることです。

3. 画像を準備する

まず、オプションで正しいエイリアスとタグを指定してイメージを準備する必要があります。 これは、イメージの作成中に実行することも、既存のイメージを使用して名前を変更することによって実行することもできます。

3.1. 新しいイメージを作成する

まず、フレンドリーな Hello World!メッセージをユーザーに返すRestControllerで構成される単純なSpringBootアプリケーションからDockerイメージを作成します。

@RestController
public class HelloWorldController {
    @GetMapping("/helloworld")
    String helloWorld() {
        return "Hello World!";
    }
}

次のDockerfileを使用します。

FROM openjdk:11
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

最後に、イメージをビルドするコマンドを実行します。 次のようになります。

docker build [OPTIONS] PATH | URL | -

この例では、-tオプションを使用して、画像にタグを付けたいことを示しています。 ドット「。」もご用意しております。 jarファイルへのPATHとして。 ユーザー名とリポジトリ名で構成される正しい名前を選択することが重要ですバージョンタグはオプションです。 回避される場合、画像はlatestでタグ付けされます。

docker build -t username/fancy-repository:v1.0.0 .

これで、次のコマンドを使用して既存の画像を一覧表示できます。

docker images

その結果、新しく作成された画像が表示されます。

REPOSITORY                  TAG       IMAGE ID        CREATED              SIZE
username/fancy-repository   v1.0.0    e20b5a89a0f2   About a minute ago   665MB

3.2. 既存の画像を準備する

場合によっては、画像を最初から作成するのではなく、既存の画像をプッシュする必要があります。 これには、このセクションで説明するいくつかの準備手順が必要です。 マシンに次の画像があると仮定します。

REPOSITORY       TAG         IMAGE ID       CREATED        SIZE
existing-image   some-tag    e20b5a89a0f2   2 weeks ago   665MB

fancy-repository にプッシュするには、最初に次のコマンドを使用して、画像に適切な名前/エイリアスのタグを付ける必要があります。

docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

この例では、 SOURCE_IMAGE [:TAG] は、既存の画像の名前とタグです。 TARGET_IMAGE [:TAG] は、ユーザー名と、イメージをにプッシュするリポジトリの名前で構成されるエイリアスです。 この例では、コマンドは次のようになります。

docker tag existing-image:some-tag username/fancy-repository:v1.0.0

次のコマンドを使用して結果を確認できます。

docker images

これで、リポジトリの名前と新しく適用されたバージョンタグを示す追加のエントリが表示されます。 画像ID、タイムスタンプ、サイズは同じです。これは、別のエイリアスを使用しただけで、同じ画像であるためです。

REPOSITORY                      TAG         IMAGE ID        CREATED               SIZE
existing-image                  some-tag    e20b5a89a0f2    2 weeks ago          665MB
username/fancy-repository       v1.0.0      e20b5a89a0f2    2 weeks ago          665MB

これで、イメージをプライベートリポジトリにプッシュすることができます。

4. 画像をプッシュ

Dockerイメージを準備したので、それをプライベートリポジトリにプッシュできます。 最初のステップは、次のコマンドを使用してDockerHubレジストリにログインすることです。

docker login

最後のステップは、次のコマンドでイメージをプッシュすることです。

docker push [OPTIONS] NAME[:TAG]

この例では、オプションを指定する必要はありませんが、画像名とタグを指定するだけで済みます。 コマンドは次のようになります。

docker push username/fancy-repository:v1.0.0

これで、イメージはDockerHubのプライベートDockerリポジトリにアップロードされます。 次のコマンドを実行して、イメージがDockerHub上にあることを確認できます。

docker search username/fancy-repository

その結果、画像の詳細を示し、DockerHubで実際に利用できることを証明する次の出力が得られます。

NAME                        DESCRIPTION   STARS     OFFICIAL   AUTOMATED
username/fancy-repository                 0                             

5. 結論

この記事では、Dockerイメージをプライベートリポジトリにプッシュする方法について説明しました。 プライベートリポジトリとは何か、そしてそれが何のために使われるのかを学びました。 次に、イメージを準備してプライベートリポジトリにプッシュする方法を示しました。

この記事に記載されているすべてのコード例は、GitHubから入手できます。