Opensourcetechブログ

OpensourcetechによるNGINX/Zabbix/Neo4j/Linuxなどオープンソース技術に関するブログです。

DockerコンテナのコンテナID(識別子)について

 

こんにちは、LinuCエバンジェリストこと、鯨井貴博@opensourcetechです。

f:id:opensourcetech:20200526113034p:plain

 

Dockerコンテナでは、以下のようにコンテナID(識別子)が付与されています。

9beeba249f3eなど

root@ubuntu2004server:~# docker image pull nginx
Using default tag: latest
latest: Pulling from library/nginx
afb6ec6fdc1c: Pull complete
b90c53a0b692: Pull complete
11fa52a0fdc0: Pull complete
Digest: sha256:30dfa439718a17baafefadf16c5e7c9d0a1cde97b4fd84f63b69e13513be7097
Status: Downloaded newer image for nginx:latest
root@ubuntu2004server:~# docker image ls
^[[CREPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 9beeba249f3e 10 days ago 127MB
zabbix/zabbix-appliance latest 663a9b177b54 3 months ago 383MB
root@ubuntu2004server:~# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c134e490665b zabbix/zabbix-appliance:latest "/sbin/tini -- /usr/…" 9 days ago Up 9 days 0.0.0.0:80->80/tcp, 0.0.0.0:10051->10051/tcp, 443/tcp zabbix-appliance

 このコンテナIDですが、SHA256というハッシュ関数で導き出されたもので、実際には32バイト(64文字)で構成されます。

その先頭6バイト(12文字)が省略されて表示されています。

 

 

省略せずに表示させたい場合は、以下のように --no-trunc というオプションをつけれやればOK。※truncate(切り取り、省略)をしないの意味。

 

root@ubuntu2004server:~# docker image ls --no-trunc
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest sha256:9beeba249f3ee158d3e495a6ac25c5667ae2de8a43ac2a8bfd2bf687a58c06c9 10 days ago 127MB
zabbix/zabbix-appliance latest sha256:663a9b177b5407a259616c294a157d59f55db00f300f5e97fa6eb2a623c5adf0 3 months ago 383MB
root@ubuntu2004server:~# docker container ls --no-trunc
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c134e490665b73377dc7f9732fdfb14af7d1e031454edfe7e413e92a1d52ef6e zabbix/zabbix-appliance:latest "/sbin/tini -- /usr/bin/docker-entrypoint.sh" 9 days ago Up 9 days 0.0.0.0:80->80/tcp, 0.0.0.0:10051->10051/tcp, 443/tcp zabbix-appliance

 

 

 また、findでコンテナIDを検索しても同様のものを確認することはできます。

root@ubuntu2004server:~# find / -name 9beeba249f3e*
/var/snap/docker/common/var-lib-docker/image/overlay2/imagedb/content/sha256/9beeba249f3ee158d3e495a6ac25c5667ae2de8a43ac2a8bfd2bf687a58c06c9
root@ubuntu2004server:~# find / -name 663a9b177b54*
/var/snap/docker/common/var-lib-docker/image/overlay2/imagedb/content/sha256/663a9b177b5407a259616c294a157d59f55db00f300f5e97fa6eb2a623c5adf0
root@ubuntu2004server:~# find / -name c134e490665b*
/sys/fs/cgroup/pids/docker/c134e490665b73377dc7f9732fdfb14af7d1e031454edfe7e413e92a1d52ef6e
/sys/fs/cgroup/perf_event/docker/c134e490665b73377dc7f9732fdfb14af7d1e031454edfe7e413e92a1d52ef6e
/sys/fs/cgroup/cpuset/docker/c134e490665b73377dc7f9732fdfb14af7d1e031454edfe7e413e92a1d52ef6e
/sys/fs/cgroup/memory/docker/c134e490665b73377dc7f9732fdfb14af7d1e031454edfe7e413e92a1d52ef6e
/sys/fs/cgroup/freezer/docker/c134e490665b73377dc7f9732fdfb14af7d1e031454edfe7e413e92a1d52ef6e
/sys/fs/cgroup/devices/docker/c134e490665b73377dc7f9732fdfb14af7d1e031454edfe7e413e92a1d52ef6e
/sys/fs/cgroup/net_cls,net_prio/docker/c134e490665b73377dc7f9732fdfb14af7d1e031454edfe7e413e92a1d52ef6e
/sys/fs/cgroup/hugetlb/docker/c134e490665b73377dc7f9732fdfb14af7d1e031454edfe7e413e92a1d52ef6e
/sys/fs/cgroup/cpu,cpuacct/docker/c134e490665b73377dc7f9732fdfb14af7d1e031454edfe7e413e92a1d52ef6e
/sys/fs/cgroup/systemd/docker/c134e490665b73377dc7f9732fdfb14af7d1e031454edfe7e413e92a1d52ef6e
/var/snap/docker/common/var-lib-docker/image/overlay2/layerdb/mounts/c134e490665b73377dc7f9732fdfb14af7d1e031454edfe7e413e92a1d52ef6e
/var/snap/docker/common/var-lib-docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/c134e490665b73377dc7f9732fdfb14af7d1e031454edfe7e413e92a1d52ef6e
/var/snap/docker/common/var-lib-docker/containers/c134e490665b73377dc7f9732fdfb14af7d1e031454edfe7e413e92a1d52ef6e
/var/snap/docker/common/var-lib-docker/containers/c134e490665b73377dc7f9732fdfb14af7d1e031454edfe7e413e92a1d52ef6e/c134e490665b73377dc7f9732fdfb14af7d1e031454edfe7e413e92a1d52ef6e-json.log
/var/snap/docker/423/run/docker/runtime-runc/moby/c134e490665b73377dc7f9732fdfb14af7d1e031454edfe7e413e92a1d52ef6e
/var/snap/docker/423/run/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/c134e490665b73377dc7f9732fdfb14af7d1e031454edfe7e413e92a1d52ef6e
/var/snap/docker/423/run/docker/containerd/c134e490665b73377dc7f9732fdfb14af7d1e031454edfe7e413e92a1d52ef6e

 

 

なお、コンテナIDの生成についてはランダムで発行される仕組みです。

newContainer関数→generateIDAndName関数→generateID関数→rand関数 と流れていきます。

How the docker container id is generated - Stack Overflow

 

詳細は、各ソースコード(GO言語)で見ることが出来ます。

https://github.com/moby/moby/blob/a9bd60d674f85c2161bb702404b23501d6b746c3/daemon/container.go#L128

https://github.com/moby/moby/blob/e511b3be894465d81c21cab35b4f292d9250a4ca/daemon/names.go#L38

https://github.com/moby/moby/blob/634a848b8e3bdd8aed834559f3b2e0dfc7f5ae3a/pkg/stringid/stringid.go#L35

https://github.com/moby/moby/blob/634a848b8e3bdd8aed834559f3b2e0dfc7f5ae3a/pkg/random/random.go#L18

 

Rand関数については、以下参照。

https://golang.org/pkg/crypto/rand/

https://golang.org/pkg/math/rand/

 

 

アフィリエイトのアクセストレード

 

 

 

 

 

 

www.slideshare.net

github.com

www.facebook.com

twitter.com

www.instagram.com

 

 

にほんブログ村 IT技術ブログ Linuxへ
Linux

にほんブログ村 IT技術ブログ オープンソースへ
オープンソース

 

 

Opensourcetech by Takahiro Kujirai