Dockerクイックスタート3-dockerイメージ
Dockerイメージには、コンテナーの起動に必要なファイルシステムとその内容が含まれているため、Dockerコンテナーの作成と起動に使用されます。
Dockerイメージは階層化された構築メカニズムを採用しており、最下層はbootfsで、その後にrootfsが続きます。
- Bootfsは、ブートローダーやカーネルなど、システムのブートに使用されるファイルシステムです。コンテナが起動すると、メモリリソースを節約するためにアンロードされます。
- rootfsはカーネルによって
只读
モードとしてマウントされ、その後联合挂载
、テクノロジーを介して追加の可写
レイヤーがマウントされます
Dockerイメージレイヤー
Docerのミラーは層ごとに積み重ねられ、下の層は親ミラーと呼ばれ、下の層はベースミラーと呼ばれます。
最上層は可读写
層であり、最只读
下層は層です
和overlayfs
aufsは、高度なマルチレイヤー統合ファイルシステムです。
Linuxファイルシステムの実装にはaufsとoverlayfsの両方が使用されますが联合挂载
、これら2つに加えて、dockerはbtrfs、devicemapper、vfsなどのファイルシステムもサポートしています。
Docerの初期バージョンでは、ubuntuの下でaufsが使用され、CentOS7ではdevicemapperが使用されていました。Docerの新しいバージョンでは、overlayfsが使用され、overlay2バージョンに開発されました。
Docerイメージ取得シーケンス:コンテナーが開始されると、Dockerデーモンはローカルから関連イメージを取得しようとしますが、ローカルイメージが存在しない場合は、レジストリからイメージをダウンロードしてローカルに保存します。
非常に有名なサードパーティのミラーウェアハウス:https : //quay.io/
コンテナーに基づいてイメージを作成する
root@node01:~# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx stable-alpine 8c1bfa967ebf 7 days ago 21.5MB
busybox latest c7c37e472d31 2 weeks ago 1.22MB
quay.io/coreos/flannel v0.12.0-amd64 4e9f801d2217 4 months ago 52.8MB
# 创建容器,并在容器内创建文件
root@node01:~# docker container run -i -t --name bbox-01 busybox:latest
/ # ls
bin dev etc home proc root sys tmp usr var
/ # mkdir -pv /data/html
created directory: '/data/'
created directory: '/data/html'
/ # echo "<h1>Hello Word!</h1>" > /data/html/index.html
/ # cat /data/html/index.html
<h1>Hello Word!</h1>
別のターミナルを作成し、コンテナに基づいてミラーを作成します
root@node01:~# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
787e4b3b2516 busybox:latest "sh" 4 minutes ago Up 4 minutes bbox-01
root@node01:~# docker container commit -p -m "Create /data/html/index.html" bbox-01 busybox-httpd:v0.1
sha256:806601ab556504829ff18d36ff308becab6ae351c7ae8f7b2adaecace52787bc
root@node01:~# docker image ls busybox*
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox-httpd v0.1 806601ab5565 44 seconds ago 1.22MB
busybox latest c7c37e472d31 2 weeks ago 1.22MB
コンテナbbox-01
を終了して削除し、作成したイメージでコンテナを実行します
root@node01:~# docker container rm bbox-01
root@node01:~# docker container run -t -i --name bbox-http-01 busybox-httpd:v0.1
/ # ls data/html/
index.html
/ # cat data/html/index.html
<h1>Hello Word!</h1>
/ #
新しい画像/data/html/index.html
が保持されるため、元の画像よりも/data/html/index.html
ファイル数の多い元の画像を基に新しい画像を作成しました。
httpdサービスはbusyboxミラーで実行でき、/data/html/index.html
ファイルが作成されたので、ミラーをhttpdサービスを提供するミラーにすることができます。元のイメージにはデフォルトの起動sh
コマンドがあり、起動時に実行されているhttpd
コマンドを関連するコマンドに変更するだけで済みます。
root@node01:~# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6d6e33d7acc4 busybox-httpd:v0.1 "sh" 5 minutes ago Up 5 minutes bbox-http-01
root@node01:~# docker container commit -p -m "run httpd" -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' bbox-http-01 busybox-httpd:v0.2
sha256:985f056d206d3b3c3e1b62c66bcda672c5daf902245d9cf62e27a5bdd1de5b37
root@node01:~# docker container run -d --name bbox-httpd-02 busybox-httpd:v0.2
97ca3d6118ecbbb8ad5d4ec611b7ec425b66a959b663ea8f3dd689931e8930f4
root@node01:~# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
97ca3d6118ec busybox-httpd:v0.2 "/bin/httpd -f -h /d…" 8 seconds ago Up 6 seconds bbox-httpd-02
6d6e33d7acc4 busybox-httpd:v0.1 "sh" 11 minutes ago Up 11 minutes bbox-http-01
docker container commit -p -m "run httpd" -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' bbox-http-01 busybox-httpd:v0.2
、-c
オプションを使用して、コンテナの起動時に実行中のコマンドを変更できます。
root@node01:~# docker container inspect bbox-httpd-02 | grep -i ipaddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.3",
"IPAddress": "172.17.0.3",
root@node01:~# curl http://172.17.0.3
<h1>Hello Word!</h1>
busybox
ミラーは、httpd
サービスを提供するミラーに正常に作成されました。
ミラーのアップロードとダウンロード
ローカルで作成されたミラーをdocker hub
、aliyun的镜像平台
またはプライベートミラーウェアハウスなどにアップロードして、ミラーを他のユーザーと共有することができます。
次に、REPOSITORY
この名前はリモートウェアハウスの名前に対応するdocker hub
必要があります。例として、Push to を使用します。最初に、docker hub
以下に示すように、アカウントを登録し、対応するウェアハウスを作成する必要があります。
それREPOSITORY
それがあるべきzhaochj/httpd
、提供していることhttpd
のbusybox
ミラーをアップロードしますdocker hub
アップロードされた名前の要件を満たすように、対応する画像のタグを再設定します
root@node01:~# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox-httpd v0.2 985f056d206d 32 minutes ago 1.22MB
busybox-httpd v0.1 806601ab5565 47 minutes ago 1.22MB
nginx stable-alpine 8c1bfa967ebf 7 days ago 21.5MB
busybox latest c7c37e472d31 2 weeks ago 1.22MB
quay.io/coreos/flannel v0.12.0-amd64 4e9f801d2217 4 months ago 52.8MB
root@node01:~# docker image tag busybox-httpd:v0.2 zhaochj/httpd:v0.1
root@node01:~# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox-httpd v0.2 985f056d206d 35 minutes ago 1.22MB
zhaochj/httpd v0.1 985f056d206d 35 minutes ago 1.22MB
...
アップロードする前にログインする必要があります
root@node01:~# docker login -u zhaochj
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
root@node01:~# docker image push zhaochj/httpd:v0.1
The push refers to repository [docker.io/zhaochj/httpd]
aba5952cfa04: Pushed
8b84b15db17e: Pushed
50761fe126b6: Mounted from library/busybox
v0.1: digest: sha256:63ecaa4990fb60f8aab701d690e5ef12cb664491753fee0208d080ca9ee8c28c size: 941
プッシュが完了するとdocker hub
上部に表示されます
中国本土で使用する場合は、aliyunの開発プラットフォームでミラーリングサービスを使用することをお勧めします。
画像のインポートとエクスポート
ローカルイメージは圧縮パッケージとしてエクスポートでき、圧縮パッケージを他のホストにコピーした後でインポートできます。
root@node01:~# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox-httpd v0.2 985f056d206d 4 hours ago 1.22MB
zhaochj/httpd v0.1 985f056d206d 4 hours ago 1.22MB
busybox-httpd v0.1 806601ab5565 4 hours ago 1.22MB
nginx stable-alpine 8c1bfa967ebf 7 days ago 21.5MB
busybox latest c7c37e472d31 2 weeks ago 1.22MB
quay.io/coreos/flannel v0.12.0-amd64 4e9f801d2217 4 months ago 52.8MB
# 将多个镜像打包导出
root@node01:~# docker image save -o myimages.gz busybox:latest busybox-httpd:v0.1
root@node01:~# ls
myimages.gz
root@node01:~# docker image rm busybox:latest busybox-httpd:v0.1
Untagged: busybox:latest
Untagged: busybox@sha256:9ddee63a712cea977267342e8750ecbc60d3aab25f04ceacfa795e6fce341793
Untagged: busybox-httpd:v0.1
root@node01:~# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox-httpd v0.2 985f056d206d 4 hours ago 1.22MB
zhaochj/httpd v0.1 985f056d206d 4 hours ago 1.22MB
nginx stable-alpine 8c1bfa967ebf 7 days ago 21.5MB
quay.io/coreos/flannel v0.12.0-amd64 4e9f801d2217 4 months ago 52.8MB
# 导入已打包的镜像
root@node01:~# docker image load -i myimages.gz
Loaded image: busybox:latest
Loaded image: busybox-httpd:v0.1
root@node01:~# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox-httpd v0.2 985f056d206d 4 hours ago 1.22MB
zhaochj/httpd v0.1 985f056d206d 4 hours ago 1.22MB
busybox-httpd v0.1 806601ab5565 4 hours ago 1.22MB
nginx stable-alpine 8c1bfa967ebf 7 days ago 21.5MB
busybox latest c7c37e472d31 2 weeks ago 1.22MB
quay.io/coreos/flannel v0.12.0-amd64 4e9f801d2217 4 months ago 52.8MB