DockerコンテナベースDockerコンテナベース:ファイルシステムファイルシステム


CgroupNamespaceの管理の下で、容器は実は1つの隔離と制限の で、それでは容器のファイルシステムはまたどのように隔離したのですか?

Chrootコマンド


chroot :
#   /bin/bash  /leon0204/home
#   ls   /leon0204/home  
$ chroot /leon0204/home /bin/bash
/bin/bashでは、ルートディレクトリが変更され、ビューを変更する方法とnamespaceが原理です.

Rootfs


前節では、コンテナが開始されたのは親プロセスとN個のforkから出た子 であり、この親プロセスはchrootによってビューが変更されたため、コンテナのルートディレクトリは隔離されたサブディレクトリであり、このディレクトリをシステムのように見せるために、このディレクトリの下にを追加することが多いことを知っています.例えば、/bin/etcなどです.rootfsコンテナミラーリング自体は、オペレーティングシステムに含まれるファイル、構成、ディレクトリであり、オペレーティングシステムカーネルは含まれていません.Linuxシステムの起動時にシステムカーネルをロードする必要があります.では、ミラーのrootfsには がありません.どのように正常にロードしますか?dockerのカーネルは に確立されているため、ホストとカーネルを共有し、docker であることを覚えておいてください.したがって、dockerrootfsは、実際にパッケージ化されているのは、アプリケーションだけでなく、言語的な依存ではなく、アプリケーションが実行するすべての依存である.これにより、マシン間の環境同期の問題が解決されます.

Layerはレイヤ別に公開


A同僚は1つのJAVAアプリケーションを発表して、1つのオペレーティングシステムのrootfsを含んで、B同僚は1つのJAVAアプリケーションを発表して同様に1つのrootfsを作る必要があって、どのように私達の間の を抽出しますか?ベースのミラーを作成します( )?dockerはこの実装において,base image(層)という概念を導入し,AとBがlayerミラーリングシステムを作成する際に,rootfs dockerを記録し, としてAB rootfsの交差を取って我々JAVA を形成し,以降,それぞれのアプリケーションでこのミラーリングを用いることができることを発表した.

UFS

base . UFS Union File System:機能は、複数の異なるディレクトリUnionFSを1つのディレクトリの下に、例えばAとBディレクトリのファイルをCディレクトリの下に共同でマウントすることができる.このようにA&Bの下のファイルはCとマウントされ,unoin mount増減が変化する.

AUFS

はUnion FSの書き換えと改良されたバージョンであり、これもAUFSで使用されているバージョンであり、dockerのミラーを例に、このミラー(rootfs)のAUFS構造を以下のように表示する.
[root@macco-web ~]# docker image inspect mysql:5.6
"RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:9c2f1836d49346677f8280bf0eb89c20853f6af4aa6e2fad87b0000bb181fad2",
                "sha256:fd3b39222ee496a3cc115a4142a26babcad2f2008f4053ad5f893fcc503cd7fe",
                "sha256:7ffd9f004dec5b25c7861e97e8f4ed5534f980b270fe03d0b834c0e6db843564",
                "sha256:c782fd1b83e9e2b2a904c57cb887b59fd58704712ad73452de817abbd2d766a8",
                "sha256:db76afa2e4c2f4c0077d028f37d73a6408cf2fc4bca1b0156225edd02f7e5cbc"
            ]
        },

このdockerはMysql:5.65(layer)から構成されていることがわかります.各層は実際にはシステムの構成部分であり、 を含み、使用時に を使用してAUFS サブシステムを構成しています.このディレクトリの下にどのような文書があるかを確認します.
# pwd
/statics/docker/overlay/f8611219ff61896ca3ac0edc4e1c2207f934da81492c901b7768d115896f8cab/root
# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

まとめ


コンテナは、 rootfsを介してaufsの完全なdockerファイルシステム、すなわち、コンテナミラーを作成します.ミラーはまたrootfs linux階層設計を通じて、ミラーの設計をインクリメンタル化し、コラボレーションのbaseをより小さくし、コラボレーションの方式をより迅速にし、誰もがlayer を使用して容器base を実現した.
Namespaceを隔離する.Cgroupsは制限をします;Rootfsがサブシステムを作る