2014-01-26

Dockerを使ってみる(2)-操作ひと通り

前回のエントリでDebian GNU Linux/jessieのDockerコンテナが出来上がってるので、それをいじりまわす感じで。
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
utimukat55/debian   jessie              583d969ed337        4 minutes ago       153.3 MB
dockerのインストールが終わっていると、ホスト側にdocker0というNICが追加されますが、どうもここをルーティングする形でゲストから外に通信をするようです。
ルーティング設定と反映のコマンドを実行します。
/etc/sysctlの以下の行をアンコメント。
net.ipv4.ip_forward=1
以下のコマンドを実行して即時有効化
# sysctl -p
net.ipv4.ip_forward = 1

とりあえず起動する
docker images実行結果のIMAGE IDをイメージに指定、シェルを起動するよう引数に指定してコマンドを実行。
# docker run -t -i 583d969ed337 /bin/bash
root@ed7307934a79:/#
 今の状態だとifconfigもないなど色々扱いづらい(個人的に)なので、必要なパッケージを入れます。
# apt-get install net-tools openssh-server vim
vimを入れたので、/etc/apt/sources.listを必要であれば書き換えてミラーを変更します(USになっているので)

commitする!
起動しているbashを抜けると保存されずに終了してしまうので、別のターミナルを開いて、以下のコマンドを実行します。
# docker ps -a
CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES
ed7307934a79        utimukat55/debian:jessie   /bin/bash           23 minutes ago      Up 23 minutes                           lonely_euclid
 CONTAINER IDを引数に指定してcommitします。-mでコミットログも付けれるみたいですが未確認。
# docker commit ed7307934a79 utimukat55/debian:jessie
f86c3830f454c1ed1e217b86f09c47df41e2ed1bed22038813b478d1514283cc
commitが終わったら実行してた方を閉じます。exitでいいみたいです(Ctrl-dでも抜けれますがステータスが130になって正常終了じゃないみたいです。詳細不明)

色々と未整理なこと
コンテナを起動して終了すると、状態を記録した?ファイルが増えていきます。確認は以下のコマンドで可能です。
# docker ps -a
CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS               NAMES
b12d2c3979c6        utimukat55/debian:jessie   /bin/bash           19 seconds ago      Exit 130                                boring_albattani  
84883288b0e9        utimukat55/debian:jessie   /bin/bash           About an hour ago   Exit 0                                  insane_shockley  
449810a25bd0        utimukat55/debian:jessie   /bin/bash           About an hour ago   Exit 0                                  grave_darwin        
この中から必要のないものがある場合、docker rmコマンドで削除可能です。引数はCONTAINER IDを指定します。
# docker rm b12d2c3979c6
いろんなコンテナを使っている場合、コンテナの一覧は以下のコマンドで確認できます。(既に出てきていますが)
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
utimukat55/debian   jessie              583d969ed337        23 minutes ago      153.3 MB
base                latest              b750fe79269d        10 months ago       175.3 MB
base                ubuntu-12.10        b750fe79269d        10 months ago       175.3 MB
base                ubuntu-quantal      b750fe79269d        10 months ago       175.3 MB
base                ubuntu-quantl       b750fe79269d        10 months ago       175.3 MB
必要のないコンテナを削除する場合、docker rmiコマンドを使います。引数はIMAGE IDを指定します。
# docker rmi b750fe79269d
まだまだわかってない事のほうが遥かに多いですがとりあえずここまで。

ここまでやったイメージ
セントラルリポジトリ?にアップロードしました。
使う場合は以下のコマンドでどうぞ。
# docker pull  utimukat55/docker_jessie

Dockerを使ってみる(1)-導入

Dockerとは
いわゆる仮想化ソリューションですが、OSごと仮想化するような感じではなく、カーネル等は共通のものを使いながらユーザーランドを分離するSolarisコンテナみたいなもののようです。今回はいつもどおりDebian GNU/Linux(amd64)で導入します。今のところamd64でしか動作しないようです(Raspberry PIに移植してる人はいるみたいなので将来的にはアーキテクチャ非依存になるかもしれません)。

パッケージの導入
公式サイト[1]を参考にしつつ例によってsudo使わないのでこんな感じ。パッケージ自体はUbuntu用のものがそのまま使えています。
# wget -qO- https://get.docker.io/gpg | apt-key add -  
OK
# echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list
# apt-get update
# apt-get install lxc-docker
よくわからなかったのでとりあえずデフォルトのまま。パッケージのインストールはこれで完了。

自前でイメージを作成
Dockerのイメージとして公式のもの[2]もありますが、今回はtesting(今はjessie)のイメージを作りたかったので、自分で作ることにします。Debianの場合はシェルが用意されています。docker searchコマンドで所望のイメージが見つかる場合はこの手順は必要ありません。

https://github.com/dotcloud/docker-debian/blob/master/contrib/mkimage-debian.sh

Rawを右クリックしてリンク先保存。ターミナルでダウンロードしてきた場所に移動して
$ chmod +x mkimage-debian.sh
$ su
# ./mkimage-debian.sh utimukat55/debian jessie
問題なく終われば、
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
utimukat55/debian   jessie              583d969ed337        4 minutes ago       153.3 MB
みたいな感じでイメージができているはず。このエントリはここまで。

[1] http://docs.docker.io/en/latest/installation/ubuntulinux/
[2] https://index.docker.io/popular Officialと書かれているものは多分安全

2014-01-08

Rictyフォントを生成する

元にしているフォントのライセンス都合上導入に手間のかかるRictyフォント[1]ですが手元のDebian環境で生成してみました。
というのも、Rictyフォントの生成にはfontforgeと2つのフォントが必要ですが、Debianだとパッケージで用意されてるみたいなので手間削減できるかなぁと思い・・・
Rictyフォントの生成
まずはfontforgeとベースとなるフォント(InconsolataとMigu 1M)のDebianパッケージをインストール
# apt-get install fonts-inconsolata fonts-migmix fontforge
次いで生成シェルをダウンロード。githubからgit cloneでもいいんでしょうが、ちょっと手間を惜しんで。
ブラウザで https://github.com/yascentur/Ricty/blob/3.2.2/ricty_generator.sh へ移動
「raw」を右クリック→保存
ターミナル開いてダウンロードしたディレクトリに移動
$ chmod +x ricty_generator.sh
$ ./ricty_generator.sh auto
で、問題がなければシェルが正常終了します。
Ricty-Bold.ttfとRicty-Regular.ttfが実行した場所に生成されるので、フォント追加します。[2]

$ mkdir ~/.fonts
$ cp -f Ricty-{Bold,Regular}.ttf ~/.fonts/
システムワイドに追加したい場合は/usr/local/share/fonts/にコピーすると良いでしょう。
$ fc-cache -vf
追加されたことを確認したい場合は $ fc-list | grep Ricty で確認するといいでしょう。
と思ったものの!!
生成に必要なフォントのうち、Migu 1Mが古いです(Debianのパッケージが)。
単にパッケージングしてないだけかぁと思いつつBTS見てみたら、どうもライセンスが変わったけどどうするのこれ的なの[3]が見つかりうーん。
なお、フォントが古い事が明らかになってしまったので上記手順自体あまりおすすめできなくなってしまいましたが補足。
Rictyの生成手順で書かれている「(MigMixではありません)」をぶっちぎってfonts-migmix[4]をインストールしていますが、migu-1m-regular.ttfとmigu-1m-bold.ttfが20120411版と同じことは確認済みです。

[1] http://save.sys.t.u-tokyo.ac.jp/~yusa/fonts/ricty.html
[2] https://wiki.debian.org/Fonts#Adding_fonts
[3] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=680036
[4] http://packages.qa.debian.org/f/fonts-migmix.html