DockerのプライベートレジストリをLet’s Encrypt(自動更新)+ベーシック認証で作ってみた

アプリケーション

最近、Dockerにはまっています。
環境がサクッと整うし、汚さないしで最高です。

もうこれからは、自分案件はできるだけDockerで構築しようと思っています。
スケールのことや冗長化のことなど、これまでいくつかのサービスを運営していて、漫然と感じていた不安が解消しました。
(まだスケールするようなサービスを作ったことはないけど)

これからDockerをガシガシ使っていくのに際して、プライベートレジストリが必要だと感じましたので、さっそく作ってみました。作るといっても、これもDockerでできるのでとても簡単です。

サーバには、最近お気に入りのLinodeのVPSを使いました。
最小構成のVPSが1ヵ月5ドルで借りられます。初期費用なし&時間課金なので、必要なときに必要なだけ立てて、不要になったらサクッと削除できるところが気に入ってます。コンソールパネルも使いやすいです。

コンソールパネルから最小構成のマシンでCoreOSをデプロイして、Docker Composeをインストールしました。

アクセス制限については、自分が使うだけなのでベーシック認証で十分かなと。
尚、認証を使うときは、TLSが必須みたいです。

まずは、すべてのデータを入れるディレクトリを作ります。今回は「registry」としました。

mkdir registry
cd registry

パスワードファイルを以下のコマンドで作ります。
《user_name》と《password》には、ログインする際のユーザー名とパスワードを指定します。

mkdir auth
docker run --entrypoint htpasswd registry:2 -Bbn 《user_name》 《password》 > auth/htpasswd

docker-compose.ymlを以下のように作ります。
repo.your-domain.com や mail@your-domain.com は、実環境に応じて書き換えてください。
Let’s Encryptを使いますので、Emailは実在するアドレスを正しく入力する必要があります。

version: '2'
services:
  registry:
    restart: always
    image: registry:2
    ports:
      - 5000:5000
    environment:
      REGISTRY_HTTP_TLS_CERTIFICATE: /certs/live/repo.your-domain.com/fullchain.pem
      REGISTRY_HTTP_TLS_KEY: /certs/live/repo.your-domain.com/privkey.pem
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
    volumes:
      - ./registry:/var/lib/registry
      - ./letsencrypt/:/certs
      - ./auth:/auth

  lets-nginx:
    image: smashwilson/lets-nginx
    restart: always
    volumes:
      - ./cache:/cache
      - ./letsencrypt:/etc/letsencrypt
    links:
      - registry
    environment:
      EMAIL: "mail@your-domain.com"
      DOMAIN: "repo.your-domain.com"
      UPSTREAM: "registry:80"
    ports:
      - "80:80"
      - "444:443"

あとは、docker-compose up で完了です。

docker-compose up

初回の起動に、Let’s Encript の設定が行われますので、数分待ちましょう。
Let’s Encryptの設定完了時に表示されるいつものメッセージが表示されたら準備完了です。

他のマシンからログインのテストをしてみましょう。

docker login repo.your-domain.com:5000

無事にログインできたら完成です!

コメント

タイトルとURLをコピーしました