まだプログラマーですが何か?

プログラマーネタとアスリートネタ中心。たまに作成したウェブサービス関連の話も http://twitter.com/dotnsf

タグ:docker

オープンソースのブロックチェーン環境である Hyperledger Fabric に待望の V1.0 がリリースされ、同時に初の公式版リリースとなりました:
http://hyperledger-fabric.readthedocs.io/en/latest/releases.html


オープンソースなので、(前提環境さえあれば)誰でも同環境をダウンロードして構築することができます。というわけで、以下ではその導入手順を紹介します。

【前提環境】
まず前提として以下の環境が必要になります:
 Docker: 17.x for Linux or Mac OS X
 Docker-Compose
 Node.js V6.x(V8.x は未対応)

Docker は 17.x であればプラットフォームは問いません。自分は Ubuntu 14.04 および Mac OS X で確認しました。

今回紹介する方法では Fabric Composer のコマンドラインインターフェースを使って環境セットアップを行います。この Fabric Composer コマンドラインインターフェース(composer-cli)の導入前提として Node.js 環境が必要です。なお Node.js V6.x を用意してください、V8.x には未対応です。

【Hyperledger Fabric コマンドラインインターフェースを導入】
Node.js と同時に導入する npm を使って composer-cli をインストールします:
$ sudo npm install -g composer-cli
※Node.js V8.x だとここでコケます。Node.js V6 環境で行ってください。


【Hyperledger Fabric サポートツールを導入】
Hyperledger Fabric V1.0 環境を docker 内に構築するためのツールをダウンロード&展開します。以下の例では fabric というフォルダを作ってその中にダウンロード&展開していますが、ここは作業用ディレクトリなので任意の空フォルダで構いません:
$ mkdir fabric (作業用フォルダ)
$ cd fabric
$ curl -O https://raw.githubusercontent.com/hyperledger/composer-tools/master/packages/fabric-dev-servers/fabric-dev-servers.zip
$ unzip fabric-dev-servers.zip

【サポートツールを使って Hyperledger Fabric V1.0 環境を導入】

展開したサポートツールを使って Hyperledger Fabric V1.0 (の docker イメージ)をダウンロードして、実行します(docker サービスが稼働している必要があります):
$ ./downloadFabric.sh
$ ./startFabric.sh

ここまでの作業で Hyperledger Fabric V1.0 が起動しました! docker コマンドでこの時点での稼働サーバーの(プロセスの)様子を確認します(青字が出力内容):
$ docker ps
CONTAINER ID        IMAGE                                     COMMAND                  CREATED             STATUS              PORTS                                            NAMES
d2561aba32f0        hyperledger/fabric-peer:x86_64-1.0.0      "peer node start -..."   22 minutes ago      Up 22 minutes       0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp   peer0.org1.example.com
b189b5837328        hyperledger/fabric-couchdb:x86_64-1.0.0   "tini -- /docker-e..."   22 minutes ago      Up 22 minutes       4369/tcp, 9100/tcp, 0.0.0.0:5984->5984/tcp       couchdb
5dc8e344f9f3        hyperledger/fabric-ca:x86_64-1.0.0        "sh -c 'fabric-ca-..."   22 minutes ago      Up 22 minutes       0.0.0.0:7054->7054/tcp                           ca.org1.example.com
5552ed31eb7d        hyperledger/fabric-orderer:x86_64-1.0.0   "orderer"                22 minutes ago      Up 22 minutes       0.0.0.0:7050->7050/tcp                           orderer.example.com

1つのピア(peer0.org1.example.com)や、CA、CouchDB(Cloudant) などが docker 上で稼働していることが確認できました。


【デフォルトプロファイルの作成】
最後に Composer を使ってデフォルトのプロファイルを作成します。これもサポートツールを使って実行します:
$ ./createComposerProfile.sh

【Hyperledger Fabric V1.0 の停止】
サービスを停止する場合もサポートツールで用意されているコマンドを使います:
$ ./stopFabric.sh

このコマンドを実行した後に再度 docker プロセスを確認すると、先程まで動いていたサーバーが止まっていることが確認できます:
$ docker ps
CONTAINER ID        IMAGE                                     COMMAND                  CREATED             STATUS              PORTS                                            NAMES


というわけで、Docker (+Docker Compose) 環境があれば簡単に Hyperledger Fabric V1.0 が動かせるようになりました!

ここまでの内容だと、単に Hyperledger Fabric v1.0 を使ったブロックチェーンのネットワークを動かすまでの説明であって、UIとかで動いている様子を見れるわけではないのでちとわかりにくい部分があるかもしれません。そのあたりやアプリケーション開発に関してはおいおいと。。


コンテナ環境のスタンダードともいえる docker が、いつの間にかラズパイでも動くようになってました:
DOCKER COMES TO RASPBERRY PI

2017070701


動くようになった当初は導入方法も(コマンドが用意されたり、専用イメージが用意されたり、・・)色々あったようですが、現状では IA 環境と同様の方法でインストールできるようになっていました。具体的にはこの(curl と sh を使った)コマンドだけで導入できます:
$ curl -sSL https://get.docker.com | sh

ただ、この方法で導入しただけだと root ユーザーでないと動かせません。通常の(非 root )ユーザーのままで docker を使うには、そのユーザーを docker グループに所属させる必要があります。具体的には以下のコマンドを実行した上で再ログインすると有効になります(pi ユーザーの場合の例です):
$ sudo usermod -aG docker pi

実際にいくつかのコマンドを実行してみました。まずは docker 環境の確認:
$ docker info
Containers: 1
 Running: 0
 Paused: 0
 Stopped: 1
Images: 2
Server Version: 17.05.0-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 9048e5e50717ea4497b757314bad98ea3763c145
runc version: 9c2d8d184e5da67c95d601382adf14862e4f2228
init version: 949e6fa
Kernel Version: 4.9.28-v7+
Operating System: Raspbian GNU/Linux 8 (jessie)
OSType: linux
Architecture: armv7l
CPUs: 4
Total Memory: 923.4MiB
Name: raspberrypi
ID: TI35:OH7M:MCCS:PUBJ:RFNY:O2LP:MA6F:CECD:3BUW:7NFL:LSV2:A3FO
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

WARNING: No swap limit support
WARNING: No cpu cfs quota support
WARNING: No cpu cfs period support
WARNING: No cpuset support

↑docker 17.05 が動いていることが分かりました。あと分かっていたことですがメモリは 1GB ・・

ラズパイ(というか ARM )で使えるコンテナを探してみました:
$ docker search armhf-
NAME                                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
container4armhf/armhf-alpine                       Automatically built base images of Alpine ...   67                   [OK]
container4armhf/armhf-busybox                      Automated build of Busybox for armhf devic...   8                    [OK]
orax/alpine-armhf                                  Daily built Alpine-Linux Docker image for ...   7                    [OK]
forumi0721alpinearmhf/alpine-armhf-transmission    alpine-armhf-transmission                       3                    [OK]
forumi0721alpinearmhf/alpine-armhf-minidlna        alpine-armhf-minidlna                           3                    [OK]
forumi0721alpinearmhf/alpine-armhf-nginx           alpine-armhf-nginx                              2                    [OK]
forumi0721alpinearmhf/alpine-armhf-tvheadend       alpine-armhf-tvheadend                          2                    [OK]
forumi0721alpinearmhf/alpine-armhf-jenkins         alpine-armhf-jenkins                            2                    [OK]
forumi0721alpinearmhfbuild/alpine-armhf-gpio-bpi   alpine-armhf-gpio-bpi                           1                    [OK]
forumi0721alpinearmhf/alpine-armhf-gogs            alpine-armhf-gogs                               1                    [OK]
forumi0721alpinearmhf/alpine-armhf-samba           alpine-armhf-samba                              1                    [OK]
forumi0721alpinearmhf/alpine-armhf-owncloud        alpine-armhf-owncloud                           1                    [OK]
forumi0721alpinearmhf/alpine-armhf-vsftpd          alpine-armhf-vsftpd                             1                    [OK]
forumi0721alpinearmhf/alpine-armhf-postgresql      alpine-armhf-postgresql                         1                    [OK]
forumi0721alpinearmhf/alpine-armhf-wordpress       alpine-armhf-wordpress                          1                    [OK]
forumi0721alpinearmhfbuild/alpine-armhf-netatalk   alpine-armhf-netatalk                           1                    [OK]
forumi0721alpinearmhf/alpine-armhf-mariadb         alpine-armhf-mariadb                            1                    [OK]
forumi0721alpinearmhf/alpine-armhf-certbot         alpine-armhf-certbot                            1                    [OK]
forumi0721alpinearmhf/alpine-armhf-noip-curl       alpine-armhf-noip-curl                          0                    [OK]
forumi0721alpinearmhf/alpine-armhf-nodejs          alpine-armhf-nodejs                             0                    [OK]
forumi0721alpinearmhf/alpine-armhf-scepg           alpine-armhf-scepg                              0                    [OK]
forumi0721archarmhf/arch-armhf-dev                 arch-armhf-dev                                  0                    [OK]
forumi0721ubuntuarmhf/ubuntu-armhf-dev             ubuntu-armhf-dev                                0                    [OK]
forumi0721alpinearmhf/alpine-armhf-dev             alpine-armhf-dev                                0                    [OK]
forumi0721debianarmhf/debian-armhf-dev             debian-armhf-dev                                0                    [OK]


そんなに数は多くないけど、nginx やら jenkins やら wordpress やら mariadb やら・・・基本的なのは揃ってそうです。


ラズパイはメモリが 1GB しかないので、そもそも docker を動かすにはいろいろ厳しい環境だとは思いますが、一方でケースや SD カード含めて 6~7000 円程度で docker 環境を揃えることができてしまう、ということでもあります。今度はこれのクラスタリングにも挑戦してみようかな・・・

Raspberry Pi3 Model B ボード&ケースセット 3ple Decker対応 (Element14版, Clear)




IBM Bluemix からも提供されている NoSQL 型データベースの DBaaS "Cloudant" の開発者向けエディションが Docker イメージでの無料提供が開始されました:
https://hub.docker.com/r/ibmcom/cloudant-developer/

2016091004


1インスタンスでスケーリングなし&サポートもなし、という条件は付きますが、IBM Bluemix などのアプリケーション開発者がローカル環境だけでシングルテナントの Cloudant の環境を使うことができるようになります。以下、その手順を紹介します。

まず利用にあたり、docker 1.9 以上が必要です。RHEL/CentOS の 6.x の場合は docker 1.7 までしかサポートされていないため、バージョン7以上を用意する必要があります。

docker 環境が用意できたら、以下のコマンドで開発者向け Cloudant のイメージを pull します:
# docker pull ibmcom/cloudant-developer

そして以下のコマンドでローカル環境上にコンテナを作り、起動します:
# docker run --privileged --detach --volume cloudant:/srv --name cloudant-developer --publish 8080:80 --hostname cloudant.dev ibmcom/cloudant-developer

初回起動時のみ、ライセンス規約に同意する必要があります。以下のコマンドを実行してライセンス画面を表示します:
# docker exec -ti cloudant-developer cast license --console

すると以下の様なライセンス内容がコンソールに表示されます。同意する場合は "1" を入力してください:

2016091001


また、これも最初の1回だけ利用前にデータベースを初期化する必要があります。初期化は以下のコマンドを実行します:
# docker exec cloudant-developer cast database init -v -y -p pass

これで準備は完了です、簡単ですね。実際にローカル環境の Cloudant を利用するにはウェブブラウザで以下のアドレスにアクセスします:
http://(docker が動いているマシンのIPアドレス):8080/dashboard.html

すると以下の様なログインが画面が現れます。デフォルトでは
 Username = admin
 Password = pass
という ID & パスワードがセットされているので、この値を入力してログインしてください:

2016091002


ログインが成功すると、見慣れた Cloudant のダッシュボード画面が表示されます。後はいつもと一緒です。これでいつでもローカルで手軽に使える Cloudant 環境が用意できました:

2016091003

コンテナ型の仮想環境の1つで、最近人気の Docker を CentOS で導入し、Apache HTTPD サーバーを動かしてみるまでの手順を紹介します。以下の例ではホストの CentOS は6.6(x86_64) を使っています。
docker-whale-home-logo


ところで、最近流行りの Docker を簡単に説明しておきます。上記で「仮想環境の1つ」と紹介しましたが、いわゆる VM を使いません。その意味では「完全な意味での仮想マシン、ではない仮想環境」です。仮想マシンでは1台のサーバーをまるごと仮想化して、そこで動く OS を選ぶこともできるし、その OS 内にインストールされるミドルウェアやアプリケーションソフトウェアも完全に仮想マシンごとに分離されて独立しています。その代わり、例えば起動時などはこの仮想マシンをブートプロセスから起動することになるので通常のマシンと同等の時間がかかりますし、1台の仮想マシンを動かすのに必要なリソースは仮想環境であってもなくても変わりません。 一方、コンテナ型の Docker の場合、仮想環境はホストマシンの1プロセスとして(プロセス空間やファイル空間が制限された状態で)動きます。そのため OS ごと動かすハイパーバイザー型(VM型)の仮想環境と比べてオーバーヘッドが少なく、軽量に動かすことができる、というメリットがあります。 また上記のように OS の1プロセスとして動くので、例えばホストOS自体が仮想環境である Amazon EC2 や VPS など、(ハイパーバイザー型)仮想サーバーの上で更に Docker を動かす、といったことも可能です。 その代わり OS を自由に選ぶということはできず、Linux(Ubuntu, RHEL, CentOS, ..) に限られる、という制約があります。


ではこの Docker 環境を CentOS 上で整えるための導入手順を紹介します。といっても意外と簡単です。

まずは docker のインストールです。CentOS 向けには EPEL リポジトリから提供されているので、必要であれば EPEL リポジトリの追加から行います:
# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm (EPELリポジトリ追加)
# yum -y install docker-io (Dockerインストール)
# /etc/init.d/docker start (Docker 起動)
# chkconfig docker on (Docker 自動起動ON)
これでインストール及び起動まで完了です。KVM などと比べると超簡単。


実際に Docker を使ってみます。公式 centos イメージの centos6 をインストールして、コンテナ内で /etc/redhat-release の内容を確認してみます:
# docker run -it centos:centos6 cat /etc/redhat-release
  :
(初回実行時はここで公式 centos6 イメージのダウンロードが開始される)
  :
CentOS release 6.6 (Final)

というわけで、現時点では公式 centos6 イメージが 6.6 を使っていることが分かりました。

インストールも動作確認もできましたが、せっかくなのでもう少し実用的な作業を紹介しましょう。コンテナ内のシェルコンソールにログインして Apache HTTPD でもインストールしてみましょうか。

まずはコンテナ内のシェル(/bin/bash)を起動し、Apache HTTPD をインストール&起動し、index.html ファイルを作成します:
# docker run -it centos:centos6 /bin/bash 
(ここから上はホストOS)
(ここから下はコンテナ内)
# yum install -y httpd
# /etc/init.d/httpd start
# echo "Hello CentOS 6 on Docker" > /var/www/html/index.html

更にコンテナ内の IP アドレスを確認します:
# ifconfig
eth0   Link encap:Ethernet  HWaddr 02:42:AC:11:00:03
       inet addr:172.17.0.3  Bcast:0.0.0.0  Mask:255.255.0.0 ←この例だと172.17.0.3 がコンテナのアドレス
       inet6 addr: fe80::42:acff:fe11:3/64 Scope:Link
             :
# exit
(ここから上はコンテナ内)
(ここから下はホストOS)
# 

IP アドレスが分かったのでホストOSからブラウザでアクセスしてみます:
2014120701


ちゃんと動いてますね。Apache HTTPD の導入も成功しました。Apache HTTPD 以外のソフトを導入する場合も同様です。
 

このページのトップヘ