またDockerまわりを色々いじる機会があったのでメモ。
ホスト一台だけで使うだけならともかく複数台ホストがある環境で運用しようという場合、 プライベートリポジトリを立ててそこから各ホストにイメージを配信したくなる。
幸いにしてプライベートリポジトリ自体がイメージとして配布されており、 鍵を用意して適切に設定することにより簡単にプライベートリポジトリを立てることができる。
SSL証明書を用意する
下記のコマンドと適当に設定項目を入力し、証明書や鍵ファイルを用意する。
$ openssl genrsa 2048 > server.key $ openssl req -new -key server.key > server.csr $ openssl x509 -days 3650 -req -signkey server.key < server.csr > server.crt
以上の手順でserver.key
・server.csr
・server.crt
という3つのファイルが生成できる。
リポジトリを証明書・鍵を指定して起動する
直にdockerコマンドで立ち上げるのも良いが、オプションが長くなるのでdocker-composeを用いる。
下記のようなディレクトリを作成し、先ほど生成した証明書ファイルも収めるものとする。
. ├── certs │ ├── server.crt │ ├── server.csr │ └── server.key ├── data └── docker-compose.yml
証明書周りを収めたcertsディレクトリ
とイメージの保管場所となるdataディレクトリ
を作成しておいた。
また、docker-compose.yml
として以下の記述をする。
registry: image: registry:2 restart: always ports: - 5000:5000 volumes: - $PWD/data:/var/lib/registry - $PWD/certs:/certs - /etc/localtime:/etc/localtime:ro environment: REGISTRY_HTTP_TLS_CERTIFICATE: /certs/server.crt REGISTRY_HTTP_TLS_KEY: /certs/server.key
あとはいつも通り$ docker-compose up -d
で起動する。
クライアントとなる各ホストに証明書を配布する
実際にDockerのコンテナを立ち上げる各ホストにも、リポジトリに接続するために先ほど生成した証明書ファイルserver.crt
を配置する必要がある。(もちろんリポジトリを起動してるホスト自身にも)
/etc/docker/certs.d/
以下(certs.dディレクトリ
が無ければ作る)に[ホスト名]:[ポート番号]
というディレクトリを作成し、
ca.crt
というファイル名に変更して保存する。
仮にホスト名がhost
だとして、/etc/docker/certs.d/host:5000/ca.crt
といった感じ。
使ってみる
登録
例えばubuntu
というイメージが既にあって、これをレジストリに登録するとする。
まずはtagコマンドで登録先を指定した形に直す。
$ docker tag ubuntu [HOST]:[PORT]/ubuntu
あとは普通にpushコマンドを叩くだけ。
$ docker push [HOST]:[PORT]/ubuntu
正しく動作していれば、dataディレクトリ
以下にイメージが格納されていることが確認できる。
取得
ここまでくれば後は同じことで、各サーバでpullコマンドを叩けば良い。
$ docker pull [HOST]:[PORT]/ubuntu
鍵の配置に問題がなければ、これでイメージを持ってくることができる。
その他メモ
今回は管理サーバ的なとこにデータを保管するモデルを考えていたけど、 例えばバックエンドにS3何かを指定することもできる。
で、特定のホストにリポジトリを立てるのではなくてそれぞれのホストで共通のS3を指定したリポジトリを立てるみたいな運用ケースもあるみたいだ。
タイトル内容とは若干ズレるけどマルチホスト運用について。
別のホストのコンテナではなく、単純にローカルネットワーク上の他のサーバを参照するには、
コンテナ起動時に--add-host
オプションを指定(docker-composeならextra-hosts項
を記述)すれば良いようだ。
ただこれも台数が多いと大変になってくるので、DNSを立ててそれを参照する方がスマートっぽい。
このへんはもう少し勉強してまとめる。

プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化
- 作者: WINGSプロジェクト阿佐志保,山田祥寛
- 出版社/メーカー: 翔泳社
- 発売日: 2015/11/20
- メディア: 大型本
- この商品を含むブログ (1件) を見る