やったもん勝ち

主にプログラミングのこと。生産性向上の某とかも。

いい加減DockerとECSを整理する①

Dockerの概念が腑に落ちないこと早1年。

そろそろこれじゃだめだって思い始めて、復習する万。

install方法は割愛しておくことにする。
というか忘れてしまった。

Mac
High Sierra 10.13.5
$ docker -v
Docker version 17.12.0-ce, build c97c6d6

docker-composeとやらも入っておる。

$ docker-compose -v
docker-compose version 1.18.0, build 8dd22a9

まずはOSを起動してみる centosを使ってみる。 と、その前に、現在の状況を確認

現在起動しているコンテナを確認する。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hogee_web           latest              13cc204c812e        9 days ago          881MB
ruby                2.3.6               7ab6e81790b8        3 months ago        722MB
myapp_web           latest              1b99a62bd7f1        3 months ago        841MB
<none>              <none>              33139e4ab9e2        3 months ago        808MB
mysql               5.7                 5d4d51c57ea8        4 months ago        374MB
ruby                2.3.0               7ca70eb2dfea        2 years ago         725MB

imageにはこんなものたちがある。
ここにはcentosはない。
続いて現在のdockerのプロセスを確認

すべてのコンテナを確認。

docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                    NAMES
67c4c9131574        hogee_web           "bundle exec rails s…"   8 days ago          Exited (1) 8 days ago                                hogee_web_run_6
60fc65437813        hogee_web           "bundle exec rails s…"   8 days ago          Exited (1) 8 days ago                                hogee_web_run_5
0fb85edc2110        hogee_web           "bundle exec rails s…"   8 days ago          Exited (1) 8 days ago                                hogee_web_run_4
2c498cd732f6        hogee_web           "bundle exec rake db…"   9 days ago          Exited (0) 9 days ago                                hogee_web_run_3
e97a1e89c87e        hogee_web           "bundle exec rake db…"   9 days ago          Exited (0) 9 days ago                                hogee_web_run_2
126811cf559f        hogee_web           "bundle exec rails s…"   9 days ago          Exited (1) 8 days ago                                hogee_web_1
e78c4418f446        hogee_web           "rails new . --force…"   9 days ago          Exited (1) 9 days ago                                hogee_web_run_1
faed05fdd12c        mysql:5.7           "docker-entrypoint.s…"   9 days ago          Exited (255) 6 days ago     3306/tcp                 hogee_db_1
5a079a80a50c        myapp_web           "rails db:migrate"       3 months ago        Exited (0) 3 months ago                              myapp_web_run_5
fa4cd6b00acc        myapp_web           "rails g scaffold us…"   3 months ago        Exited (0) 3 months ago                              myapp_web_run_4
13c8f6ce670c        myapp_web           "rails db:create"        3 months ago        Exited (0) 3 months ago                              myapp_web_run_3
2b96f67a9f7a        myapp_web           "bundle exec rails s…"   3 months ago        Exited (255) 3 months ago   0.0.0.0:3000->3000/tcp   myapp_web_1
858bc9dfd0c2        myapp_web           "rails db:create"        3 months ago        Exited (1) 3 months ago                              myapp_web_run_2
038519291a53        33139e4ab9e2        "rails new . --force…"   3 months ago        Exited (0) 3 months ago                              myapp_web_run_1
91592f781321        mysql:5.7           "docker-entrypoint.s…"   3 months ago        Exited (255) 3 months ago   3306/tcp                 myapp_db_1
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

現在動いているdockerのプロセスはない。

$ docker run -it centos:latest bash
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
7dc0dca2b151: Pull complete
Digest: sha256:b67d21dfe609ddacf404589e04631d90a342921e81c40aeaf3391f6717fa5322
Status: Downloaded newer image for centos:latest
[root@de5bdc2e3f95 /]#

処理終了までに数分かかりました。
docker runはホスト名をつけて起動するコマンド。 この場合は、centosというイメージからdockerを実行せよ。
:latestは、タグで、ここでcentosのバージョンとかを指定できる。 -iは--interactive, Keep STDIN open even if not attached
インタラクティブなシェルとかで使えますと。 -tは--tty, Allocate a pseudo-TTY

pseudo-tty( text-terminal ) = 疑似端末 pseudo = 擬似 tty = 標準入出力となっている端末デバイス(制御端末、controlling terminal)の名前を表示するunixコマンドである。元来ttyとはteletypewriter(テレタイプライター)のことを指す。

`pseudo-tty` とは? - kz-engineer -SCRAP-

だいたいココらへんは$docker run --helpでオプションの意味が出てくるので、都度調べる。-itは頻出。 bashはシェルの指定。
本来、bash以外のシェルでもログインできるか試してみたいところだが、あいにくbashzshしか知らない。。。
zshはなんかinstallしなきゃいけない感じだった気がするので、こうするとbash以外に試せるものがない。(調べたら出てきたけど、サクッとはできなさそうで、そっちで詰まるのは本筋ではないので、割愛.)

一応zshでも試みてみるも、

$ docker run -it centos:latest zsh
docker: Error response from daemon: OCI runtime create failed: container_linux.go:296: starting container process caused "exec: \"zsh\": executable file not found in $PATH": unknown.

そらそうやな。 ほかのとりあえず名前知っているシェルを手当たり次第試してみる。

$ docker run -it centos:latest tcsh
docker: Error response from daemon: OCI runtime create failed: container_linux.go:296: starting container process caused "exec: \"tcsh\": executable file not found in $PATH": unknown.
ERRO[0000] error waiting for container: context canceled

だめ。

$ docker run -it centos:latest tcsh
docker: Error response from daemon: OCI runtime create failed: container_linux.go:296: starting container process caused "exec: \"tcsh\": executable file not found in $PATH": unknown.
ERRO[0000] error waiting for container: context canceled

だめ。

$ docker run -it centos:latest sh
sh-4.2#
sh-4.2# echo $SHELL
/bin/bash

やった!入れた!と思ってシェルを確認してみると、、、
これただのbashやんけ!!
と、そもそものbashとshの違いを調べてみると、
shはbashシンボリックリンクを貼っているとのこと。

$ docker run -it centos:latest bash
# ll /bin/ | grep sh
-rwxr-xr-x  1 root root  964544 Apr 11 00:53 bash
lrwxrwxrwx  1 root root      10 May 31 18:01 bashbug -> bashbug-64
-rwxr-xr-x  1 root root    6964 Apr 11 00:52 bashbug-64
-rws--x--x  1 root root   23960 Apr 11 06:50 chsh
-rwxr-xr-x  1 root root   15864 Apr 12 18:44 lchsh
lrwxrwxrwx  1 root root      19 May 31 18:02 setup-nsssysinit -> setup-nsssysinit.sh
-rwxr-xr-x  1 root root    1539 May 16 15:20 setup-nsssysinit.sh
lrwxrwxrwx  1 root root       4 May 31 18:01 sh -> bash
-rwxr-xr-x  1 root root   37448 Apr 11 04:35 sha1sum
-rwxr-xr-x  1 root root   41600 Apr 11 04:35 sha224sum
-rwxr-xr-x  1 root root   41600 Apr 11 04:35 sha256sum
-rwxr-xr-x  1 root root   41592 Apr 11 04:35 sha384sum
-rwxr-xr-x  1 root root   41592 Apr 11 04:35 sha512sum
-rwxr-xr-x  1 root root   10371 Apr 11 04:16 show-changed-rco
-rwxr-xr-x  1 root root   16572 Apr 11 04:16 show-installed
-rwxr-xr-x  1 root root   54216 Apr 11 04:35 shred
-rwxr-xr-x  1 root root   50320 Apr 11 04:35 shuf
-rwxr-xr-x  1 root root   15904 Apr 11 06:50 unshare

確かにシンボリックってる。
それはさておき、基本的にはbashとshはおんなじような動きをするらしい。 posixうんたらが違いだとか。

/bin/sh と /bin/bash の違い - 双六工場日誌

脱線したが、戻します。 dockerのcentosにログイン後、centosで有ることを確認しておきます。

[root@75ff963973c6 /]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)

いいですね。

コンテナを確認

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
de5bdc2e3f95        centos:latest       "bash"              6 minutes ago       Up 6 minutes                            vigilant_hoover
$ d ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                    NAMES
de5bdc2e3f95        centos:latest       "bash"                   7 minutes ago       Up 7 minutes                                         vigilant_hoover
67c4c9131574        hogee_web           "bundle exec rails s…"   8 days ago          Exited (1) 8 days ago                                hogee_web_run_6
.
.
.

STATUSがUPになっておりまする。

dockerのimageはどこに保存されるのか

調べてみると、docker for macのアプリののPreferenceから確認できると。 f:id:benzenetarou:20180704020006p:plain

ネットにあった情報と微妙に違うが頑張って探した。

$ cd /Users/yoshii/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/
$ ls -lh
total 13994832
-rw-r--r--@ 1 yoshii  staff    64G  7  4 01:50 Docker.raw
-rw-r--r--  1 yoshii  staff    64K  7  3 21:53 console-ring
-rw-r--r--  1 yoshii  staff    64K  7  3 21:53 database.iso
-rw-r--r--  1 yoshii  staff   3.3K  7  3 21:53 hyperkit.json
-rw-r--r--  1 yoshii  staff     3B  7  3 21:53 hyperkit.pid
-rw-r--r--  1 yoshii  staff     0B  2  9 18:10 lock
drwxr-xr-x  2 yoshii  staff    64B  2  9 18:10 log
-rw-r--r--  1 yoshii  staff    36B  2  9 18:10 nic1.uuid
-rw-r--r--  1 yoshii  staff     2B  7  3 21:53 pid
-rw-r--r--  1 yoshii  staff   2.2K  7  3 21:53 syslog
lrwxr-xr-x  1 yoshii  staff    12B  7  3 21:53 tty -> /dev/ttys000

おいおい知らぬ間に64Gも使ってたのかよコイツ。。。
なんの情報を持ってんだが。。。 と思って、よくよく先程のDocker for Macの情報を見てみると、
f:id:benzenetarou:20180704020006p:plain

Virtual disk image size: 64.0 GB (allocated: 7.2GB)
とな。 多分自分で最初の設定のときにこのくらいいったれーって64GBを用意しておいたけど、実際には7.2GBしか使われていないってことな気がしてきた。

確認します。

ll
total 13994832
-rw-r--r--@ 1 yoshii  staff  68719476736  7  4 01:50 Docker.raw
-rw-r--r--  1 yoshii  staff        65536  7  3 21:53 console-ring
-rw-r--r--  1 yoshii  staff        65536  7  3 21:53 database.iso
-rw-r--r--  1 yoshii  staff         3419  7  3 21:53 hyperkit.json
-rw-r--r--  1 yoshii  staff            3  7  3 21:53 hyperkit.pid
-rw-r--r--  1 yoshii  staff            0  2  9 18:10 lock
drwxr-xr-x  2 yoshii  staff           64  2  9 18:10 log
-rw-r--r--  1 yoshii  staff           36  2  9 18:10 nic1.uuid
-rw-r--r--  1 yoshii  staff            2  7  3 21:53 pid
-rw-r--r--  1 yoshii  staff         2256  7  3 21:53 syslog
lrwxr-xr-x  1 yoshii  staff           12  7  3 21:53 tty -> /dev/ttys000

68,719,476,736B
おっとそもそも64GBじゃないんかーいと思ったが、これは

>>> 64 * 1024 * 1024 * 1024
68719476736

でしたな。失敬。

$ docker run -it ubuntu:latest bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
6b98dfc16071: Pull complete
4001a1209541: Pull complete
6319fc68c576: Pull complete
b24603670dc3: Pull complete
97f170c87c6f: Pull complete
Digest: sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d
Status: Downloaded newer image for ubuntu:latest
root@f0e98565c20b:/#
root@f0e98565c20b:/# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

はい、ubuntuが入りました。

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hogee_web           latest              13cc204c812e        9 days ago          881MB
ubuntu              latest              113a43faa138        3 weeks ago         81.2MB
centos              latest              49f7960eb7e4        4 weeks ago         200MB
ruby                2.3.6               7ab6e81790b8        3 months ago        722MB
myapp_web           latest              1b99a62bd7f1        3 months ago        841MB
<none>              <none>              33139e4ab9e2        3 months ago        808MB
mysql               5.7                 5d4d51c57ea8        4 months ago        374MB
ruby                2.3.0               7ca70eb2dfea        2 years ago         725MB

docker imagesによると、ubuntuは81.2MBらしいです。

先程のファイルサイズが増加しているか確認しようと思ったけど、 これは$ ls -l /Users/yoshii/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/する必要もないですね。
そもそも/Users/yoshii/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.rawのファイル容量がきりの良すぎる数字の時点でおかしかった。
これはDocker.rawファイルに全部情報がいい感じに入っているようだ。僕らからは確認のしようがない。

ja.stackoverflow.com とな。

linuxだと、/var/lib/docker配下にできるらしいな。 一応やってみます。

linuxでdockerを起動

こういうときはEC2のt2.microインスタンスをサクッと立ち上げる。富豪だ。 ネットワークもこっちのほうが早いから、すぐAWS使っちゃう。富豪だ。

sudo su -
yum install -y docker 
service docker start
docker run -it centos:latest bash

とりあえずサクッとcentosがinstallできた。 一旦exitして、実態の在り処を探す。

# cd /var/lib/docker
ll
total 48
drwx------ 2 root root 4096 Jul  3 17:36 builder
drwx--x--x 3 root root 4096 Jul  3 17:36 containerd
drwx------ 3 root root 4096 Jul  3 17:36 containers
drwx------ 3 root root 4096 Jul  3 17:36 image
drwxr-x--- 3 root root 4096 Jul  3 17:36 network
drwx------ 6 root root 4096 Jul  3 17:36 overlay2
drwx------ 4 root root 4096 Jul  3 17:36 plugins
drwx------ 2 root root 4096 Jul  3 17:36 runtimes
drwx------ 2 root root 4096 Jul  3 17:36 swarm
drwx------ 2 root root 4096 Jul  3 17:36 tmp
drwx------ 2 root root 4096 Jul  3 17:36 trust
drwx------ 2 root root 4096 Jul  3 17:36 volumes
#
#
# du -sh ./*
20K ./builder
116K  ./containerd
48K ./containers
736K  ./image
52K ./network
211M  ./overlay2
20K ./plugins
4.0K  ./runtimes
4.0K  ./swarm
4.0K  ./tmp
4.0K  ./trust
28K ./volumes

怪しいのはoverlay2ですね。

# ll overlay2/
total 16
drwx------ 4 root root 4096 Jul  3 17:38 2f040d74f70b4d498e644d0c04af7ee9a137881795cc377912871588dd4142b8
drwx------ 4 root root 4096 Jul  3 17:36 2f040d74f70b4d498e644d0c04af7ee9a137881795cc377912871588dd4142b8-init
drwx------ 3 root root 4096 Jul  3 17:36 eb694a3cfd827ea603a03347037a4f50e537151e18aff3c8ab80482d274ebca0
drwx------ 2 root root 4096 Jul  3 17:36 l
#
#
[root@ip-172-31-44-122 docker]# du -sh overlay2/*
32K overlay2/2f040d74f70b4d498e644d0c04af7ee9a137881795cc377912871588dd4142b8
40K overlay2/2f040d74f70b4d498e644d0c04af7ee9a137881795cc377912871588dd4142b8-init
211M  overlay2/eb694a3cfd827ea603a03347037a4f50e537151e18aff3c8ab80482d274ebca0
16K overlay2/l
find /var/lib/docker/overlay2/. |wc
  10705   10705 1268385

どうやらたくさんのファイル群が入っているようだ。
あまり踏み込まないようにしよう。

docker run -it ubuntu:latest bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
6b98dfc16071: Pull complete
4001a1209541: Pull complete
6319fc68c576: Pull complete
b24603670dc3: Pull complete
97f170c87c6f: Pull complete
Digest: sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d
Status: Downloaded newer image for ubuntu:latest
root@67da5f8e8b2c:/#

容量を確認する。

[root@ip-172-31-44-122 docker]# du -sh ./*
20K ./builder
116K  ./containerd
92K ./containers
1.1M  ./image
52K ./network
297M  ./overlay2
20K ./plugins
4.0K  ./runtimes
4.0K  ./swarm
4.0K  ./tmp
4.0K  ./trust
28K ./volumes

詳細も確認する。

[root@ip-172-31-44-122 overlay2]# ll /var/lib/docker/overlay2
total 44
drwx------ 3 root root 4096 Jul  3 17:45 06142c28a84ecc2757409fad89ad24c6e8d5e0f787937245c0c7ef34a8157db1
drwx------ 4 root root 4096 Jul  3 17:45 17cd521c63cb54de57f1918706cb950920b2664c0b93390f3c8ef60d55cef536
drwx------ 4 root root 4096 Jul  3 17:45 2d85d5672c17ce9441e77328e210bdcaad440cfadbbce39f32a46870aa51c6fc
drwx------ 4 root root 4096 Jul  3 17:45 2d85d5672c17ce9441e77328e210bdcaad440cfadbbce39f32a46870aa51c6fc-init
drwx------ 4 root root 4096 Jul  3 17:38 2f040d74f70b4d498e644d0c04af7ee9a137881795cc377912871588dd4142b8
drwx------ 4 root root 4096 Jul  3 17:36 2f040d74f70b4d498e644d0c04af7ee9a137881795cc377912871588dd4142b8-init
drwx------ 4 root root 4096 Jul  3 17:45 4c69f1a2eea8fba87437187838a942c75fea48b50744718288c6f7e72529827e
drwx------ 4 root root 4096 Jul  3 17:45 5e834467fed8e25a3ee8ce8c39b565171dd97bf7d4de5d9d86772144e18cea22
drwx------ 3 root root 4096 Jul  3 17:36 eb694a3cfd827ea603a03347037a4f50e537151e18aff3c8ab80482d274ebca0
drwx------ 4 root root 4096 Jul  3 17:45 f42660ffc61032bf307beaab41da57fe93acff57a59f8cc028a6baf1866c8b06
drwx------ 2 root root 4096 Jul  3 17:45 l

ubuntuのものと思われるものが増えている。

なるほど。
なるほど。

Dockerのファイル保存場所とか整理できたので、一旦ここまでにする。