[開発] Hyperledger Fabric Starter Kit を Vagrant 使わずに動かす-鯨手引き編

鯨手引(ついでに蛸も少し)

// Index
¦ - Dockerの概念
¦ - 鯨の骨組み
¦ - 必須条件
¦ - 鯨コマンド
¦ - 鯨の断舎利
¦ - 蛸コマンド
¦ (最初しか参照しない情報)
¦ - 鯨を入れる前に①(バージョン確認)
¦ - 鯨を入れる前に②(OSバージョン確認)
¦ - 鯨のインストール
¦ - 鯨からハローワールド
¦ - Docker@Ubuntu用の小細工
¦ - 蛸を入れる前に(バージョン確認)
¦ - 蛸のインストール
//

―――――――――――――――――――――――――
1
Dockerの概念
詳細はGoogleに山ほど転がっているので割愛。

―――――――――――――――――――――――――
2
鯨の骨組み
https://docs.docker.com/engine/understanding-docker/
Dockerはクラサバ構成。
Docker Daemonがサーバで、Docker CLIがクライアント。両者とも母国語はGo言語。
サーバをクライアントがラップしているイメージ。サーバ/クライアント間はREST APIで会話。


―――――――――――――――――――――――――
3
必要条件
①OS条件は公式ページをご参照あれ:https://docs.docker.com/engine/installation/
Goがインストールされていること
③Dockerがインストールされていること

―――――――――――――――――――――――――
4
鯨コマンド
王道:DockerHubからbaseimageを取得(pull)→Dockerfileを用意して毛を生やした独自dockerimageを作成(build)→コンテナを生成(create)→コンテナ起動(start)


// * 余談:Goの環境変数は別にDocker的には必要ない
$ export GOPATH=$HOME/gows
$ export PATH=$PATH:$GOPATH/bin
* //

①大前提:Dockerグループへの加入 → 後述の「Docker@Ubuntu用の小細工」を参照

②イメージ検索
$ docker search hyperledger | more
同じ情報をweb経由でDockerHubで見れる
https://hub.docker.com/explore/
公式イメージと単なる個人の公開イメージが見れる。個人の非公開イメージは表示されない。

③イメージ取得
$ docker pull repo:tag
該当するイメージをローカルに複製する。
Tagを指定しない場合はデフォルトでlatestタグが適用される。

④保持するイメージ一覧
$ docker images

⑤Dockerfile編集
$ cd myWorkFolder
$ touch Dockerfile
$ vi Dockerfile
:w
:q
$ rm Dockerfile
$ rm –d myFolder
Touch でファイル作成し、viでファイルを開き、wで保存し、qでファイルを閉じる。
不要になればrmでファイルを消すなりディレクトリごと削除する。

⑥新規イメージ作成
$ cd myWorkFolder
Build[TODO]
同フォルダ配下のDockerfileが参照される

⑦新規コンテナの生成
$ docker ps –a
既存する全コンテナを確認してから
$ docker create --name imageNameOrImageId repo:tag
新規コンテナの生成
$ docker ps –a
再度、既存コンテナ一覧を見ると1つコンテナが増えている筈

⑧コンテナの起動
$ docker start containerId
Startでコンテナ起動。

⑨新規コンテナの生成&&起動
$ docker run imageId
Runするとコンテナ生成と起動が同時に行われる

―――――――――――――――――――――――――
5
鯨も断舎利
①心得
子を消さずに親を消そうとするとエラーになる為、
コンテナ停止→コンテナ削除→イメージ削除 の順序で実施すること。

②コンテナの整理
稼働中のコンテナの確認
$ docker ps
停止中のコンテナの確認
$ docker ps -a
コンテナのIDだけ表示させる場合
$ docker ps -a -q
不要なコンテナの削除
$ docker rm {コンテナID1} {コンテナID 2}
全コンテナの一括削除
$ docker rm `docker ps -a -q`

③イメージの削除
既存イメージの確認
$ docker images
イメージの削除 (複数指定不可)
$ docker rmi [イメージID]

―――――――――――――――――――――――――
6
蛸コマンド
①起動
docker-composeファイルの横で、
$ docker-compose up -d

②停止
$ docker-compose stop

―――――――――――――――――――――――――
7
鯨を入れる前に①(バージョン確認)
入れる前に、既存するかを確認する
バージョン確認(簡易表示)
$ docker --version
インストールされていない場合
|user1@VM01:~$ docker --version
|The program 'docker' is currently not installed. You can install it by typing:
|sudo apt install docker.io

インストールされている場合
|user1@VM01:~$ docker --version
|Docker version 1.12.2, build bb80604

バージョン確認 (詳細情報付き)
$ docker version
|user1@VM01:~$ docker version
|Client:
| Version: 1.12.1
| API version: 1.24
Go version: go1.6.3
| Git commit: 23cf638
| Built: Thu Aug 18 05:33:38 2016
| OS/Arch: linux/amd64
|Server:
| Version: 1.12.1
| API version: 1.24
Go version: go1.6.3
| Git commit: 23cf638
| Built: Thu Aug 18 05:33:38 2016
| OS/Arch: linux/amd64

―――――――――――――――――――――――――
8
鯨を入れる前に②(OSバージョン確認)
入れる前に、OSが対応されているかを確認する

OSのバージョンの確認
$ lsb_release -a
|root@VM01:/home/user1# lsb_release -a
|No LSB modules are available.
|Distributor ID: Ubuntu
|Description: Ubuntu 16.04 LTS
|Release: 16.04
|Codename: xenial

Ubuntuのbit確認
$ arch
|user1@VM01:~$ arch
|x86_64

カーネルの確認
$ uname -r
|root@VM01:/home/user1# uname -r
|4.4.0-28-generic

―――――――――――――――――――――――――
9
鯨のインストール
方法いろいろ。apt-getやらwgetやらcurlやら。

// * 予備知識
¦aptとyumはパッケージのインストールなどを行うパッケージ管理ソフト。
¦前者はDebian系OS用で、後者はRedHat系OS用。
¦wgetとcurlはWebからファイル取得するファイルダウンローダー的役割
¦前者がHTTPやFTP経由で再帰的にディレクトリ/ファイルをダウンロードするのに対し、
¦後者はTP, FTPS, HTTP, HTTPS, GOPHER, TELNET等のプロトコルに対応した通信ライブラリ。語源はClient for URLs。* //

□wgetでインストールする場合
wgetの取得 (Azure/Ubuntuの場合、デフォで入ってるので不要)
$ sudo apt-get install wget
|user1@VM01:~$ sudo apt-get install wget
|Reading package lists... Done
|Building dependency tree
|Reading state information... Done
|wget is already the newest version (1.17.1-1ubuntu1.1).
|0 upgraded, 0 newly installed, 0 to remove and 116 not upgraded.

Wgetでdockerをget
$ wget -qO- https://get.docker.com/ | sh
|user1@VM01:~$ wget -qO- https://get.docker.com/ | sh
|apparmor is enabled in the kernel and apparmor utils were already installed
|+ sudo -E sh -c apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
|Executing: /tmp/tmp.7EYn46C2gh/gpg.1.sh --keyserver
|hkp://ha.pool.sks-keyservers.net:80
|--recv-keys
|58118E89F3A912897C070ADBF76221572C52609D
|gpg: requesting key 2C52609D from hkp server ha.pool.sks-keyservers.net
|gpg: key 2C52609D: public key "Docker Release Tool (releasedocker) " imported
|gpg: Total number processed: 1
|gpg: imported: 1 (RSA: 1)
|+ break
|+ sudo -E sh -c apt-key adv -k 58118E89F3A912897C070ADBF76221572C52609D >/dev/null
|+ sudo -E sh -c mkdir -p /etc/apt/sources.list.d
|+ dpkg --print-architecture
|+ sudo -E sh -c echo deb \[arch=amd64\] https://apt.dockerproject.org/repo ubuntu-xenial main > /etc/apt/sources.list.d/docker.list
|+ sudo -E sh -c sleep 3; apt-get update; apt-get install -y -q docker-engine
|Hit:1 http://azure.archive.ubuntu.com/ubuntu xenial InRelease
|Hit:2 http://azure.archive.ubuntu.com/ubuntu xenial-updates InRelease
|Hit:3 http://azure.archive.ubuntu.com/ubuntu xenial-backports InRelease
|Get:4 http://security.ubuntu.com/ubuntu xenial-security InRelease [94.5 kB]
|Get:5 https://apt.dockerproject.org/repo ubuntu-xenial InRelease [30.2 kB]
|Get:6 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages [2,478 B]
|Fetched 127 kB in 0s (134 kB/s)
|Reading package lists... Done
|Reading package lists...
|Building dependency tree...
|Reading state information...
|The following additional packages will be installed:
| aufs-tools cgroupfs-mount libltdl7
|Suggested packages:
| mountall
|The following NEW packages will be installed:
| aufs-tools cgroupfs-mount docker-engine libltdl7
|0 upgraded, 4 newly installed, 0 to remove and 116 not upgraded.
|Need to get 19.4 MB/19.4 MB of archives.
|After this operation, 102 MB of additional disk space will be used.
|Get:1 http://azure.archive.ubuntu.com/ubuntu xenial/universe amd64 cgroupfs-mount all 1.2 [4,970 B]
|Get:2 http://azure.archive.ubuntu.com/ubuntu xenial/main amd64 libltdl7 amd64 2.4.6-0.1 [38.3 kB]
|Get:3 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 docker-engine amd64 1.12.2-0~xenial [19.3 MB]
|Fetched 19.4 MB in 1s (13.1 MB/s)
|Selecting previously unselected package aufs-tools.
|(Reading database ... 72104 files and directories currently installed.)
|Preparing to unpack .../aufs-tools_1%3a3.2+20130722-1.1ubuntu1_amd64.deb ...
|Unpacking aufs-tools (1:3.2+20130722-1.1ubuntu1) ...
|Selecting previously unselected package cgroupfs-mount.
|Preparing to unpack .../cgroupfs-mount_1.2_all.deb ...
|Unpacking cgroupfs-mount (1.2) ...
|Selecting previously unselected package libltdl7:amd64.
|Preparing to unpack .../libltdl7_2.4.6-0.1_amd64.deb ...
|Unpacking libltdl7:amd64 (2.4.6-0.1) ...
|Selecting previously unselected package docker-engine.
|Preparing to unpack .../docker-engine_1.12.2-0~xenial_amd64.deb ...
|Unpacking docker-engine (1.12.2-0~xenial) ...
|Processing triggers for libc-bin (2.23-0ubuntu3) ...
|Processing triggers for man-db (2.7.5-1) ...
|Processing triggers for ureadahead (0.100.0-19) ...
|Processing triggers for systemd (229-4ubuntu6) ...
|Setting up aufs-tools (1:3.2+20130722-1.1ubuntu1) ...
|Setting up cgroupfs-mount (1.2) ...
|Setting up libltdl7:amd64 (2.4.6-0.1) ...
|Setting up docker-engine (1.12.2-0~xenial) ...
|sent invalidate(passwd) request, exiting
|sent invalidate(group) request, exiting
|sent invalidate(group) request, exiting
|Processing triggers for libc-bin (2.23-0ubuntu3) ...
|Processing triggers for systemd (229-4ubuntu6) ...
|Processing triggers for ureadahead (0.100.0-19) ...
|+ sudo -E sh -c docker version
|Client:
| Version: 1.12.2
| API version: 1.24
| Go version: go1.6.3
| Git commit: bb80604
| Built: Tue Oct 11 18:29:41 2016
| OS/Arch: linux/amd64

|Server:
| Version: 1.12.2
| API version: 1.24
| Go version: go1.6.3
| Git commit: bb80604
| Built: Tue Oct 11 18:29:41 2016
| OS/Arch: linux/amd64

|If you would like to use Docker as a non-root user, you should now consider
|adding your user to the "docker" group with something like:

| sudo usermod -aG docker user1

|Remember that you will have to log out and back in for this to take effect!

□ (挫折中) apt-getでインストールする場合&& Ubuntu Xenial 16.04 (LTS)の場合
もろもろ前処理。
sudo su
apt-get install apt-transport-https ca-certificates
apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
apt-get update
apt-get purge lxc-docker
apt-cache policy docker-engine
apt-get update
apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
apt-get install docker-engine

https://docs.docker.com/engine/installation/linux/ubuntulinux/
http://qiita.com/ishida330/items/887ae52c9f6ce4ff3b7f

→放置中

□curlでdockerをget
Ref. Example: Install Docker on Ubuntu Linux, https://docs.docker.com/engine/getstarted/linux_install_help/

―――――――――――――――――――――――――
10
Dockerからハローワールド
インストールできたらついでにHello World!
$ sudo docker run hello-world
|user1@VM01:~$ sudo docker run hello-world
|Unable to find image 'hello-world:latest' locally
|latest: Pulling from library/hello-world
|c04b14da8d14: Pull complete
|Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
|Status: Downloaded newer image for hello-world:latest

|Hello from Docker!
|This message shows that your installation appears to be working correctly.

|To generate this message, Docker took the following steps:
| 1. The Docker client contacted the Docker daemon.
| 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
| 3. The Docker daemon created a new container from that image which runs the
| executable that produces the output you are currently reading.
| 4. The Docker daemon streamed that output to the Docker client, which sent it
| to your terminal.

|To try something more ambitious, you can run an Ubuntu container with:
| $ docker run -it ubuntu bash

|Share images, automate workflows, and more with a free Docker Hub account:
| https://hub.docker.com

|For more examples and ideas, visit:
| https://docs.docker.com/engine/userguide/

|user1@VM01:~$

Ref.
さわって理解するDocker入門, https://www.ogis-ri.co.jp/otc/hiroba/technical/docker/part1.html

―――――――――――――――――――――――――
11
Docker@Ubuntu用の小細工
Ubuntuでdocker使う為の設定
Dockerグループを作成し、sudo権限のあるユーザへの付与
DockerデーモンはUnixソケットにバインドする関係だそう
Unixソケットのオーナーはデフォでrootユーザだから、dockerの実行にはルート権限が必要
つまり、dockerデーモンは常にrootユーザとして動く必要がある
その為の細工をする前に、

ルート権限なしに動けないことを確認
$ docker run hello-world
|user1@VM01:~$ docker run hello-world
|Post http:///var/run/docker.sock/v1.19/containers/create:
|dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?.

$ sudo usermod -aG docker user1
|user1@VM01:~$ sudo usermod -aG docker user1
|sent invalidate(passwd) request, exiting
|sent invalidate(group) request, exiting
|sent invalidate(passwd) request, exiting
|sent invalidate(group) request, exiting
|user1@VM01:~$

グループに追加できても、
sudo付けずにdocker叩く→エラーになる
|user1@VM01:~$ docker run hello-world
|Post http:///var/run/docker.sock/v1.19/containers/create:
|dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?.
一度logoutしてloginをし直してから
sudo付けずにdocker叩くと→エラーなくHelloしてくれる筈
|user1@VM01:~$ docker run hello-world
|Hello from Docker!
|This message shows that your installation appears to be working correctly.

Ref.
DockerをLinux(Ubuntu 14.04 LTS)にインストールする方法と解説, https://tracpath.com/works/devops/how_to_install_the_docker/

―――――――――――――――――――――――――
12
蛸を入れる前に(バージョン確認)
ローカルに入っているかをバージョンチェックで確認
$ docker-compose –v
インストールされていない場合
|user1@VM01:~$ docker-compose -v
|The program 'docker-compose' is currently not installed. You can install it by typing:
|sudo apt install docker-compose

―――――――――――――――――――――――――
13
蛸のインストール
Docker-composeの最新版の確認
https://github.com/docker/compose/releases
ver1.8.1 as of 2016/10/20
インストールコマンドも同リリースノートにあり。

インストール
$ sudo su
$ curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
|user1@VM01:~/myDocker$ sudo su
|root@VM01:/home/user1/myDocker# curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
| % Total % Received % Xferd Average Speed Time Time Time Current
| Dload Upload Total Spent Left Speed
|100 600 0 600 0 0 2091 0 --:--:-- --:--:-- --:--:-- 2097
|100 7798k 100 7798k 0 0 6038k 0 0:00:01 0:00:01 --:--:-- 10.7M

作業フォルダの権限付与
$ chmod +x /usr/local/bin/docker-compose

バージョン確認
$ docker-compose version
|root@VM01:/home/user1# docker-compose version
|docker-compose version 1.8.1, build 878cff1
|docker-py version: 1.10.3
|CPython version: 2.7.9
|OpenSSL version: OpenSSL 1.0.1e 11 Feb 2013
$ docker-compose –v
|user1@VM01:~/myDocker$ docker-compose -v
|docker-compose version 1.8.1, build 878cff1

Ref. DockerとDocker Composeをインストール, http://qiita.com/taroshin/items/22bb360b18a0a24871dd

tag : Docker compose Go Daemon CLI REST_API

2016-10-25 00:37 : 開発 : コメント : 0 : トラックバック : 0 :
コメントの投稿
非公開コメント

« next  ホーム  prev »

search

ad



counter


tag cloud

category cloud