1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

無料でGitLabの「Container Registry」を使って、docker composeのイメージをプライベートで保存してみる

Last updated at Posted at 2023-12-09

初めましての方、ご無沙汰している方、おはこんばんにちは。
Nな人です。

Twitter(現X)が何故か凍結され、早半年が過ぎました。
今はもうBlueSkyに生きていますので、よかったらフォローお願いします!
https://bsky.app/profile/nnahito.com

前置き(読み飛ばし推奨)

最近、自分のブログ「 https://nnahito.com/ 」を長らく放置していたので、
これを機に色々変えたいなーと思って模索している中、
「そうだ、コンテナ化しよう!」となり、勉強を始めました。

どうせやるなら、可能な限り無料でやりたい!
そんな夢を叶えていきましょうか。

それでは、やっていきましょう。

対象者

一応、アカウント登録などの手順はすっ飛ばすので、
この記事の対象者をまとめておきます。

  • GitLabのアカウントを持っている
    • 「GitLab?いやいやエンジニアならGitHubだろwww」とかいう訳のわからないこだわりのない人
  • dockerの操作をある程度わかっている
  • git関連の操作をある程度わかっている
  • Nな人の記事が好き

GitLabのContainer Registry

適当なリポジトリを作ったあと、画像の位置にあります。

スクリーンショット 2023-12-09 17.14.10.png

プロジェクトをを作る

早速適当なdocker-composeのプロジェクトを用意しましょう。
サンプルコードをGitHubに用意してあるので、それを使っていただいても大丈夫です。
(GitHubかよwwwというツッコミは受け付けておりません。)

サンプル環境
https://github.com/nnahito/gitlab-container-samplecode

イメージの登録に向けて、レジストリにログイン

おそらく、本来だったらdocker公式が用意したレジストリに登録するのでしょうが、
今回はGitLabのプライベートなイメージレジストリに保存するので、
GitLabにログインする必要があります。

なので、以下のコマンドを実行し、GitLabにログインしておきましょう。

$ docker login registry.gitlab.com

※ 聞かれるID/PASSは、GitLabにログインするものです

イメージのタグ付け

イメージにタグを付けましょう。
以下のようなコマンドを実行します

$ docker tag コンテナ名:コンテナのバージョン GitLabのコンテナレジストリのパス:コンテナのバージョン

サンプル

$ docker tag container-test-app:latest registry.gitlab.com/nnahito/container-test:0.01

イメージをPush

タグを付けたらGitLab上にPushします。
以下のようなコマンドを実行します。

$ docker push GitLabのコンテナレジストリのパス:コンテナのバージョン 

「GitLabのコンテナレジストリのパス」は、
Container Registoryのページに行ったときに書いてありますのですぐわかると思います。

サンプル

$ docker push registry.gitlab.com/nnahito/container-test:0.01

おめでとうございます。
これでPushができました。

image.png

階層別け

docker-composeを使う場合、複数のコンテナが存在することになります。
しかし、上記のやり方だと最後にビルドされたイメージしかpushされません。

1コンテナ1サービス(1プロセス)の推奨の元、その様になって……いるのかな?
多分。しらんけど。

複数のコンテナを保存したい場合は、階層を別けましょう。

階層別け

おなじみの/で階層を分けることができます。

私のサンプルコードを利用している前提でのサンプルコマンドになりますのでご注意ください。

まずはコンテナをビルドします。

$ docker compose build docker-compose.ymlで指定しているサービス名 

そしてTag登録をします。

$ docker tag コンテナ名:コンテナのバージョン GitLabのコンテナレジストリのパス/階層名:コンテナのバージョン

サンプル

# コンテナイメージのビルド
$ docker compose build app1

# Registory用にTagを発行
$ docker tag container-test-app:latest registry.gitlab.com/nnahito/container-test/app1:0.02
# コンテナイメージのビルド
$ docker compose build app2

# Registory用にTagを発行
$ docker tag container-test-app:latest registry.gitlab.com/nnahito/container-test/app2:0.02

これで準備完了です。
Pushしましょう。

$ docker push GitLabのコンテナレジストリのパス/階層名:コンテナのバージョン 

サンプル

# app1のコンテナイメージをPush
$ docker push registry.gitlab.com/nnahito/container-test/app1:0.02

# app2のコンテナイメージをPush
$ docker push registry.gitlab.com/nnahito/container-test/app2:0.02

これで、GitLab上に複数階層で、複数のイメージを置くことができます。

作ったイメージを使う

先程作ったイメージを使ってみましょう。
と言っても、普通にpullしてくると使えます。

pull

$ docker pull リポジトリのパス:バージョン

サンプル

# app1のコンテナイメージをPull
$ docker pull registry.gitlab.com/nnahito/container-test/app1:0.02

# app2のコンテナイメージをPull
$ docker push registry.gitlab.com/nnahito/container-test/app2:0.02

コンテナの起動

$ docker run -it リポジトリのパス:バージョン

サンプル

# app1のコンテナを起動
$ docker run -it registry.gitlab.com/nnahito/container-test/app1:0.02

# app2のコンテナを起動
$ docker run -it registry.gitlab.com/nnahito/container-test/app2:0.02

以上です。

終わりに

こんな感じでコンテナを無料でprivateに管理できるので、いい感じですね。

ちなみにGitHubにも同じような機能があるようなのですが、
こっちはそんなに調べていないのでまた別の機会に、ということで。

少しでも参考になった、助かったと思っていただければ、LGTMやストックをお願いします。

それではまた次回!

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?