Dockerのコンテナイメージを複数人で共有するには、Dockerコンテナレジストリを利用すると円滑に可能である。
最も有名なDockerコンテナレジストリとしては、”Docker, Inc.” 自体が提供しているDocker Hubがある。しかし、Docker Hub の無料プランでは、6ヶ月利用されいていないDockerイメージは削除されるという制約がある。また、セキュアに限られたメンバのみでイメージを共有したい場合にアクセスを制限できるプライベートリポジトリは一つしか利用ができない。
そこで、上記のような制約がなく、無料でプライベートリポジトリも無制限に利用可能なサービスであるGitLabの利用も良い選択肢となる。
GitLabとは ”GitLab Inc.” が提供するGitHubのようなGitのリモートリポジトリサービスである。しかし、本サービスはDockerHubのようなコンテナレジストリの機能も持つサービスである。
本ナレッジではこのGitLabによるプライベートなDockerコンテナレジストリの使い方を説明する。
GitLabでのプライベートDockerコンテナリポジトリ作成
- GitLabへアクセス。
- 画面右上の “Sign in”をクリックし、ログイン。
- アカウントの作成が未実施の場合は “Get free trial” をクリック。
出典 : GitLab
- (アカウント新規作成の場合)
画面左部の “GitLab.com” の “Start free trial” をクリックし、新規アカウントを作成。 - (アカウント作成済みの場合)
本ステップはスキップする。
出典 : GitLab
- (初回アクセスの場合)
プロジェクト等何もない状態のため、以下の画面が表示される。 “Create a group” をクリック。- “Create a project” にて、最初からプロジェクトを作成しても良いが、本手順にて作成するリモートリポジトリは、管理をしやすくするため名前空間により階層構造とする。そのため、本手順ではまずグループを作成する。
- これは、GitLabのDockerコンテナリポジトリが一つのプロジェクトに対して一つしか作れない仕様を踏まえた対応となる。
- “Create a project” にて、最初からプロジェクトを作成しても良いが、本手順にて作成するリモートリポジトリは、管理をしやすくするため名前空間により階層構造とする。そのため、本手順ではまずグループを作成する。
- (既にプロジェクト作成済みの場合)
本ステップはスキップし、次ステップを実施。
出典 : GitLab
- (初回アクセスの場合)
本ステップは、既にプロジェクト作成済みの場合の手順となるため、スキップ。 - (既にプロジェクト作成済みの場合)
GitLabにアクセスした後、画面上部の “Groups”、 “Your groups” をクリック。
グループ一覧が表示されるので、画面右上の “New group” をクリック。- 最初からプロジェクトを作成しても良いが、本手順にて作成するリモートリポジトリは、管理をしやすくするため名前空間により階層構造とする。そのため、本手順ではまずグループを作成する。
- これは、GitLabのDockerコンテナリポジトリが一つのプロジェクトに対して一つしか作れない仕様を踏まえた対応となる。
- これは、GitLabのDockerコンテナリポジトリが一つのプロジェクトに対して一つしか作れない仕様を踏まえた対応となる。
- 最初からプロジェクトを作成しても良いが、本手順にて作成するリモートリポジトリは、管理をしやすくするため名前空間により階層構造とする。そのため、本手順ではまずグループを作成する。
出典 : GitLab
- グループ作成画面が表示される。
出典 : GitLab
- “Group name” と、 “Group URL” に、任意の名前を入力。管理しやすい名前とする。
- 以下の例では、 “gr0005”。
- “Visibility level ” を “private” に選択。
- これを “private” とすると、特定のメンバのみのアクセスが可能となる。
- これを “public” とすると、インターネット上に公開される。
- “Create group” をクリック。
出典 : GitLab
- グループが作成され、以下の画面が表示される。
- 2階層目を作るため、 画面右上の “New subgroup” をクリックし、サブグループも作成する。
出典 : GitLab
- サブグループ作成画面が表示されるので、グループ作成時同様に設定をする。
- “Group name” と、 “Group URL” に、任意の名前に入力。管理しやすい名前とする。
- 以下の例では “subgr01”。
- URLで階層化されていることがわかる。
- “Visibility level ” は、上位グループのものを引き継いで “private” が選択済み。
- “Create group” をクリック。
出典 : GitLab
- グループが作成され、以下の画面が表示される。
- 3階層にプロジェクトを作成し、リモートリポジトリを設置するため、 画面右上の “New project” をクリック。
出典 : GitLab
- プロジェクト作成画面が表示される。
- “Create blank project” をクリック。
出典 : GitLab
- ブランクプロジェクトの作成画面が表示される。
- “Project name” に、任意の名前に入力。管理しやすい名前とする。
- 以下の例では “pj01” を設定。
- “Project URL” は作った階層のグループが選択されている状況なので変更しない。
- 以下の例では “gr0005/subgr01” を選択。
- “Project slug” に任意の名前に入力。管理しやすい名前とする。
- 以下の例では “pj01”。
- “Visibility level” は、グループのものを引き継いで “private” が選択済み。
- “Initialize repository with a README” は、README.md を作成するかを選択。本手順ではオフにしておく。リポジトリ作成後、作成も可能。
- “Create project” をクリック。
出典 : GitLab
- プロジェクトが作成され、以下の画面が表示される。
出典 : GitLab
- 画面左のメニューにて、 “Packages & Registries” 、 “Container Registy” をクリック。
出典 : GitLab
- 以下の画面が表示され、レジストリおよびリポジトリが作成済みで利用可能であることが分かる。ただし、実際にイメージはまだ格納されていない。
- “docker login” 、 “docker build” 、 “docker push” 用コマンドが表示されているので、必要に応じてコマンドをコピーしておく。
出典 : GitLab
以上にて、GitLabにてレジストリおよびリポジトリが利用可能な状態となった。
そのため、GitLab側の設定は完了となる。ただし、後ほど再度確認のため、GitLabへアクセスするのでWebブラウザはそのままの状態としておく。
クライアントにてDockerイメージをGitLabにアップロード
Docker を利用しているクライアントにて、以下手順を実施する。
- アップロード対象のイメージが存在していることを確認する。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
subgr01/pj01 latest xxxxxxxxxxxx 46 hours ago 1.77GB
- GitLabのDockerコンテナレジストリにログインする。
$ docker login registry.gitlab.com
- Dockerコンテナレジストリにアップロードするため、対象イメージにタグ付けを実施。
- 以下の例では、ローカルに存在する名前空間が “subgr01” 、リポジトリが “pj01” 、タグが “latest” のイメージに、レジストリが “registry.gitlab.com” 、名前空間が “gr0005/subgr01” 、リポジトリが “pj01” 、タグが “0.1” といったタグ付けをしている。
- タグ付けでは、実体のイメージが増えるわけではないが、元のタグと新規のタグ両方が残る。そのため、 “docker images” で確認すると、同じイメージに対して両方のタグが表示される。
$ docker tag subgr01/pj01:latest registry.gitlab.com/gr0005/subgr01/pj01:0.1
- 対象イメージをGitLabにアップロードする。
- 以下の例では、前述のタグ付けした通りのレジストリ、リポジトリにイメージをアップロードしている。
- 以下の例では、前述のタグ付けした通りのレジストリ、リポジトリにイメージをアップロードしている。
$ docker push registry.gitlab.com/gr0005/subgr01/pj01:0.1
以上でGitLabへのアップロードが完了となる。
GitLab側でアップロードされていることを確認する。
- GitLabにて、前述の “Packages & Registries” 、 “Container Registy” の画面を更新すると以下の画面が表示され、イメージが存在すること確認できる。
出典 : GitLab
関連Dockerコマンド
- Dockerコンテナからアップロード用のDockerイメージを作成。
- 本コマンドはDockerfileが存在するディレクトリにて実行。
$ docker build -t registry.gitlab.com/gr0005/subgr01/pj01:0.1 .
- GitLabから、Dockerイメージをクライアントに取得。
$ docker pull registry.gitlab.com/gr0005/subgr01/pj01:0.1
- その他のコマンド等は、以下参照。