HyperLedger Fabric1.1 ComposerをDocker内のUbuntu上に構築してみた

#概要

Docker内のUbuntuに**HyperLedger Composer1.1**の環境を構築しました。いわゆるDocker in docker環境です。
aufsのファイルシステムの相性があり、かなり苦戦したのでメモです。
ポイントはDockerへの**aufs**ドライバーの導入と、**/var/lib/docker/aufs**の削除です。
これからはcomposerですね。composer-playgroundとか簡単すぎます。

#Docker設定
  Dockerにaufsのドライバーが必要なので、ここを参考に"storage-driver" : "aufs"を追加。https://blog.adachin.me/archives/8154
<img width="495" alt="スクリーンショット 2018-06-26 15.17.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/23175/128a231b-dd6a-4567-91a5-9de777d12d4a.png">

  ※※※※※※※インスタンス とイメージが消えるのでsaveなどで必要であればバックアップしておくこと。
  かなりのディスク容量を使うのでDockerのDISKサイズを100Gなどにリサイズしておく。Dockerのプロセスのアイコンからできます。
<img width="502" alt="スクリーンショット 2018-06-26 15.18.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/23175/370647be-7c51-c497-f11c-8e225b6d2696.png">


# Ubuntu環境インストール
```
  手順
     Ubuntu環境作成
      docker run --privileged=true -d --name hlc -p 10022:22 -p 8080:8080 -p 3000:3000 ubuntu:16.04 /sbin/init
      ログイン
        docker exec -it hlc  /bin/bash
      設定
        $ apt-get update
        $ apt-get install -y openssh-server vim unzip sudo curl software-properties-common
        $ passwd -> rootパスワードを設定する。rootなどに設定。
        $ vim /etc/ssh/sshd_config
        下記のように変更
          #PermitRootLogin prohibit-password
          PermitRootLogin yes
        $  /etc/init.d/ssh restart
```

# HyperLedgerインストール
  下記の手順はこのサイトを参考にしています。
　　　参考：https://qiita.com/kolinz/items/351e1d0accda5b0a723d

## Docker環境インストール

```
        $ sudo apt-get remove docker docker-engine docker.io
        $ sudo apt-get update
        $ sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
        $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
        $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
        $ sudo apt-get update
        $ sudo apt-get -y install docker-ce
        $ sudo docker -v
        $ sudo usermod -aG docker $(whoami)

        ログアウトし、再ログインします。
        $ exit
        $ docker exec -it hlc  /bin/bash
```

## Docker Composeを入れる

```

        $ cd
        $ sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
        $ sudo chmod +x /usr/local/bin/docker-compose
```

## Node.jsを入れる

```

        $ sudo apt-get update -y && sudo apt-get upgrade -y
        $ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
        $ sudo apt-get install -y nodejs gcc g++ make
        $ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
        $ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
        $ sudo apt-get update
        $ sudo apt-get install yarn
```

## 関連npmパッケージをインストール

```

        $ sudo npm install -g yo
        $ sudo npm install -g --unsafe-perm composer-cli@0.19.10 composer-rest-server@0.19.10 generator-hyperledger-composer@0.19.10 composer-playground@0.19.10
```

## Hyperledger Composer 1.1を導入。composer-playgroundの起動まで。

```

        $ cd
        $ vim ~/.bashrc で以下を登録
        export FABRIC_VERSION=hlfv11
        export DOCKER_CLIENT_TIMEOUT=2000
        export COMPOSE_HTTP_TIMEOUT=2000
        export FABRIC_START_TIMEOUT=15
        $ source ~/.bashrc 
        $ sudo rm -rf /var/lib/docker/aufs ※
        $ sudo service docker restart ※
        $ mkdir fabric && cd fabric
        $ curl -O https://raw.githubusercontent.com/hyperledger/composer-tools/master/packages/fabric-dev-servers/fabric-dev-servers.tar.gz
        $ tar -xvf fabric-dev-servers.tar.gz
        $ vim ~/fabric/fabric-scripts/hlfv11/composer/docker-compose.yml  でひらいて
          peer0.org1.example.com:
            environment:　
          に下記を追加する。ビジネスネットワークカードをdeployするときにTimeoutになる対策。
            - CORE_CHAINCODE_STARTUPTIMEOUT=1200s
        $ ./downloadFabric.sh
        $ ./startFabric.sh
        $ ./createPeerAdminCard.sh
        $ composer-playground

      ※dockerが起動しないときは下記を実行。dockerdで詳細なエラーが表示される。参考：https://christina04.hatenablog.com/entry/2015/12/25/105242
          $ sudo rm -rf /var/lib/docker/aufs
          $ sudo service docker restart

```