dockerのプライベートレジストリの構築

Dockerってなんじゃ?(プライベートレジストリ)ここを参考にやってみる。

プライベートレジストリが使えないと業務で使うには正直つらいよね。

これで

  1. docker on Mac OSでサーバ構築
  2. プライベートレジストリにpush
  3. 本番環境でプライベートレジストリからpull

という流れが可能になった。

これはdockerをEC2上のCentOSに構築とかぶるけど気にしないで^^;;

プライベートレジストリの起動

EC2上のサーバにdockerを入れてregistryを構築します。

docker pull registry

これでレジストリサーバをpullしてきます。
dockerでcloseしているのが素晴らしい。

docker run -d -p 5000:5000 registry
これで外部から5000番に来たのがdocker上のコンテナの5000番に転送されます。

Security Groups も5000番を開けておきます。
テストなので0.0.0.0/0からのアクセスは許可してあります。

2014021801

コンテナ作成

Macで作業を行います。
単純にCentOSを起動してupdateしてそのイメージを使うことにします。

CentOSのContainerをpull
docker2boot start
docker pull centos

CentOSのContainerを起動

docker run -t -i centos /bin/bash

起動したContainerの中で/etc/issueを確認します。

# cat /etc/issue
CentOS release 6.4 (Final)
Kernel \r on an \m

# yum update

# cat /etc/issue
CentOS release 6.5 (Final)
Kernel \r on an \m

これでCentOS6.5のイメージができました。

Imageの作成

現在のContainerの状態をみてimageを作ります。

docker ps -a
ONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dfe094c0b8d7 centos:6.4 /bin/bash 7 minutes ago Exit 0 naughty_archimedes
2c4ce30c4241 centos:6.4 /bin/bash 55 minutes ago Exit 0 naughty_feynman

docker commit <コンテナID> <レジストリサーバー>:<レジストリポート>/<リポジトリ名>

今回の場合はec2上に構築してあるのでレジストリサーバはec2を指定します。

docker commit dfe094c0b8d7 docker.barasu.org:5000/asuma/centos65

Imageのpush


docker push docker.barasu.org:5000/asuma/centos65
The push refers to a repository [docker.barasu.org:5000/asuma/centos65] (len: 1)
Sending image list
Pushing repository docker.barasu.org:5000/asuma/centos65 (1 tags)
Image 539c0211cd76 already pushed, skipping
0bf579823a85: Image successfully pushed
Pushing tag for rev [0bf579823a85] on {http://docker.barasu.org:5000/v1/repositories/asuma/centos65/tags/latest}

これでプライベートレジストリにpushが完了しました。

別dockerからpull


docker pull docker.barasu.org:5000/asuma/centos65
Pulling repository docker.barasu.org:5000/asuma/centos65
0bf579823a85: Download complete
539c0211cd76: Download complete

pullしたimageで起動

docker run -i -t docker.barasu.org:5000/asuma/centos65 /bin/bash

まとめ

dockerでの本番環境へのデプロイができるようになった。
これはImmutable Infrastructureの第一歩。
LocalのMacの上で構築したサーバをEC2上へデプロイしたり、GoogleのCompute Engine上にデプロイしたりが可能となるのは素晴らしい。

このblogのAP側もdockerでデプロイしてみるのもありかもしれないな