かつて適当に入れたdockerをaptで入れなおす……？

# apt-get install lxc-docker なう

dockerについて、
https://coderwall.com/p/wpst1w
でインストールしてたんですが、手で入れるのめんどくせーというのでググったら

http://d.hatena.ne.jp/dot_h2o2/20131202/p1

そんなことが出来るのか。

正直インストール方法については付け加える情報があまりありませんが、確かに0.10.0でも入ります。

```
> LANG=C apt-cache show lxc-docker
Package: lxc-docker
Version: 0.10.0
License: Apache-2.0
Vendor: none
Architecture: amd64
Maintainer: docker@dotcloud.com
Installed-Size: 0
Depends: lxc-docker-0.10.0
Homepage: http://www.docker.io/
Priority: extra
Section: default
Filename: pool/main/l/lxc-docker/lxc-docker_0.10.0_amd64.deb
Size: 1804
SHA256: cd9d6d116bd4770a24a667e180240f0b09a7383351ac5a92a2292f1ee49b0173
SHA1: ae43de2aa1d1e2bee92f3b98e1613c79cbe8d44a
MD5sum: 281748d0fcd321965027886c8c678813
Description: Linux container runtime
 Docker complements LXC with a high-level API which operates at the process
 level. It runs unix processes with strong guarantees of isolation and
 repeatability across servers.
 Docker is a great building block for automating distributed systems:
 large-scale web deployments, database clusters, continuous deployment systems,
 private PaaS, service-oriented architectures, etc.
> apt-cache search lxc-docker
lxc-docker - Linux container runtime
lxc-docker-0.10.0 - Linux container runtime
lxc-docker-0.5.3 - lxc-docker is a Linux container runtime
lxc-docker-0.6.0 - lxc-docker is a Linux container runtime
lxc-docker-0.6.1 - lxc-docker is a Linux container runtime
lxc-docker-0.6.2 - lxc-docker is a Linux container runtime
lxc-docker-0.6.3 - lxc-docker is a Linux container runtime
lxc-docker-0.6.4 - lxc-docker is a Linux container runtime
lxc-docker-0.6.5 - lxc-docker is a Linux container runtime
lxc-docker-0.6.6 - lxc-docker is a Linux container runtime
lxc-docker-0.6.7 - Linux container runtime
lxc-docker-0.7.0 - Linux container runtime
lxc-docker-0.7.1 - Linux container runtime
lxc-docker-0.7.2 - Linux container runtime
lxc-docker-0.7.3 - Linux container runtime
lxc-docker-0.7.4 - Linux container runtime
lxc-docker-0.7.5 - Linux container runtime
lxc-docker-0.7.6 - Linux container runtime
lxc-docker-0.8.0 - Linux container runtime
lxc-docker-0.8.1 - Linux container runtime
lxc-docker-0.9.0 - Linux container runtime
lxc-docker-0.9.1 - Linux container runtime
```

移行する場合はインストール後に手動で入れていた ```/usr/local/bin/docker``` を消すのを忘れないこと。

# docker run は二度死ぬ

ただ、これだけでは動いたように見せかけて```docker run```が動きません。応答しません。
/var/log/docker.logあたりでエラーメッセージを見ることができます。

ぐぐると以下のGitHub上のスレが出てきたりしました。

https://github.com/dotcloud/docker/issues/4568

＃ スレには悪いスレと良いスレがあると思いますが、tianon氏が真面目に取り組んでいる以上はそこそこ良いスレだと想像します。このブロックっぽい黒いアイコンを見ると、ちょっと恐怖を感じるのは多分私だけです。

ただ、スレ自体はcgroupに関するもののようでして、自分が引っかかっている問題とはちょっと違う気がしました。
cgroup-lite (/etc/fstabにcgroupの行を入れてくれる？) の話な気がしますが、
これは手動で入れていればまぁいいはず。

しかし一人ぼそっと良いことを言ってまして。
自分の今回のケースではdriver周りで明らかに落ちている気がします。

# docker 0.9, 0.10において LXCを使わせる 

試しに動かすだけのばあい、最後に/etc/init.d/docker に対して、更に追加で

```
        start)
                fail_unless_root

                cgroupfs_mount

                touch "$DOCKER_LOGFILE"
                chgrp docker "$DOCKER_LOGFILE"

                log_begin_msg "Starting $DOCKER_DESC: $BASE"
                start-stop-daemon --start --background \
                        --no-close \
                        --exec "$DOCKER" \
                        --pidfile "$DOCKER_PIDFILE" \
                        -- \
                                -d -e lxc -p "$DOCKER_PIDFILE" \
                                $DOCKER_OPTS \
                                        >> "$DOCKER_LOGFILE" 2>&1
                log_end_msg $?
                ;;
```

と、「-e lxc」を付けると、

走り回る元気なdockerな姿が！

私はあまり良く理解してないんですが、聞き及ぶ範囲で書いておきますと。

docker 0.7の時点ではまだ下層でLXCしか使われてなかったんですが、
0.9以降は下層のドライバもdockerの人が、自分たちで書くようになったらしく、
さらにデフォルトではそっちが選ばれます (docker -h をどうぞ)。
LXCは明示的に指定した時だけ使われるようになっています。

参考: http://www.publickey1.jp/blog/14/docker_09lxc.html

0.7系の頃に書かれた「わーいDebianにインストール出来た」系の記事のすべからくその後が気になります。

# 別の対応

単に```apt-get install lxc-docker-0.8.1```とかすればそれでも動いて見えます。

# Ubuntu 14.04 LTS での docker

さて、14.04 LTSではDocker本体が提供しているlxc-dockerは使っておらず、debian sidから取ってきたっぽい docker.io パッケージがインストールされてます。

```
> lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 14.04 LTS
Release:	14.04
Codename:	trusty
> apt-cache show docker.io
Package: docker.io
Priority: optional
Section: universe/admin
Installed-Size: 21726
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Paul Tagliamonte <paultag@debian.org>
Architecture: amd64
Version: 0.9.1~dfsg1-2
Depends: adduser, iptables, init-system-helpers (>= 1.13~), sysv-rc (>= 2.88dsf-24) | file-rc (>= 0.8.16), perl, libapparmor1 (>= 2.6~devel), libc6 (>= 2.4), libdevmapper1.02.1 (>= 2:1.02.63), libsqlite3-0 (>= 3.5.9)
Recommends: aufs-tools, ca-certificates, cgroupfs-mount | cgroup-lite, git, xz-utils
Suggests: btrfs-tools, debootstrap, lxc, rinse
Filename: pool/universe/d/docker.io/docker.io_0.9.1~dfsg1-2_amd64.deb
Size: 3725870
MD5sum: c28cc53680a9700455eaff29fbad6801
SHA1: 37d35b86c3d71b22ee5fd0b1e07dd043ccf6033b
SHA256: 365eb27861282c3de4dbc5d35b2b0e8d680f4b077ab2fc5ce996621f14b9e473
Description-en: Linux container runtime
 Docker complements kernel namespacing with a high-level API which operates at
 the process level. It runs unix processes with strong guarantees of isolation
 and repeatability across servers.
 .
 Docker is a great building block for automating distributed systems:
 large-scale web deployments, database clusters, continuous deployment systems,
 private PaaS, service-oriented architectures, etc.
 .
 This package contains the daemon and client. Using docker.io on non-amd64
 hosts is not supported at this time. Please be careful when using it on
 anything besides amd64.
 .
 Also, note that kernel version 3.8 or above is required for proper operation of
 the daemon process, and that any lower versions may have subtle and/or glaring
 issues.
Description-md5: 4f110c30cd3596d47a1d37f564ddd5bc
Built-Using: golang-context-dev (= 0.0~git20130701-1), golang-go.net-dev (= 0.0~hg20131201-1), golang-gocapability-dev (= 0.0~git20130208-1), golang-gosqlite-dev (= 0.0~hg20130601-1), golang-mux-dev (= 0.0~git20130701-1), golang-pty-dev (= 0.0~git20130701-1)
Homepage: https://github.com/dotcloud/docker
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Origin: Ubuntu
```

全く良くわかりませんが適切にpackage管理されるとこうなるんだと思いますが、sid派生ですからDebian stable (wheezy 7.5)ではちょっと手を出しにくい印象。

なお、こちら(docker.io with 14.04LTS)では実は"-e lxc"なしで動いてるみたいなので、きっとnative driver周りを動かすのにコツがいるんだと勝手に予想してます。いっそdocker.ioパッケージ入れようとしたんですが、インストールするのに追加でsid系のパッケージが色々必要になるっぽいので途中でとりあえず導入する旅を止めました。

仮に1.0になってもこの辺りの混乱がDebianで収束するまでには相当時間がかかりそうな予感がちょっとします。
一方、外部依存自体は段々減っている(LXCへの依存すらなくそうとしてる？)ので、逆にやりやすくなっている可能性もあります。

rbenv, pyenv等に続いて doenv というコマンドが、……ないな。

# さいごに

ていうか、ましな方法をお待ちしております。いや、Debian使うなというのはあんまりだ。

なお昨日の昼はPython3.4周りで死に、昨日の夜はDynamic DNSの設定で死に、今日はdockerで死に、ダークソウル2をやらなくてもprepared to dieな気分です。

こんやじゅうにじ あんどろいどで しぬ

いいえ、そのまえにTomcatとZabbixで死にます。