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

概要

docerkのimageをprivateに蓄えておくregistryという、dockerを利用してみます。
以降の作業は全部ホスト側で実施します。
registry-frontendを用いたWEB-UI利用なら、こちらを見てくださいねd(^ー゜*)

準備

ホストサーバのホスト名 : server
利用するdockerコンテナ: registry:2.0

registryに登録するrepositoryを永続化したいので、ホストにボリュームを用意する。

https通信用に証明書を作製しておく

※ココで、Common Nameですが、registryのコンテナを実行するホストへのアクセスに影響しますので、ここ重要かも。

出来た公開鍵をregistryにアクセスするホストに登録する

※この/etc/docker/certs.d/ ホルダを作製してca.crtを設置すると、既存のdocker registryへのhttpsアクセスに仕様するための公開鍵 ca-bundle.crtが使われなくなっちゃうみたいで、とりあえず symlink貼っとくのがいいみたい。

registryに接続する側でregistryへのアクセスについて自己証明書のチェックをすっ飛ばしてつなげるようにしておく

※centosの場合は、 /etc/sysconfig/docker になります。

registryサーバを起動する

registryサーバはv2.0を使います。

push/pull

ubuntuのイメージをpushしてみる

※serverの所は、registryコンテナが起動しているホストを指定する

docker本もだいぶ出そろってきたので、1冊位は手元にあってもいいかもですね~

Dockerで複数プロセスを扱う場合

Docker入門 Immutable Infrastructureを実現するを読んでおくと、理解が早いかもしれません。電子書籍だとタブレット一つで沢山持ち歩けるので便利ですよねd(^ー゜*)

概要

ココでは、ubuntu で、supervisorを用いて、nginx + php-fpm + postgersql を一つのdockerコンテナで、起動する方法を残します。ついでにsshでログインできるようにもしておきます。
Postgresqlは、imageを作成する際には、/var/share/pgsqlがVOLUMEマウントされていない状態なので、あえてここでDBの初期化等行っていません。HOST上の(永続化データ)を復元してから起動する想定になっています。
なので、事前にpostgresql9.3のDBをどちらかで作成してHOST側で /data/docker-share/webapp/pgsql 以下に配備しなければ、このコンテナを起動した際に、コンテナにsshして、supervisorctl status するとpostgresqlがFAILDとなっています。

この辺り、運用との絡みも出てくるので、ココでは触れません。
postgresqlのユーザIDは、apt-get install する際に100から順にインクリメントされた値となるようで、HOST側でchownしてもダメかも。また、Dockerfileではまだマウントされていないので、chownできない。
まだまだ、課題がのこっていそう。

環境

項目 内容
OS Ubuntu 14.04.3 LTS
middle ware nginx/1.4.6 (Ubuntu)
PHP 5.5.9-1ubuntu4.11
postgres (PostgreSQL) 9.3.9
ssh
docker version 1.5.0
ボリューム共有 HOST: /data/docker-share/webapp/
DOCKER: /var/share/

ファイル構成

 ./

  • Dockerfile
  • setfiles/
    • default
    • fastcgi.conf
    • supervisor/
      • cron.conf
      • nginx.conf
      • pgsql.conf
      • php.conf
      • ssh.conf

 

手順概要

  1. Dockerfileを作成する
  2. nginxの設定ファイルを作成する
  3. php-fpmの設定ファイルを作成する
  4. nginxのsupervisorのconfファイルを作成する
  5. cronのsupervisorのconfファイルを作成する
  6. php-fpmのsupervisorのconfファイルを作成する
  7. postgresqlのsupervisorのconfファイルを作成する
  8. sshのsupervisorのconfファイルを作成する
  9. docker buildする
  10. docker run して確認する

詳細手順

  1. Dockerfileを作成する
  2. nginxの設定ファイルを作成する
  3. php-fpmの設定ファイルを作成する
  4. nginxのsupervisorのconfファイルを作成する
  5. cronのsupervisorのconfファイルを作成する
  6. php-fpmのsupervisorのconfファイルを作成する
  7. postgresqlのsupervisorのconfファイルを作成する
  8. sshのsupervisorのconfファイルを作成する
  9. docker buildする
  10. htmlファイルが無ければ

    postgresql9.3のデータベースのバックアップを戻しておく

  11. docker run して確認する

雑記

「君は「これまで」と「これから」を心配しすぎなんです。
言うでしょう?
昨日とは過去のもの、
明日とは未知のもの、
今日の日はもうけもの。
それは天の贈り物。」
@カンフーパンダ ウーグウェイ導師

The clock is running. Make the most of today.
Time waits for no man.
Yesterday is history.
Tomorrow is a mystery.
Today is a gift.
That’s why it is called the present.
@Alice Morse Earle 「Sun Dials and Roses of Yesterday: Garden Delights.」