Hogex spotted

Feed Rss

Dockerはじめました #Dockerfileとプライベートレジストリ

01.29.2015, Docker, by .

前回はとりあえずコンテナが動く所までいったので、今回はコンテナのカスタムと管理用のプライベートレジストリの作成をやりたいと思います。
Dockerは標準でDockerHubというPublicなレジストリがあるみたいなんですが、アプリケーションコードまで含んだコンテナをデプロイ用に使いたい等、Publicな場所はまずいケースも多々あると思うので・・・。
尚今回はホストが2台出てきます。

docker.un-is.local      docker実行用のホスト
docker-reg.un-is.local  プライベートレジストリ用ホスト

両方ストともdockerパッケージはインストール済みとします。

では、まずDockerfileから独自イメージを作成までを行いましょう。
テスト用ですので、比較的簡単なものでsshdが動くだけのCentOS7のイメージを作ってみます。
作業用に/tmp/docker/demo/sshディレクトリを切ってDockerfileを作成します。

ここまで出来たら準備完了です。docker buildコマンドでイメージを作成してみます。

docker buildコマンド実行後にdocker imagesコマンドで確認すると、demo/sshというイメージが一番上に追加されています。
実行してsshdがきちんと動作しているか確認。Dockerfile中でID/PWともに”hoge”のユーザーを作成しているので、そのユーザーでログイン。

無事にsshからログイン成功。
イメージが完成した所で次は独自レジストリへの登録を行います。

まずはサーバの準備。といっても、オフィシャルのコンテナイメージがあるので非常に簡単です。
イメージ名はstackbrew/registryなので、DockerHubからpullしてそのまま実行してやるだけです。

これでコンテナが起動しdocker-regのtcp:5000にコンテナのtcp:5000がバインドされます。
プロトコルはhttpなので、とりあえず動作確認をしてみる。

無事に動いてる。これで後はFWなんかが適切に動いてれば外部からも普通につながります。
逆に言えば、アドレスさえ分かってしまえば登録・DLやり放題なので要注意。
認証機構を設ける場合はApacheやnginxを噛ませてHTTPS + BASIC認証っていうやり方の模様。ちらっと調べたところ、HTTPS接続する場合オレオレ証明書だとクライアント側が接続を拒否しちゃうので、CA証明書をクライアント側に食わせないとダメみたい。
今回はとりあえずリモートからpush/pullしたいだけなので素のHTTPでつなぎます。といっても、クライアント側に一つ細工は必要なんだけどね。

ひとまず、登録のための下準備。登録する為に、対象のイメージに対して[DockerRegistryホスト名]:[ポート]/[任意の名前] の形式でタグを付けます。
今回のお名前は docker-reg.un-is.local:5000/ssh を使用。

タグ付けが出来た所で、docker pushコマンドで登録。といっても今回は失敗するんだけど・・・。

エラーメッセージ曰く、HTTPやオレオレ証明書のホストに接続するなら、デーモンの起動オプションに--insecure-registry docker-reg.un-is.local:5000 を追加するか、CA証明書を /etc/docker/certs.d/docker-reg.un-is.local:5000/ca.crtに追加しろって事らしい。
今回はHTTP接続なので、おとなしく起動オプションを追加。
/etc/sysconfig/docker に起動オプションを追記する所があるので

こんな感じでオプションを追加してやる。変更したら
systemctl restart docker.service
でdockerデーモン再起動。

無事成功。試しにレジストリ側でさっき登録したイメージをpullして起動してみる。
ちなみに、localhostは最初から信用されたホスト扱いっぽいので/etc/sysconfig/dockerの編集は無しで動く。まあ、当たり前かw

無事にSSH接続に成功。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


   Beat diabetes   Diabetes diet