SoftLayerでDocker環境を整えるコツ

2015年4月28日(火)
前佛 雅人(ぜんぶつ まさひと)

[PR]

前半はDockerの利点や導入方法について、後半はSoftLayerのオブジェクト・ストレージを有効活用する方法をご紹介します。

Dockerとは?

開発やテストに使う環境だけでなく、アプリケーションを動作する環境を、より速く、より簡単に使いたいと思ったことはありませんでしょうか。クラウド・コンピューティングや仮想化の環境を使うよりも、軽量かつ素早く利用するための基盤として、Dockerが注目を集めています。

仮想マシンの場合は、ゲストOSを立ちあげる必要があるため、メモリやハードディスクの容量を必要とします。一方のDockerは、Linuxコンテナ技術を用いてLinuxカーネル上に独立したOS環境を素早く構築できるため、仮想マシンの環境に比べて迅速に利用できます。また、Dockerfileという設定ファイルを用いる環境構築の自動化や、Docker Hubという公開リポジトリを通して、Dockerイメージを共有・管理する機能が提供されています。

どうしてSoftLayerでDockerを使うのか?

SoftLayerでDockerを使うメリットは大きく3つあります。

  • 仮想サーバーとベアメタル・サーバーの使い分けと、月額・時間課金を選べます
  • データセンター間の内部通信は高速かつ課金が発生しません
  • 標準のSSL-VPNを使って、安全にメンテナンスができます

順を追って詳しく見てきます。まず1つめは、仮想サーバーとベアメタル・サーバーを使い分けられる点です。Dockerの開発環境を複数人で使いたいとき、共用仮想サーバーは他の利用者による影響で、性能に対する懸念があります。そのような場合でも、SoftLayerであればシングルテナント環境のバーチャルサーバー(Private Node)や、物理サーバーであるベアメタル・サーバーも選択できます。加えて、SoftLayerはI/Oに対する課金が、仮想サーバーであれば5TB/月まで無料のため、利用金額の見通しが立てやすい利点があります。そのため、短期間の利用であれば時間での課金を、予め長期間の利用が想定される場合は、月額での課金を使い分けられます。

2つめは、SoftLayerのデータセンター間のプライベート・ネットワークには課金が発生しない点です。Dockerの開発がすすむと、Dockerイメージ用ファイルのやりとりや、本番環境へのデプロイが必要になります。このとき、異なるデータセンター間でやりとりする場合、トラフィックがどれだけ発生しても課金がありません。また、プライベート・ネットワーク間には広帯域の専用線で結ばれているため、インターネット上でやりとりするよりも高速にコンテナ用のイメージの転送が可能です。

3つめは、安全にメンテナンスができる点です。SoftLayerのサーバーは、起動すると自動的にパブリック・ネットワークとプライベート・ネットワークのIPアドレスが割り振られます。そのため、SoftLayerのサーバー上にDockerの環境を構築・操作する際に、SSL-VPNを経由することで、安全にメンテナンスを行えます。また、このVPN接続はアカウント毎に接続可能なサブネットを限定するようなアクセス制限も可能です。多くの人が開発に携わるような環境では、アクセス制限可能なVPN環境が提供されていることと、これらが無料で使えるのは魅力的と思われます。

Dockerのセットアップ

DockerはLinux標準の機能ではありません。そのため、使うためにはDockerのセットアップが必要です。各Linuxディストリビューションに対応したバイナリ・パッケージが配布されています。それぞれのOS上でインストール用のコマンドを実行して、手軽に環境をセットアップすることができます。仮想マシンまたはベアメタル・サーバーを起動したら、それぞれの環境にあわせて構築をお願いします。

RHEL7/CentOS7の場合

セットアップには配布されているパッケージを用います。

# yum update
# yum install docker        ← dockerパッケージのセットアップ
# systemctl enable docker   ← 起動時にdockerを自動起動する場合
# systemctl start docker    ← dockerデーモンの起動

CentOS7でfirewalldを使っている場合は注意が必要です。dockerはiptablesを使い内部ネットワークの制御を行います。そのため、firewalldの再起動や停止をしますと、dockerのiptables設定が無効化されてしまいます。dockerと併用する場合は、firewalldを起動したあと、dockerを起動します。

RHEL6/CentOS6の場合

標準ではパッケージが提供されていないため、EPELリポジトリのものを使います。

# yum update
# yum install epel-release  ←先にEPELリポジトリを有効化
# yum install docker-io     ←パッケージのセットアップ
# service docker start

Ubuntu Trusty 14.04 (LTS) (64-bit)の場合

Ubuntuによってメンテナンスされているものと、Docker社によってメンテナンスされているものの2つの方法があります。Ubuntu版よりもDocker版のほうが、新しいバージョンに対応したものが提供されています。

Ubuntu版

# apt-get update
# apt-get install docker.io ←docker.ioパッケージのセットアップ
# service docker start

Docker版

# apt-get update
# apt-get install curl
# curl -sSL https://get.docker.com/ubuntu/ | sudo sh
# service docker start

SoftLayerのオブジェクト・ストレージでDockerを活用する方法

docker-registryを使い、自分の仮想サーバーやベアメタル・サーバー上でレジストリを稼働させることができます。SoftLayerのオブジェクト・ストレージと連携することで、更に便利にDockerを扱えます。

Docker registryとSoftLayer

Dockerコンテナ・イメージを保管する場所は、ローカル環境だけではなく、公開レジストリのDockerHubが提供されています。しかし、DockerHubは海外のデータセンターにあるため、アップロードやダウンロードするには時間が掛かりがちです。一方のローカル環境上のDocker Registryであれば、コンテナ・イメージの取得(pull)や保存(push)がストレス無く行えます。

更にSoftLayerのオブジェクト・ストレージを使うことで、次のような利点があります。

  • オブジェクト・ストレージなのでデータ容量を気にする必要がありません
  • プライベート・ネットワーク内の通信は、転送料の課金対象外です
  • プライベート・ネットワーク内で安全にコンテナ・イメージの管理やアップロード・ダウンロードできます

オブジェクト・ストレージの利点は、何よりも容量を気にせずに利用できる点です。仮想サーバーや外部ストレージを使う場合であれば、容量の上限を心配する必要がありますし、実際に使用していなくても容量あたりの料金が必要です。オブジェクト・ストレージであれば、実際に使った容量分しか課金対象になりません。

さらにSoftLayerのオブジェクト・ストレージは、プライベート・ネットワーク内の通信料金が無料です。そのため、プライベート側から利用することで、コンテナ・イメージのアップロードやダウンロードを頻繁に行う場合も、料金を気にする必要はありません。

また、図3のように、Docker Registryがセットアップ済みのイメージ・テンプレート作成しておく方法も効果的です。コンテナを操作や開発時だけサーバーを起動し、作業が終わればオブジェクト・ストレージ上にコンテナ・イメージを格納することができます。

事前準備

SoftLayerのオブジェクト・ストレージのAPIを確認します。SoftLayerのポータルから「Storage」→「Object Storage」を選び、対象となるアカウントとデータセンターを選択します。切り替わった画面に「View Credentials」のリンクがありますので、ここをクリックすると「Username:」「API Key (Password):」が表示されますので、エディタ等に控えておきます。

また、同じ画面で「Add Container」をクリックし、Docker Registryが使用するファイルを保管するためのオブジェクト・ストレージ・コンテナを作成しておきます(例:docker-registry)。

Docker Registoryセットアップ手順

SoftLayerのオブジェクト・ストレージに対応したDocker Registoryを作成し、実際に動かすまでの流れを見ていきます。

まず、Docker-registryが動作するDockerイメージが提供されていますので、これをSoftLayer上で動くように調整します。任意の作業用ディレクトリを作成したあとに、ファイル名「Dockerfile」を作成し、内容は次の通りにします。

FROM registry:0.7.3
RUN pip install docker-registry-driver-swift==0.0.1
RUN sed -i '91i¥    swift_auth_version: _env:OS_AUTH_VERSION' /docker-registry/config/config_sample.yml

このDockerfileを使って、コンテナをビルドします。

$ sudo docker build -t registry-swift:0.7.3 .

作成したコンテナを使って、Docker Registryを起動します。初回実行時など、進行状況を確認するにはdocker run -it 〜と実行する方法が手軽です。デーモンとして常駐したい場合は-it-dに置き換えると便利です。

$ sudo docker run -it ¥
    -e SETTINGS_FLAVOR=swift ¥
    -e OS_AUTH_URL='https://tok02.objectstorage.service.networklayer.com/auth/v1.0' ¥
    -e OS_AUTH_VERSION=1 ¥
    -e OS_USERNAME='<オブジェクト・ストレージのUsername>' ¥
    -e OS_PASSWORD='<オブジェクト・ストレージのAPI Key>' ¥
    -e OS_CONTAINER='<オブジェクト・ストレージで作成したコンテナ名>' ¥
    -e GUNICORN_WORKERS=8 ¥
    -p 127.0.0.1:5000:5000 ¥
    registry-swift:0.7.3

Docker レジストリを試すには

先の手順の通り起動できれば、docker pushdocker pullコマンドにオブジェクト・ストレージを使うことができます。ここでは、先ほど作成したregistry-swiftイメージをpushしてみましょう。

docker tagコマンドを使い、ローカルのDocker Registryを意味する「127.0.0.1:5000」のタグをつけてからdocker pushを実行します。

$ sudo dokcer tag registry-swift:0.7.3 127.0.0.1:5000/registry-swift:0.7.3
$ sudo docker push 127.0.0.1:5000/registry-swift:0.7.3

pushしたイメージは、pullコマンドでダウンロードすることも可能です。

$ sudo docker pull 127.0.0.1:5000/registry-swift:0.7.3

まとめ

Dockerの開発環境はSoftLayer上で簡単に構築できるだけでなく、オブジェクト・ストレージと機能を組みあわせ、便利に運用することもできます。ご興味がありましたら、お試しいただければと思います。

参考情報

著者
前佛 雅人(ぜんぶつ まさひと)
クリエーションライン株式会社

Technology Evangelist
ホスティングサービスで運用保守サポートに携わった後、現職へ。サポート業務や新技術検証や開発業務を行う傍ら、実家で農作業のため東京と富山を往復する日々。趣味で監視や自動化に関するOSS検証や翻訳を行う。とりわけ運用・監視の省力化・最適化に興味。辛口の日本酒が大好き。
Twitter: @zembutsu (https://twitter.com/zembutsu)

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています