古いバージョンのブラウザーを使用しています。MSN を最適にご利用いただくために、サポートされているバージョンをご使用ください。

第46回 Dockerのプライベートレジストリを活用する(準備編)

ITmedia エンタープライズ のロゴ ITmedia エンタープライズ 2017/08/10
第46回 Dockerのプライベートレジストリを活用する(準備編): 【その他の画像】 © ITmedia エンタープライズ 提供 【その他の画像】

 前回は、Dockerプライベートレジストリの概要、そして、Dockerイメージの社内配信システムを採用している米国Hewlett Packard Enterprise(HPE)の事例をご紹介しました。今回は、Dockerイメージを配信するシステム(社内Dockerプライベートレジストリ)を社内LAN上に構築する具体的な方法を紹介します。

 以下は、社内配信用のDockerプライベートレジストリのシステム構成案です。システムのゴール、手段、メリット、想定ハードウェアとソフトウェアの構成を以下に示します。

ゴール

・社内に設置したDockerレジストリサーバから、社内の各部門に対して、Dockerイメージを配信、または、登録できる

手段

・Dockerプライベートレジストリサーバを1台構築する。利用者側は、Dockerエンジンが稼働できるとする

社内配信用のDockerプライベートレジストリのメリット

・ユーザーは、インターネットにアクセスしない環境においても、Dockerイメージの入手、アップロード、Dockerコンテナの利用が可能

・ユーザーにインターネットへのアクセスを制限すれば、DockerプライベートレジストリのDockerイメージのみを使わせるポリシーを定めることで、信頼性の低いDockerイメージの利用を制限できる

想定ハードウェア

・プライベートレジストリサーバ(HPE Apollo 4200 Gen9サーバ×1台)

・利用するクライアントマシン(Dockerコンテナが稼働するマシン×1台以上)

必要なソフトウェア

・Dockerホスト用のLinux OS

・Dockerエンジン

 社内LAN上に接続されているクライアントマシン群に、Dockerプライベートレジストリを使って、Dockerイメージを配信するシステムを構築する手順は以下のとおりです。

1. ホストOS(Linux)にDockerエンジンをインストール

2. DockerプライベートレジストリをDockerコンテナとして起動

3. プライベートレジストリに登録するためのDockerイメージをインターネット経由で入手

4. 入手したDockerイメージにタグを付与

5. タグを付与したDockerイメージをDockerプライベートレジストリに登録

6. Dockerプライベートレジストリに登録されたDockerイメージをクライアントから入手

7. Dockerプライベートレジストリに登録されたDockerイメージをクライアント上で起動

 DockerプライベートレジストリサーバのホストOSは、CentOS 7.3.1611(以下、CentOS 7.3と表記)とします。また、Dockerエンジンは、2017年7月時点での最新バージョンである「17.06.0-ce」(DockerエンジンのCommunity Edition)を使用します。各マシンの役割、ソフトウェア構成、ネットワーク構成は、以下のとおりです。

●社内プライベートレジストリサーバにDockerエンジンをインストール

 まずは、社内に設置した物理サーバ上でDockerプライベートレジストリを構築します。社内プライベートレジストリは、dockerコンテナで稼働しますので、Dockerエンジンをインストールします。今回は、最新のCommunity EditionのDockerエンジンをインストールします。Dockerエンジンの最近のバージョン(17.XX-X-ce)では、開発者向けのものやエンタープライズ向けのものなど、エディションによってインストール方法が異なります。

 以下では、Community EditionのDockerエンジンをインストールする手順を説明します。

 まず、Dockerプライベートレジストリコンテナを稼働させるDockerエンジンのホストOS、CentOS 7.3を最新版に更新します。ホストOSがプロキシサーバ経由でインターネットにアクセスする場合は、ホストOS上の /etc/yum.conf ファイルにプロキシサーバの設定を記述してから、最新版に更新します。以下では、Dockerプライベートレジストリサーバのコマンドプロンプトを「dpr #」で表すとします。

dpr # echo "proxy=http://proxy.your.site.com:8080" >> /etc/yum.conf

dpr # yum makecache fast && yum update -y && reboot

 次に、Dockerエンジンのインストールに必要なパッケージをインストールします。

dpr # yum install -y yum-utils device-mapper-persistent-data lvm2

 インストールが終わったら、Community EditionのDockerエンジンのYUMリポジトリを、DockerプライベートレジストリサーバとなるLinux OS上で登録します。

dpr # yum-config-manager \

>--add-repo \

>https://download.docker.com/linux/centos/docker-ce.repo

●Community Editionの「Edge」と「Stable」

 Community EditionのDockerエンジンには、毎月リリースされる「Edge」と、約3カ月ごとに安定版としてリリースされる「Stable」があります。Edgeは、バグ修正やセキュリティ対策が施されたものになります。もしEdgeで提供されるDockerエンジンをインストールしたい場合は、以下のようにEdgeのリポジトリを有効にします。

dpr # yum-config-manager --enable docker-ce-edge

 Edgeを無効にし、安定版のStableのみを利用する場合は、Edgeのリポジトリを無効にしておきます。今回は、Edgeを無効にします。

dpr # yum-config-manager --disable docker-ce-edge

 インストール可能なDockerエンジンをリストアップします。Edgeのリポジトリを有効にするか無効にするかで表示が異なりますので、注意深く確認してください。

dpr # yum list docker-ce.x86_64 --showduplicates

...

docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable

docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable

docker-ce.x86_64 17.03.2.ce-1.el7.centos docker-ce-stable

docker-ce.x86_64 17.06.0.ce-1.el7.centos docker-ce-stable

 上記より、安定版のDockerエンジンがインストール可能であることがわかります。

●DockerエンジンのRPMパッケージのインストール

 ここまでの作業で、Dockerエンジンをインストールする準備が整いましたので、yumコマンドを使ってDockerエンジンをインストールします。

dpr # yum makecache fast & yum install -y docker-ce

 DockerエンジンのRPMパッケージをインストールしたら、Dockerエンジンのプロキシサーバを設定します。プロキシサーバを経由せずにインターネットにアクセスする場合は、この設定は不要です。

dpr # mkdir /usr/lib/systemd/system/docker.service.d/

dpr # vi /usr/lib/systemd/system/docker.service.d/http-proxy.conf

[Service]

Environment="HTTP_PROXY=http://proxy.your.site.com:8080"

Environment="HTTPS_PROXY=https://proxy.your.site.com:8080"

●Dockerエンジンの起動とバージョン確認

 Dockerデーモンを起動し、Dockerエンジンのバージョンを確認します。

dpr # systemctl daemon-reload

dpr # systemctl start docker

dpr # systemctl status docker

dpr # systemctl enable docker

dpr # # docker version

...

Server:

Version: 17.06.0-ce

API version: 1.30 (minimum version 1.12)

Go version: go1.8.3

Git commit: 02c1d87

Built: Fri Jun 23 21:21:56 2017

OS/Arch: linux/amd64

Experimental: false

●Dockerコンテナの起動のテスト

 以上で、Dockerエンジンが稼働できたはずです。では実際にDockerイメージを入手して、コンテナを起動できるかどうかをテストします。以下は、CentOS 6.9ベースのDockerイメージを入手し、Dockerコンテナを起動した後、コンテナがCentOS 6.9ベースかどうかを確認する例です。

dpr # docker pull centos:6.9

dpr # docker run -it --rm --name c1 centos:6.9 cat /etc/redhat-release

...

CentOS release 6.9 (Final)

 CentOS 6.9ベースのDockerコンテナが起動することが確認できました。これで、Community EditionのDockerエンジンが稼働する環境が整いました。

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

 Dockerエンジンが稼働する環境が整いましたので、いよいよ、Dockerプライベートレジストリを起動します。Dockerプライベートレジストリは、Dockerイメージが提供されており、docker runコマンドによってDockerコンテナとして稼働させられます。以下は、Dockerプライベートレジストリの起動例です。

dpr # docker run \

-d \ ←バックグラウンドで起動

-p 5000:5000 \ ←ホストOSのポート番号とコンテナのポート番号の対応付け

-v /hostdir/registry:/var/lib/registry \ ←ホストとコンテナのディレクトリ対応付け

--restart=always \ ←コンテナの再起動を常に試みる

--name registry01 \ ←コンテナ名

registry:latest ←プライベートレジストリのDockerイメージ

 完了したら、DockerプライベートレジストリのDockerイメージがダウンロードされて、Dockerコンテナとして起動しているかを確認します。

dpr # docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

registry latest c2a449c9f834 2 weeks ago 33.2MB

...

dpr # docker ps -a

CONTAINER ID IMAGE COMMAND PORTS NAMES

4fccac21b772 registry:latest "/entrypoint.sh /e..." 0.0.0.0:5000->5000/tcp registry01

 Dockerプライベートレジストリは、Dockerエンジンが稼働するホストOSの5000番ポートとコンテナ内の5000番ポートを使用します。そのため、docker run実行時に「-p 5000:5000」を指定しています。また、Dockerプライベートレジストリコンテナ内の /var/lib/registry ディレクトリを、ホストOSの /hostdir/registry ディレクトリに対応付けます。これにより、Dockerプライベートレジストリコンテナ内に保管されるレジストリ情報(Dockerイメージなどの情報)は、ホストOS側の /hostdir/registry ディレクトリに保存されるため、Dockerプライベートレジストリコンテナが削除されても、次に起動する際には、レジストリ情報をそのまま引き継いで利用することができます。

 指定するDockerイメージは、「registry:latest」にします。上記の場合、Dockerイメージ「registry:latest」から、Dockerプライベートレジストリのコンテナ「registry01」を起動しています。

 以上で、Dockerプライベートレジストリを稼働させることができました。ぜひ独自のプライベートレジストリを作る際の参考にしてください。次回は実際にプライベートレジストリにDockerイメージを登録したり、プライベートレジストリからDockerイメージの入手したりする方法を解説します。

●古賀政純(こがまさずみ)

日本ヒューレット・パッカード オープンソース・Linuxテクノロジーエバンジェリスト。兵庫県伊丹市出身。1996年頃からオープンソースに携わる。2000年よりUNIXサーバのSEおよびスーパーコンピューターの並列計算プログラミング講師、SIを経験。2006年、米国ヒューレット・パッカードからLinux技術の伝道師として「OpenSource and Linux Ambassador Hall of Fame」を2年連続受賞。プリセールスMVPを4度受賞。現在は日本ヒューレット・パッカードにて、Hadoop、Spark、Docker、Linux、FreeBSDなどのサーバ基盤のプリセールスSE、文書執筆を担当。日本ヒューレット・パッカードが認定するオープンソース・Linux テクノロジーエバンジェリストとして、メディアでの連載記事執筆、講演活動なども行っている。Red Hat Certified Virtualization Administrator, Novell Certified Linux Professional, Red Hat Certified System Administrator in Red Hat OpenStack, Cloudera Certified Administrator for Apache Hadoopなどの技術者認定資格を保有。著書に「Mesos実践ガイド」「OpenStack 実践ガイド」「Docker 実践ガイド」「CentOS 7実践ガイド」「Ubuntu Server実践入門」などがある。趣味はレーシングカートとビリヤード。古賀氏の最新記事が読めるブログはこちら。

ITmedia エンタープライズの関連記事

image beaconimage beaconimage beacon