ご利用ガイド オブジェクトストレージを使う(Docker Registry構築編)
目次
ConoHaのオブジェクトストレージを使って、PrivateなDocker Registryを構築する方法をご紹介致します。Docker Hubを使ってPrivateなリポジトリを作ることができますが、リポジトリ数に制限があったりします。オブジェクトストレージを使うことで容量を気にせずに好きなだけPrivateなリポジトリを作成することができます。
今回は「CUIのみ(docker-registry)」の方法をご紹介しようと思います。
まずDockerとは?
Dockerはアプリケーションを動作させることに特化したコンテナ型の仮想環境です。起動が早かったり、イメージさえあればどんな環境でも動いたりというメリットがあります。ここではご紹介しませんがDockerfileを使ったインフラのコード化(Infrastructure as Code)や、Kubernetesを使って運用の自動化を行なったりと様々なことができます。
Docker Registryとは?
Dockerのイメージを保存しておく場所で自分で作成したイメージを保存しておいたり、他の人とイメージを共有する時とかに使います。PrivateなDocker Registryを構築する事で公開したくない自分だけの環境を作ることができます。
CUIのみ(docker-registry)
構築方法
registryというイメージを使用します。これはDockerが公式で公開しているDocker Registryを立てるためのイメージです。
1. まずは最新のregistryをpullする
$ docker pull registry:2.6.2
2. 設定ファイルの作成
$ cat << EOF > config.yml
version: 0.1
log:
fields:
service: registry
storage:
swift:
authurl: https://identity.tyo1.conoha.io/v2.0
username: gncuxxxxxxxx
password: xxxxxxxx
tenant: gnctxxxxxxxx
container: image_container
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
EOF
項目 | 値 | 説明 |
---|---|---|
authurl | identityのURL | |
username | APIユーザー名 | |
password | APIパスワード | |
tenant | テナント名 | |
container | コンテナ名 | 使いたいコンテナ名、好きなものを設定可能 |
3. コンテナの起動
$ docker run -d -p 5000:5000 --name conoha-registry
-v `pwd`/config.yml:/etc/docker/registry/config.yml registry:2.6.2
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
xxxxxxxxxxxx registry:2.6.2 "/entrypoint.sh /etc…" 2 seconds ago Up 1 second 0.0.0.0:5000->5000/tcp conoha-registry
4. docker psで表示されなかった場合は以下のコマンドで確認します
以下のように出てた場合は認証に失敗していますので、APIのユーザー名等確認しましょう。
$ docker logs conoha-registry
panic: Swift authentication failed: Response didn't have storage url and auth token
goroutine 1 [running]:
panic(0xb7dbc0, 0xc4201942e0)
/usr/local/go/src/runtime/panic.go:500 +0x1a1
github.com/docker/distribution/registry/handlers.NewApp(0x1066800, 0xc42033f6e0, 0xc42034ca80, 0x1066800)
/go/src/github.com/docker/distribution/registry/handlers/app.go:123 +0x3908
github.com/docker/distribution/registry.NewRegistry(0x7efc726a91b0, 0xc42033f6e0, 0xc42034ca80, 0xc42034ca80, 0x0, 0x0)
/go/src/github.com/docker/distribution/registry/registry.go:86 +0x213
github.com/docker/distribution/registry.glob..func1(0x108e180, 0xc4202e7ba0, 0x1, 0x1)
/go/src/github.com/docker/distribution/registry/registry.go:55 +0x106
github.com/docker/distribution/vendor/github.com/spf13/cobra.(*Command).execute(0x108e180, 0xc4202e7b50, 0x1, 0x1, 0x108e180, 0xc4202e7b50)
/go/src/github.com/docker/distribution/vendor/github.com/spf13/cobra/command.go:495 +0x190
github.com/docker/distribution/vendor/github.com/spf13/cobra.(*Command).Execute(0x108e320, 0xc4201aff40, 0xc4200001a0)
/go/src/github.com/docker/distribution/vendor/github.com/spf13/cobra/command.go:560 +0x3c3
main.main()
/go/src/github.com/docker/distribution/cmd/registry/main.go:24 +0x2d
使用方法
1. コンテナの作成
$ docker run -itd --name conoha-chan centos
2. コンテナ内に入って操作を行う
conoha-memo.txtというファイルを作成するだけです。
$ docker exec -it conoha-chan bash
# cat << EOF > conoha-memo.txt
conoha container
EOF
# cat conoha-memo.txt
conoha container
# exit
3. イメージの作成、タグを付与
「conoha-chan」というコンテナから「localhost:5000/conoha/kawaii_container」というイメージを作成しています。
$ docker stop conoha-chan
$ docker commit conoha-chan localhost:5000/conoha/kawaii_container
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost:5000/conoha/kawaii_container latest 2b68e3b20999 7 seconds ago 200MB
centos latest 75835a67d134 5 weeks ago 200MB
registry 2.6.2 2e2f252f3c88 2 months ago 33.3MB
4. イメージをpushする
$ docker push localhost:5000/conoha/kawaii_container
The push refers to repository [localhost:5000/conoha/kawaii_container]
5. 不要なイメージ、コンテナを削除
最初に使ったCentOSのコンテナやイメージはローカルからは削除します。
$ docker rmi localhost:5000/conoha/kawaii_container
$ docker rm conoha-chan
$ docker rmi centos
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0215a2083fd6 registry:2.6.2 "/entrypoint.sh /etc…" 35 minutes ago Up 35 minutes 0.0.0.0:5000->5000/tcp conoha-registry
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry 2.6.2 2e2f252f3c88 2 months ago 33.3MB
6. 先ほどのイメージをpullしてコンテナを作成する。
$ docker pull localhost:5000/conoha/kawaii_container
$ docker run -itd --name new-conoha-chan localhost:5000/conoha/kawaii_container
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68c1f534c8b1 localhost:5000/conoha/kawaii_container "/bin/bash" 19 seconds ago Up 17 seconds new-conoha-chan
0215a2083fd6 registry:2.6.2 "/entrypoint.sh /etc…" 38 minutes ago Up 38 minutes 0.0.0.0:5000->5000/tcp conoha-registry
7. コンテナ内を確認する
$ docker exec -it new-conoha-chan bash
# cat conoha-memo.txt
conoha container
終わりに
今回はConoHaのオブジェクトストレージを使って、PrivateなDocker Registryを構築する方法をご紹介しました。イメージの作成からpushしてpullまでの簡単な動作をご紹介しましたが、設定を変更することでWebhookだったり様々なことができます。詳細についてはDocker Registryのドキュメントをご参考にしてください。
- 問題は解決できましたか?
-