※この記事に書かれていることを試す方は、自己責任でやってくださいましで候。
久々に猛勉した。
Dockerってなんぞや?っと気にはなってはいたのですが、先日この本
を読んだ時に「目的のない勉強はするんじゃない。必要になったらやれば良い」なんて書いてあったで、いつかやろう的に考えていたのですが、さっそく試す機会が訪れました。ちなみに著者はWindows95を世に送り出し、右クリックやDrag&Dropを普及させた人だそうです。著者の原点とも言える小学3年生の時のエピソードがなかなか印象的でした。著者のママが当たり前のことをちゃんと実践できる人なんだろうな、という印象。自分だったら宿題終わらなくても最終的に遊びにいかせてしまってるんだな(←ほんと、良くないよね。気づけてよかったけど、時すでに遅し。その後のことはお察しくださいまし〜)
脱線した・・
先週、ビットコインのセカンドレイヤーであるライトニングネットワークのノードをたてようハンズオンに参加する機会がありました。講習に参加するにはUbuntuがイイヨ!とのこと。Macの人は仮想環境とかDocker使ってね、とのこと。おぉ、これはぜひDockerで参加しなくては!
けっこうハマりどころがあったので、整理しました。
ちなみに参加してから知ったのですが、講師は
こちらを翻訳した有名人じゃったよ😳
Docker をインストール
以下のサイトからDocker for Mac をダウンロードしてきて、Macにインストールするよ。
クジラかわゆい。
Docker 起動
ターミナルを開いて以下のコマンドを打つのよ〜
$ docker run -it ubuntu bash
いきなり Ubuntu が起動してビビった。
以下のオプションは/bin/bashでコンテナーを操作する時に指定するんだって。
- -i:コンテナーの標準入力を開く
- -t:tty(端末デバイス)を確保
このUbuntu、vi や netstat などの基本的なコマンドが入っていない!
apt-get でサクサクインストールできるのですが、コンテナ停止していったん削除、イメージから再度起動すると全部消えてる!!
せっせと色々インストールしたのに・・
Dockerfileというシェルスクリプトやバッチファイルのようなものに、処理を記述してイメージを作成するといいらしい。
用語の解釈はざっくりいって
Docker | C# とか Java |
---|---|
Dockerfile | ソースコード |
イメージ | クラス |
コンテナ | インスタンス |
な感じ?AWSのイメージとインスタンスに当てはめても良いかも。
Dockerfileは
- Dockerfile作成→ビルドしてイメージ作成→コンテナ作成
だとデバックが大変らしいので
- コンテナ内で作業→作業内容をメモっとく→メモの内容をDockefileに落とす
というのが効率良いようです。
とりあえず先ほど起動した Ubuntuはいったん exit で抜けましょう。
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0144f052dfe7 ubuntu "bash" 3 days ago Up 3 days naughty_bohr $ docker rm 0144f052dfe7 0144f052dfe7 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 113a43faa138 2 weeks ago 81.2MB $ docker rmi 113a43faa138 113a43faa138
- docker ps -a :コンテナの一覧を表示(docker psだと起動中のものを表示)
- docker rm <CONTAINER ID>:コンテナ削除
- docker images:イメージ一覧を表示
- docker rmi <IMAGE ID>:イメージ削除
再び docker run -it ubuntu /bin/bash
ユーザ設定からやってみるし・・
$ docker run -it ubuntu /bin/bash root@78b3f440be59:/# adduser hoge Adding user `hope' ... (省略) root@78b3f440be59:/# gpasswd -a mikke sudo Adding user home to group sudo # ls /home hoge
- ユーザを追加「adduser」と「useradd(ホームディレクトリが作成されない)」があるから注意
- sudo 権限をつけておく
いったんコミット
保存しませう。
root@78b3f440be59:/home# exit exit $ docker commit "docker commit" requires at least 1 and at most 2 arguments. See 'docker commit --help'. Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] [flags] Create a new image from a container's changes $ docker start 30b4623f9b64 $ docker exec -it 30b4623f9b64 /bin/bash root@30b4623f9b64:/# ls /home hoge
- exit: Ubuntuからでる
- docker commit:作業を保存
ちゃんとできてるかな・・?
- docker start <CONTAINER ID>:コンテナ起動
- docker exec -it <CONTAINER ID> /bin/bash:起動しているコンテナに入る
execじゃなくてattachというのでも入れるらしい。
こんな感んじで試しながら作業。
lnd起動まで
adduserのユーザーでうまくいかなかったので、一からやりなおした・・
$ docker run -it ubuntu bash # apt-get update # apt-get install vim
- apt-get update:apt-get そのままじゃ使えないので更新
- apt-get install vim;viインスコ
Goをインストール
# apt-get install golang-1.10-go # ln -s /usr/lib/go-1.10/bin/go /usr/local/bin/go # export GOPATH=~/gocode # export PATH=$PATH:$GOPATH/bin # go version go version go1.10.1 linux/amd64
go version go1.10.1 linux/amd64 と表示されればOK
git と lnd インストール
# apt-get install git # go get -u github.com/golang/dep/cmd/dep ←少し時間かかります(反応なくて心配になる) # go get -d github.com/lightningnetwork/lnd ←時間かかります # cd $GOPATH/src/github.com/lightningnetwork/lnd # git pull # make && make install
- go get -u github.com/golang/dep/cmd/dep
- go get -d github.com/lightningnetwork/lnd
このふたつ、時間かかった。反応なくて固まってるのかと思った。
.lnd ディレクトリと lnd.conf の作成
# mkdir ~/.lnd && cd ~/.lnd # cp $GOPATH/src/github.com/lightningnetwork/lnd/sample-lnd.conf ./lnd.conf # vi lnd.conf
以下のように編集します。
bitcoin.simnet=1
↓
;bitcoin.simnet=1;
externalip=
↓
externalip=xxx.xx.xx.xx.:9735(自分のIP)
; noencryptwallet=1
↓
noencryptwallet=1
;alias=My Lightning ?~X~G
↓
alias=hoge
;bitcoin.testnet=1
↓
bitcoin.testnet=1
bitcoin.node=btcd
↓
bitcoin.node=neutrino
; bitcoin.defaultchanconfs=3
↓
bitcoin.defaultchanconfs=1
; autopilot.active=1
↓
autopilot.active=1
; noencryptwallet=1
↓
noencryptwallet=1
保存してvi 閉じます。
lnd起動
# lnd & [1] 10668 root@31f4879b5812:~/.lnd# 2018-06-24 00:21:19.544 [INF] LTND: Version 0.4.2-beta commit=18f17ad49b4cc58635a285e53441d82a0c54fd99 2018-06-24 00:21:19.547 [INF] LTND: Active chain: Bitcoin (network=testnet) 2018-06-24 00:21:19.576 [INF] CHDB: Checking for schema update: latest_version=1, db_version=1 2018-06-24 00:21:19.578 [INF] RPCS: Generating TLS certificates... 2018-06-24 00:21:19.613 [INF] RPCS: Done generating TLS certificates :
動いてるっぽいです。
とめかたが分からなかったので、killしました。
あとがき
うまくできなくて、ひさびさに二日間徹夜した。。
これらの手順は、Dockerfileに記述しておくと良いかと思います。
任意の場所に任意のファイル名のDoclerfileを作成(拡張子も特に不要?)
以下のコマンドでビルドできます。
$ docker build -f ./df-ubuntu -t ubuntu:hoge --no-cache . : ---> Running in a8d0cd222d24 Removing intermediate container a8d0cd222d24 ---> f4cd7c78f157 Successfully built f4cd7c78f157 Successfully tagged ubuntu:hoge $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu hope f4cd7c78f157 8 minutes ago 124MB
- docker build -f <Dockerfileのパスとファイル名> -t ubuntu:<任意のtag名> --no-cache <ディレクトリ>
途中
debconf: delaying package configuration, since apt-utils is not installed
こんな警告みたいなのでてましたが、とりあえず放置。
$ docker run -it --name hoge ubuntu:hoge /bin/bash To run a command as administrator (user "root"), use "sudo". See "man sudo_root" for details. hoge@fb120256f789:/$ pwd / hoge@fb120256f789:/$ ls /home hoge hoge@fb120256f789:/
- docker run -it --name <任意のコンテナ名> ubuntu:<tag名> /bin/bash
Dockerfileの書き方は、あちこちのサイトに記載があるので検索してしてみてください。
ではでは
じぶんメモ
apt-get install net-tools