長田研勉強会 20140805 Docker

今回は僕の担当回。
勉強会の3時間くらい前に「dockerでもやるか!」ってことでdockerすることにしました。

コンテナ型の仮想化技術って初めてだったのでいろいろ分からないところも・・・。
使っていって慣れるしかないですね。

来週はgitやりたいとB4が言ってたのでやるかも。

以下資料です。

docker

dockerとは

コンテナ型の仮想化技術

ハイパーバイザ型やホスト型はマシン上に仮想マシンをエミュレートすることで動作する。
何かプロセスを実行する際には仮想マシン上のカーネルで動かす必要がある。
そのためオーバーヘッドが大きく、リソースを多く割く必要がある。

dockerはこれらとは違いコンテナ型の仮想化技術である。
コンテナ型ではホスト上のリソースの一部を隔離した環境を作り、そこでプロセスを実行する。
実行するプロセスはホスト上のカーネルで動くため、オーバーヘッドが小さく、従来より高速に動作する。

docker以外にもLXCなどのコンテナ型仮想化技術が存在する。

dockerの特徴

dockerでは以下のリソースを隔離することができる。

  • ファイルシステム
  • ユーザ/グループ
  • プロセスID
  • プロセス間通信
  • ホスト名
  • ネットワークデバイス

これらのリソースをホスト上から隔離してプロセスを動作させる。
コンテナ型とは上手い言葉を使ったなぁ、と。

今回の前提条件

環境

  • Mac OS X
    • 10.9.4
  • VirtualBox
    • 4.3.14
  • Vagrant
    • 1.6.2
  • 仮想OS
    • CentOS 7

Installと起動

CentOS7

[code]
$ sudo yum install docker
$ sudo systemctl start docker
$ sudo systemctl enable docker
[/code]

versionチェック

[code]
$ sudo docker version
Client version: 0.11.1-dev
Client API version: 1.12
Go version (client): go1.2
Git commit (client): 02d20af/0.11.1
Server version: 0.11.1-dev
Server API version: 1.12
Go version (server): go1.2
Git commit (server): 02d20af/0.11.1
[/code]

本格的に始める前に

sudo

一般ユーザがdockerコマンドを実行する場合にはsudoを利用する必要がある。
しかし、dockerグループに追加することで以降はsudoは必要なくなる。
グループに追加したらログインし直すことで反映する。

[code]
$ sudo usermod -G docker [USER]
$ exit
$ vagrant ssh
[/code]

CentOSのイメージを入れてみる

imageの検索

[code]
$ docker search [search_word]
$ docker search -trusted [search_word]
[/code]

trustedとは

dockerではtrusted buildで作られたコンテナイメージはTrustedと表示される。

Docker indexというDocker公式のコンテナイメージ共有サイトがある。
vagrantでいえばvagrantbox.esみたいなサイト。

dockerのコンテナイメージはDockerfileを元に作成される。
このDockerfileがgithubで公開されていれば、
「このコンテナイメージにどのような設定が施されているか」をユーザがチェックすることができ、
安全にコンテナイメージを利用することができる。

Trustedというのはこの公開されたDockerfileをもとにDocker indexが作成したコンテナイメージのことを指す。

search & pull

[code]
$ docker search centos
NAME DESCRIPTION STARS OFFICIAL TRUSTED
centos The official build of CentOS. 297 [OK]
tianon/centos CentOS 5 and 6, created using rinse instea… 24
blalor/centos Bare-bones base CentOS 6.5 image 5 [OK]
~~~ SNIP ~~~
$ docker pull centos
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos centos6 b1bd49907d55 5 days ago 212.5 MB
centos centos7 b157b77b1a65 5 days ago 243.7 MB
centos latest b157b77b1a65 5 days ago 243.7 MB
[/code]

とりあえずこれを使ってハンズオンしてみる。
このCentOSなイメージファイルも最終的には自分の手で作っていきたい。

上記のcentos7とlatestなタグの<code>IMAGE ID</code>が同じである事が分かる。

<h3>詳細情報の取得</h3>

[code]
$ docker inspect b15
"id": "b157b77b1a65e87b4f49298557677048b98fed36043153dcadc28b1295920373",
"parent": "34e94e67e63a0f079d9336b3c2a52e814d138e5b3f1f614a0cfe273814ed7c0a",
"created": "2014-07-30T12:58:55.488835359Z",
"container": "92554ee84fde65fd64a8b8ac749ff748c731a8bd3dbf033c5418d1f207ba2986",
"container_config": {
"Hostname": "92554ee84fde",
"Domainname": "",
"User": "",
"Memory": 0,
~~~ SNIP ~~~
[/code]

ここでのIMAGE IDはそのイメージに到達できれば良いので、イメージに到達するのに十分な長さ以上は必要なさそう。

しかし、IMAGE IDは面倒なのでTAGとかでどうにか出せるようにしたい。

下記のようにするとできた。

[code]
$ docker inspect centos:centos7
"id": "b157b77b1a65e87b4f49298557677048b98fed36043153dcadc28b1295920373",
"parent": "34e94e67e63a0f079d9336b3c2a52e814d138e5b3f1f614a0cfe273814ed7c0a",
"created": "2014-07-30T12:58:55.488835359Z",
"container": "92554ee84fde65fd64a8b8ac749ff748c731a8bd3dbf033c5418d1f207ba2986",
"container_config": {
"Hostname": "92554ee84fde",
"Domainname": "",
~~~ SNIP ~~~
[/code]

どうやらdockerでのイメージの指定方法はREPOSITORY:TAGという形式らしい。

imageの削除

[code]
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos centos6 b1bd49907d55 5 days ago 212.5 MB
centos centos7 b157b77b1a65 5 days ago 243.7 MB
centos latest b157b77b1a65 5 days ago 243.7 MB
$ docker rmi b1b
Untagged: centos:centos6
Deleted: b1bd49907d559b703c2b7c1b0d6f120b5182440f7ac5f08636625d328e96f1ef
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos centos7 b157b77b1a65 5 days ago 243.7 MB
centos latest b157b77b1a65 5 days ago 243.7 MB
[/code]

この場合に前述したようなREPOSITORY:TAGな指定をすると、そのタグを外すという動作になる。

実行例は下記の通り。

[code]
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos centos7 b157b77b1a65 5 days ago 243.7 MB
centos latest b157b77b1a65 5 days ago 243.7 MB
$ docker rmi centos:centos7
Untagged: centos:centos7
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos latest b157b77b1a65 5 days ago 243.7 MB
[/code]

しかしタグが振られていないイメージは削除されるので、この状態でcentos:latestを削除するとb157bというイメージも削除される。

コンテナの操作

コンテナの作成

[code]
$ docker run –name="shell" -t -i -d b15 /bin/bash
2d4db03038316fa360827005ba1973422b0a24525d0764a7350f3b3f2ab3a025
[/code]

[code]
$ docker run

Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG…]

Run a command in a new container

-a, –attach=[] Attach to stdin, stdout or stderr.
-c, –cpu-shares=0 CPU shares (relative weight)
–cidfile="" Write the container ID to the file
–cpuset="" CPUs in which to allow execution (0-3, 0,1)
-d, –detach=false Detached mode: Run container in the background, print new container id
–dns=[] Set custom dns servers
–dns-search=[] Set custom dns search domains
-e, –env=[] Set environment variables
–entrypoint="" Overwrite the default entrypoint of the image
–env-file=[] Read in a line delimited file of ENV variables
–expose=[] Expose a port from the container without publishing it to your host
-h, –hostname="" Container host name
-i, –interactive=false Keep stdin open even if not attached
–link=[] Add link to another container (name:alias)
–lxc-conf=[] (lxc exec-driver only) Add custom lxc options –lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"
-m, –memory="" Memory limit (format: <number><optional unit>, where unit = b, k, m or g)
–name="" Assign a name to the container
–net="bridge" Set the Network mode for the container
‘bridge’: creates a new network stack for the container on the docker bridge
‘none’: no networking for this container
‘container:<name|id>': reuses another container network stack
‘host’: use the host network stack inside the contaner
-P, –publish-all=false Publish all exposed ports to the host interfaces
-p, –publish=[] Publish a container’s port to the host
format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort
(use ‘docker port’ to see the actual mapping)
–privileged=false Give extended privileges to this container
–rm=false Automatically remove the container when it exits (incompatible with -d)
–sig-proxy=true Proxify all received signal to the process (even in non-tty mode)
-t, –tty=false Allocate a pseudo-tty
-u, –user="" Username or UID
-v, –volume=[] Bind mount a volume (e.g. from the host: -v /host:/container, from docker: -v /container)
–volumes-from=[] Mount volumes from the specified container(s)
-w, –workdir="" Working directory inside the container
[/code]

今回使った--name, -t, -i, -dについてはそれぞれ以下のような内容になる。

  • –name
    • 作成するコンテナに名前を付ける
  • -t
    • 疑似ttyを割り当てる
    • 疑似ttyは端末
  • -i
    • インタラクティブ実行をする
    • 対話モードのいつも通りのシェル実行
  • -d
    • バックグラウンドで実行する

ただコマンドを実行するだけなら以下のように実行すると良い。
ここではREPOSITORY:TAGな指定でイメージを選択している。

[code]
$ docker run –name="hello" centos:latest echo hello
hello
[/code]

コンテナ一覧

[code]
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d4db0303831 centos:latest /bin/bash 16 minutes ago Up 16 minutes shell
[/code]

動作中のコンテナについてはdocker psを利用すると一覧表示できる。

[code]
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce092a0adc49 centos:latest echo hello 2 minutes ago Exited (0) 2 minutes ago hello
2d4db0303831 centos:latest /bin/bash 17 minutes ago Up 17 minutes shell
[/code]

停止中のコンテナを再開させるコマンド等については後述する。

コンテナへのアタッチ

バックグラウンドで実行しているコンテナをフォアグランドに呼び出す事をアタッチという。

[code]
$ docker attach 2d4

bash-4.2#
[/code]

端末を割り当て、インタラクティブに/bin/bashを実行しているコンテナにアタッチした。
対話型でbashが実行されていることがわかる。

また、docker run時に--nameを指定している場合はその名前を利用してアタッチすることもできる。

[code]
$ docker attach shell

bash-4.2#
[/code]

アタッチしたコンテナへのデタッチ

ここでCTRL-dをしてしまうとbashが終了してしまい、コンテナも停止してしまうこととなる。

コンテナの停止

[code]
$ docker stop 2d4
2d4
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce092a0adc49 centos:latest echo hello 14 minutes ago Exited (0) 9 minutes ago hello
2d4db0303831 centos:latest /bin/bash 29 minutes ago Exited (-1) 28 seconds ago shell
[/code]

もちろん、--nameで指定した名前を利用して停止することも可能。

[code]
$ docker stop shell
shell
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce092a0adc49 centos:latest echo hello 15 minutes ago Exited (0) 10 minutes ago hello
2d4db0303831 centos:latest /bin/bash 30 minutes ago Exited (-1) 37 seconds ago shell
[/code]

コンテナの開始

[code]
$ docker start 2
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce092a0adc49 centos:latest echo hello 17 minutes ago Exited (0) 11 minutes ago hello
2d4db0303831 centos:latest /bin/bash 32 minutes ago Up 5 seconds shell
[/code]

ここでも前述のように--nameで指定した名前を利用して開始することができる。

コンテナの詳細情報

[code]
$ docker inspect 2
"ID": "2d4db03038316fa360827005ba1973422b0a24525d0764a7350f3b3f2ab3a025",
"Created": "2014-08-05T06:36:20.434473663Z",
"Path": "/bin/bash",
"Args": [],
"Config": {
"Hostname": "2d4db0303831",
"Domainname": "",
"User": "",
"Memory": 0,
[/code]

ここでも--nameで指定した名前を利用して開始することができる。

コンテナの削除

[code]
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce092a0adc49 centos:latest echo hello 21 minutes ago Exited (0) 2 minutes ago hello
2d4db0303831 centos:latest /bin/bash 35 minutes ago Up 3 minutes shell
$ docker rm hello
hello
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d4db0303831 centos:latest /bin/bash 36 minutes ago Up 4 minutes shell
[/code]

ここでも--nameで指定した名前を利用して開始することができる。

いろいろ試してみよう

コンテナの名前をかぶらせる

すでに下記のように--name="shell"なコンテナがあるときにdocker run --name="shell"はできるのか?

[code]
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d4db0303831 centos:latest /bin/bash 37 minutes ago Up 5 minutes shell
[/code]

当然できないだろうけど。

[code]
$ docker run –name="shell" -t -i -d centos:latest /bin/sh
2014/08/05 03:13:39 Error: Conflict, The name shell is already assigned to 2d4db0303831. You have to delete (or rename) that container to be able to assign shell to a container again.
[/code]

当然ながらできない。
別の名前を使うか、コンテナを削除してください、とのこと。

動作中のコンテナを削除してみる

[code]
$ docker rm shell
Error: Impossible to remove a running container, please stop it first or use -f
2014/08/05 03:16:42 Error: failed to remove one or more containers
[/code]

動作中のコンテナを削除することはできない。
どうしてもしたいなら-fを使え、とのこと。

そりゃそうか。

[code]
$ docker rm -f shell
shell
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[/code]

消えました。

シェル実行のオプションをいじってみる

最初にdocker runをやったときは、オプションをいくつかつけていた。
それっていったいどういう意味があったの?

ってことを確かめてみよう。

  • まずは何もつけない場合

    [code]
    $ docker run –name="shell" centos:latest /bin/bash
    $ docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    9b6893fbf9e4 centos:latest /bin/bash 7 seconds ago Exited (0) 6 seconds ago shell
    [/code]

    すぐにコンテナが停止した。

    [code]
    $ docker run –name="shell" -i centos:latest /bin/bash
    echo hello
    hello
    [/code]

    インタラクティブに実行されているっぽいけど、いつものシェルと違うところが。

    プロンプトがない。CTRL-dで抜ける。

    [code]
    $ docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    50345b09fcfc centos:latest /bin/bash 2 minutes ago Exited (127) 4 seconds ago shell
    [/code]

    どうやらSTATUSのところにある数字はexit statusのようだ。もう一度起動してみて、今度はexitコマンドで抜けてみよう。

    [code]
    $ docker start shell
    shell
    $ docker attach shell
    exit
    $ docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    50345b09fcfc centos:latest /bin/bash 3 minutes ago Exited (0) 1 seconds ago shell
    [/code]

    今度はSTATUSの数字が0になった。オッケー。

    [code]
    $ docker run –name="shell" -t centos:latest /bin/bash
    bash-4.2# echo hello

    ^C $ docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    6cb8e55bfe0c centos:latest /bin/bash 16 seconds ago Up 16 seconds shell
    [/code]

    しかし、echo helloと打ってみても何も反応がない。ただの屍か。

    [code]
    93d015ab5111 centos:latest /bin/bash 4 seconds ago Exited (0) 3 seconds ago shell
    [/code]

    これはちょっと分かりにくい例なので-iと同時に実行してみる。

    [code]
    $ docker run –name="shell" -d -i centos:latest /bin/bash
    ece2e2a0b7511af7b57c3cdd8bcef491112b7a1a442f858aa4ccffb171d3e2e0
    $ docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    ece2e2a0b751 centos:latest /bin/bash 10 seconds ago Up 9 seconds shell
    [/code]

    今回の例ではこのコンテナはバックグラウンドで実行されていることとなっている。
    そのため一度アタッチをする必要がある。

もうちょっと

コンテナの場所

dockerに関するファイルは/var/lib/docker以下に置かれている。

コンテナについては/var/lib/docker/containersの中にcontainer idを利用して保存されていた。

[code]
# ls -l /var/lib/docker/containers/
total 0
drwx—— 2 root root 153 Aug 5 03:38 ece2e2a0b7511af7b57c3cdd8bcef491112b7a1a442f858aa4ccffb171d3e2e0
# ls -l /var/lib/docker/containers/ece2e2a0b7511af7b57c3cdd8bcef491112b7a1a442f858aa4ccffb171d3e2e0/
total 16
-rw-r–r– 1 root root 1359 Aug 5 03:38 config.json
-rw——- 1 root root 0 Aug 5 03:38 ece2e2a0b7511af7b57c3cdd8bcef491112b7a1a442f858aa4ccffb171d3e2e0-json.log
-rw-r–r– 1 root root 192 Aug 5 03:38 hostconfig.json
-rw-r–r– 1 root root 13 Aug 5 03:38 hostname
-rw-r–r– 1 root root 175 Aug 5 03:38 hosts
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ece2e2a0b751 centos:latest /bin/bash 4 minutes ago Up 4 minutes shell
[/code]

もっと

[code]
# ls -l /var/lib/docker/
total 16
drwx—— 3 root root 77 Aug 5 03:38 containers
drwx—— 5 root root 50 Aug 5 01:3 CREATED STATUS root 19 Aug 4 23:43 execdriver
drwx—— 6 root root 4096 Aug 5 02:23 graph
drwx—— 2 root root 34 Aug 4 23:43 init
-rw-r–r– 1 root root 5120 Aug 5 03:38 linkgraph.db
-rw——- 1 root root 105 Aug 5 02:24 repositories-devicemapper
drwx—— 2 root root 6 Aug 4 23:43 volumes
[/code]

ではimageの実体はどこにあるんだろう。

[code]
# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos latest b157b77b1a65 5 days ago 243.7 MB
[/code]

このcentos:latestなイメージを探してみる。

graph の中を見る

[code]
# ls -l graph/
total 4
drwx—— 2 root root 33 Aug 5 01:36 34e94e67e63a0f079d9336b3c2a52e814d138e5b3f1f614a0cfe273814ed7c0a
drwx—— 2 root root 33 Aug 5 01:36 511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158
drwx—— 2 root root 33 Aug 5 01:37 b157b77b1a65e87b4f49298557677048b98fed36043153dcadc28b1295920373
drwx—— 2 root root 6 Aug 5 02:23 _tmp
[/code]

ここにb157というcentos:latestなイメージIDがある。
中を見るとjsonとかlayersizeとか置いてある

[code]
# ls -l graph/b157b77b1a65e87b4f49298557677048b98fed36043153dcadc28b1295920373/
total 8
-rw——- 1 root root 1551 Aug 5 01:37 json
-rw——- 1 root root 9 Aug 5 01:37 layersize
[/code]

このjsonの中身を見てみるとどうやら以下のコマンドで出力される詳細情報が記述されているようだった。

[code]
$ docker inspect b157
[/code]

dockerはbaseとなるイメージにlayerを重ねていくことでイメージの管理をしているようなので、それのサイズなんだろうかと思ったり。

[code]
# cat graph/b157b77b1a65e87b4f49298557677048b98fed36043153dcadc28b1295920373/layersize
243702687
[/code]

何もcontainerが動いていないからだろうか?

devicemapperの中を見る

[code]
# ls -l devicemapper/
total 8
drwx—— 2 root root 32 Aug 4 23:43 devicemapper
drwx—— 2 root root 4096 Aug 5 03:38 metadata
drwxr-xr-x 7 root root 4096 Aug 5 03:38 mnt
# ls -l devicemapper/devicemapper/
total 592164
-rw——- 1 root root 107374182400 Aug 5 03:54 data
-rw——- 1 root root 2147483648 Aug 5 03:48 metadata
# ls -l devicemapper/metadata/
total 24
-rw——- 1 root root 73 Aug 5 01:36 34e94e67e63a0f079d9336b3c2a52e814d138e5b3f1f614a0cfe273814ed7c0a
-rw——- 1 root root 73 Aug 5 01:36 511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158
-rw——- 1 root root 73 Aug 5 01:36 b157b77b1a65e87b4f49298557677048b98fed36043153dcadc28b1295920373
-rw——- 1 root root 72 Aug 4 23:43 base
-rw——- 1 root root 75 Aug 5 03:38 ece2e2a0b7511af7b57c3cdd8bcef491112b7a1a442f858aa4ccffb171d3e2e0
-rw——- 1 root root 75 Aug 5 03:38 ece2e2a0b7511af7b57c3cdd8bcef491112b7a1a442f858aa4ccffb171d3e2e0-init
# ls -l devicemapper/mnt/
total 4
drwxr-xr-x 2 root root 6 Aug 5 01:36 34e94e67e63a0f079d9336b3c2a52e814d138e5b3f1f614a0cfe273814ed7c0a
drwxr-xr-x 2 root root 6 Aug 5 01:36 511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158
drwxr-xr-x 2 root root 6 Aug 5 01:36 b157b77b1a65e87b4f49298557677048b98fed36043153dcadc28b1295920373
drwxr-xr-x 4 root root 4096 Aug 5 01:36 ece2e2a0b7511af7b57c3cdd8bcef491112b7a1a442f858aa4ccffb171d3e2e0
drwxr-xr-x 2 root root 6 Aug 5 03:38 ece2e2a0b7511af7b57c3cdd8bcef491112b7a1a442f858aa4ccffb171d3e2e0-init
[/code]

ここに実体があるのかなー、とか予想。

ここから先は別の日にやったのでIDが変わる。

devicemapper/mnt

[code]
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
745a257e3e5d centos:latest /bin/bash 5 seconds ago Up 3 seconds sharp_davinci9
[root@localhost docker]# ls -l devicemapper/mnt/
total 4
drwxr-xr-x 4 root root 4096 Aug 5 04:39 745a257e3e5d9b38a2b5c388c815fbf1bd0593c636e048c501cd267e334f6e6e
drwxr-xr-x 2 root root 6 Aug 6 08:11 745a257e3e5d9b38a2b5c388c815fbf1bd0593c636e048c501cd267e334f6e6e-init
[/code]

containerのidでディレクトリが作成されている。

このcontainerについてls -lしてみる。

[code]
# ls -l devicemapper/mnt/745a257e3e5d9b38a2b5c388c815fbf1bd0593c636e048c501cd267e334f6e6e
total 24
-rw——- 1 root root 64 Aug 5 04:39 id
drwx—— 2 root root 16384 Aug 5 04:28 lost+found
dr-xr-xr-x 18 root root 4096 Aug 6 08:11 rootfs
# ls -l devicemapper/mnt/745a257e3e5d9b38a2b5c388c815fbf1bd0593c636e048c501cd267e334f6e6e-init/
total 0
[/code]

どうやら-initがついていない方にrootfsとかいう「あれ、これって"/“じゃない?」みたいなディレクトリが。

[code]
# ls -l devicemapper/mnt/745a257e3e5d9b38a2b5c388c815fbf1bd0593c636e048c501cd267e334f6e6e/rootfs/
total 64
lrwxrwxrwx 1 root root 7 Jul 25 23:47 bin -> usr/bin
drwxr-xr-x 4 root root 4096 Aug 6 08:11 dev
drwxr-xr-x 49 root root 4096 Aug 6 08:11 etc
drwxr-xr-x 2 root root 4096 Jun 9 20:11 home
lrwxrwxrwx 1 root root 7 Jul 25 23:47 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Jul 25 23:47 lib64 -> usr/lib64
drwx—— 2 root root 4096 Jul 25 23:47 lost+found
drwxr-xr-x 2 root root 4096 Jun 9 20:11 media
drwxr-xr-x 2 root root 4096 Jun 9 20:11 mnt
drwxr-xr-x 2 root root 4096 Jun 9 20:11 opt
drwxr-xr-x 2 root root 4096 Jul 25 23:47 proc
dr-xr-x— 2 root root 4096 Jun 9 20:11 root
drwxr-xr-x 10 root root 4096 Jul 25 23:50 run
lrwxrwxrwx 1 root root 8 Jul 25 23:47 sbin -> usr/sbin
drwxr-xr-x 3 root root 4096 Jul 25 23:50 selinux
drwxr-xr-x 2 root root 4096 Jun 9 20:11 srv
drwxr-xr-x 2 root root 4096 Jul 25 23:47 sys
drwxrwxrwt 7 root root 4096 Jul 25 23:50 tmp
drwxr-xr-x 13 root root 4096 Jul 25 23:47 usr
drwxr-xr-x 19 root root 4096 Jul 25 23:49 var
[/code]

おおー、こんなところにchrootな場所が。
何か適当なファイルを作って確認してみます。

[code]
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
745a257e3e5d centos:latest /bin/bash 5 minutes ago Up 5 minutes sharp_davinci9
# docker attach 74
pwd
bash-4.2# cd root/
bash-4.2# pwd
/root
bash-4.2# echo hello > hoge.txt
bash-4.2# ls
hoge.txt
bash-4.2#
# ls -l devicemapper/mnt/745a257e3e5d9b38a2b5c388c815fbf1bd0593c636e048c501cd267e334f6e6e/rootfs/root/
total 4
-rw-r–r– 1 root root 6 Aug 6 08:17 hoge.txt
# cat devicemapper/mnt/745a257e3e5d9b38a2b5c388c815fbf1bd0593c636e048c501cd267e334f6e6e/rootfs/root/hoge.txt
hello
[/code]

ファイルができてた。

今回はここまで!

参考