この記事は、「オンプレミス、Kubernetesで、マイクロサービスを意識したWebアプリをデプロイするまでの軌跡」の一部です。
はじめに
例えば、
$ docker run -d -p 80:80 --name webserver nginx
というコマンドでDockerイメージを立ち上げると、Nginxのイメージが立ち上がります。
ではこのNginxのイメージはどこから来るのかというと、Dockerの公式レジストリからDLされてきます。
Docker Hubと呼ばれるこのレジストリは、サインアップする事で誰でもイメージを公開することが出来、月々支払う事でプライベートなイメージを作成する事が出来ます。
ただ、案件等であまり外に出したくないコンテナというものも存在すると思います。
そんな時は、なんとかオンプレミスで同じサービスが立ち上げられないか考えたりするもの。調べてみるとやはりありました。
プライベートなDockerレジストリサーバーをコンテナで立てる
このイメージは公式が提供してくれているので、ありがたく使う事にしましょう。
registryをインストールする
といっても、手順は拍子抜けするほど簡単です。
docker-compose.ymlに以下の内容を記述して、起動するだけです。
registory:
container_name: local-docker-registory
image: registry:2.3.0
ports:
- 5000:5000
volumes:
- <ファイル保存先へのパス>
docker-compose up -d
ファイル保存先のパスはホストOSのパスで、/home/registry/repos/
のような形になります。
これで、以下のアドレスで待機するDockerレジストリが出来上がりました。
http://ホストのip:5000
ポート番号は必要であれば適宜変更してください。
立ち上げたレジストリにファイルをプッシュ
今立ち上げたレジストリにファイルをイメージをプッシュするには、以下の手順を踏みます。
コンテナをビルド
docker build -t <イメージ名>:<タグ> <DockerFileのあるディレクトリ>
例
目的のDockerFileがあるディレクトリにいる場合
docker build -t test-image:1.0 .
ビルドしたイメージにタグをつける
docker tag <イメージ名>:<タグ> <レジストリのIP>:<ポート>/<リポジトリ名>/<イメージ名>:<タグ>
例
docker tag test-image:1.0 192.168.0.xxx:5000/test/test-image:1.0
イメージをプッシュ
docker push <レジストリのIP>:<ポート>/<リポジトリ名>/<イメージ名>:<タグ>
例
docker push 192.168.0.xxx:5000/test/test-image:1.0
タグは主にバージョンを示すことが多いのかなと思うのですが、これが中々管理が大変で…
特に複数のコンテナアプリを同時に扱っていたりすると混乱します。
ともあれ、これでプライベートなレジストリが手に入りました。
Kubernetesを使用する場合はイメージは全てどこかのレジストリにアップされている必要があるので、そちらの構築でも役に立ってくれます。そのあたりはまた別の記事で書こうかと思います。
以上です。
お疲れ様でした!