原文:https://www.cnblogs.com/ylqh/p/10600700.html
-----------------------------------------------
鏡像是動態的容器的靜態表示,包括容器所要運行的應用代碼以及運行時的配置。Docker鏡像包括一個或者多個只讀層(read-only layers),因此,鏡像一旦被創建就再也不能被修改了,一個運行着的Docker容器時一個鏡像的實例(instantiation)。從同一個鏡像中運行的容器包含有相同的應用代碼和運行時依賴。但是不像鏡像是靜態的,每個運行着的容器都有一個可寫層(writable layer,也成為容器層 container layer),它位於底下的若干只讀層之上。運行時的所有變化,包括對數據和文件的寫和更新,都會保存在這個層中,因此,從同一個鏡像運行的多個容器包含了不同的容器層。
關於鏡像是什么總結:
1.一個分層存儲的文件
2.一個軟件的環境
3.一個鏡像可以創建N個容器
4.又稱一種標准化的交付
5.一個不包含Linux內核又精簡的Liunx操作系統
助理解:鏡像不是單一的文件,而是多層構成,我們可以通過docker history <ID/NAME> 查看鏡像中各層內容及其大小,每層對應着一個Dockerfile中的一條指令,另外docker鏡像存儲在/var/lib/docker/<storage-d'river>中。
鏡像從哪里來的呢?
Docker hub是由Docker公司負責維護的公共注冊中心,包含大量的容器鏡像,Docker工具默認從這個公共鏡像庫下載鏡像,地址為:https://hub.docker.com/search/?q=&type=image
鏡像加速器的配置:https://www.daocloud.io/mirror
配置方法:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sg | sh -s http://f1361db2.m.daocloud.io
Docker有三種方式創建鏡像:
- 基於已有鏡像的容器創建:創建一個容器,運行若干命令后,在使用docker commit來生成一個新的鏡像。不建議使用這種方案。
- 基於本地模板導入,使用OpenVZ提供的模板來創建,docker import來生成新的鏡像。不經常用。
- 基於Dockerfile創建,創建一個Dockerfile,然后在使用docker build來創建一個鏡像,大多數都會使用Dockerfile來創建鏡像。
鏡像相關的基礎理論
1. 理解Host OS ,Guest OS and Base image相關理論
舉例說明:一台主機上安裝的時Centos操作系統,現在上面跑了一個Ubuntu容器。此時,Host OS時Centos,Guest OS是Ubuntu。Guest OS也被稱為容器的Base Image。
說明:
- linux內核和版本:所有 Linux 發行版都采用相同的 Linux 內核(kernel),然后所有發行版對內核都有輕微改動。這些改動都會上傳回 linux 社區,並被合並。
- linux容器環境:因為所有Linux發行版都包含同一個linux 內核(有輕微修改),以及不同的自己的軟件,因此,會很容易地將某個 userland 軟件安裝在linux 內核上,來模擬不同的發行版環境。比如說,在 Ubuntu 上運行 Centos 容器,這意味着從 Centos 獲取 userland 軟件,運行在 Ubuntu 內核上。因此,這就像在同一個操作系統(linux 內核)上運行不同的 userland 軟件(發行版的)。這就是為什么Docker 不支持在 Linux 主機上運行 FreeBSD 或者windows 容器。
容器的base image 並不是真正的base OS,base image 會遠遠的比 base OS更輕量。它只安裝發行版特殊的部分
base image的用途或者作用是什么呢?
docker容器文件系統與host OS是隔離的,容器鏡像中的應用軟件無法看到主機文件系統,除非將主機文件系統掛載為容器的卷。因此,可以想象一下,你容器中的應用依賴於各種操作系統庫,因此我們不得不將這些庫打包到鏡像之中,另外,base image會讓我們使用到各個發行版的包管理系統,比如yum 和 apt-get。而且,各個linux發行版的base image也不是普通的發行版,而是一個簡化了的版本。而且,base image並不帶有linux內核,因為主機會使用主機的內核。
因此,需要注重理解image 和 OS這兩個概念,之所以成為base OS,是因為base image中並不包括完整的OS,而這一點,是容器與虛擬機之間的本質區別之一。容器是共享主機上的linux內核。
2. Container Base image
從上面內容可以看出,容器把linux鏡像從內核空間和用戶空間進行了分開管理,對host OS而言,它更側重與內核,加上少量的用戶空間內容;對Guest OS 而言,它只側重於用戶空間,只包括庫文件,編譯器,配置文件,以及用戶代碼。
docker images詳細用法
1.獲取鏡像
用法:docker pull NAME[:TAG],如果沒有顯示TAG,則默認是latest標簽,也就是最新版本的鏡像。
root@S1:~# docker pull ubuntu Using default tag: latest latest: Pulling from library/ubuntu 898c46f3b1a1: Pull complete 63366dfa0a50: Pull complete 041d4cd74a92: Pull complete 6e1bee0f8701: Pull complete Digest: sha256:017eef0b616011647b269b5c65826e2e2ebddbe5d1f8c1e56b3599fb14fabec8 Status: Downloaded newer image for ubuntu:latest
默認下載的是最新的ubuntu鏡像,默認下載的鏡像地址registry.hub.docker.com 相當於如下命令: docker pull registry.hub.docker.com/ubuntu:latest root@S1:~# docker run -d -t -i ubuntu /bin/bash 082d88976a54d5b05ae39fd5eed6ccff28a6a8881bde553cd48efd75ac3bd754
2.查看鏡像信息:
使用docker images 命令可以列出本地主機已有的鏡像。
root@S1:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 94e814e2efa8 2 weeks ago 88.9MB hello-world latest fce289e99eb9 2 months ago 1.84kB REPOSITORY:來自哪一個倉庫,比如ubuntu倉庫 TAG:鏡像的標簽信息,最新的 鏡像的id號:這個是唯一的 鏡像創建時間 鏡像大小 其中鏡像的id信息非常重要,因為他是唯一標識了鏡像 tag信息用於標記來自同一個倉庫的不同鏡像,后續工作我們可以使用tag為本地鏡像添加新的標簽,我們也可以將它用於ci/cd相結合起來使用(后續文章會介紹到,盡情關注) eg:添加一個新的標簽: root@S1:~# docker tag ubuntu:latest ubuntu:16.04 root@S1:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 16.04 94e814e2efa8 2 weeks ago 88.9MB ubuntu latest 94e814e2efa8 2 weeks ago 88.9MB hello-world latest fce289e99eb9 2 months ago 1.84kB 這里細心的同學會發現,不同的標簽的鏡像的ID是完全一致的,說明它們實際上指向了同一個鏡像文件,只是名字不同而已,可以理解為linux的軟連接或者window的快捷方式。 查看鏡像的詳細信息 root@S1:~# docker inspect 94e814e2efa8 [ { "Id": "sha256:94e814e2efa8845d95b2112d54497fbad173e45121ce9255b93401392f538499", "RepoTags": [ "ubuntu:16.04", "ubuntu:latest" ], "RepoDigests": [ "ubuntu@sha256:017eef0b616011647b269b5c65826e2e2ebddbe5d1f8c1e56b3599fb14fabec8" ], "Parent": "", "Comment": "", "Created": "2019-03-12T00:20:17.419392342Z", "Container": "94772adb8869651410d18062838667884a555cf1878d567734e99dc695d6f5bf", "ContainerConfig": { "Hostname": "94772adb8869", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "/bin/sh", "-c", "#(nop) ", "CMD [\"/bin/bash\"]" ], "ArgsEscaped": true, "Image": "sha256:881686baf75637792ebd93d88243b6f5bb89833ce325f9e32e2e70208f0efb64", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": {} }, "DockerVersion": "18.06.1-ce", "Author": "", "Config": { "Hostname": "", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], "Cmd": [ "/bin/bash" ], "ArgsEscaped": true, "Image": "sha256:881686baf75637792ebd93d88243b6f5bb89833ce325f9e32e2e70208f0efb64", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": null }, "Architecture": "amd64", "Os": "linux", "Size": 88908191, "VirtualSize": 88908191, "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/e9af142ff18154b104fcae496ca9cdba91a7de36d929738a61fb044df3fd21cb/diff:/var/lib/docker/overlay2/4ebe2a5f541f89e24fc6a4c6f22817e0b5e39358ee9ba507f792e606386c2727/diff:/var/lib/docker/overlay2/66fa62d0da114b8b02bd376cc4507b196dccccf0c1f9635d9db5d5706e95cc39/diff", "MergedDir": "/var/lib/docker/overlay2/ef8439354f7b197a7bbfa74fa6b0dfd0dabf4bd8009b7528ce5b1d0992b290a5/merged", "UpperDir": "/var/lib/docker/overlay2/ef8439354f7b197a7bbfa74fa6b0dfd0dabf4bd8009b7528ce5b1d0992b290a5/diff", "WorkDir": "/var/lib/docker/overlay2/ef8439354f7b197a7bbfa74fa6b0dfd0dabf4bd8009b7528ce5b1d0992b290a5/work" }, "Name": "overlay2" }, "RootFS": { "Type": "layers", "Layers": [ "sha256:762d8e1a60542b83df67c13ec0d75517e5104dee84d8aa7fe5401113f89854d9", "sha256:e45cfbc98a505924878945fdb23138b8be5d2fbe8836c6a5ab1ac31afd28aa69", "sha256:d60e01b37e74f12aa90456c74e161f3a3e7c690b056c2974407c9e1f4c51d25b", "sha256:b57c79f4a9f3f7e87b38c17ab61a55428d3391e417acaa5f2f761c0e7e3af409" ] }, "Metadata": { "LastTagTime": "2019-03-26T19:07:55.36713665+08:00" } } ] docker inspect命令返回的是一個JSON格式的消息,如果我們只要其中一項內容時,可以使用-f 參數來指定,如: root@S1:~# docker inspect -f {{".Metadata"}} 94e814e2efa8 {2019-03-26 19:07:55.36713665 +0800 CST}
3.搜尋鏡像:
使用docker search命令可以搜索遠端倉庫中共享的鏡像,默認搜索Docker Hub官方倉庫中的鏡像,用法:docker search TERM
root@S1:~# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 7955 [OK] mariadb MariaDB is a community-developed fork of MyS… 2660 [OK] mysql/mysql-server Optimized MySQL Server Docker images. Create… 598 [OK] zabbix/zabbix-server-mysql Zabbix Server with MySQL database support 176 [OK] hypriot/rpi-mysql RPi-compatible Docker Image with Mysql 110 zabbix/zabbix-web-nginx-mysql Zabbix frontend based on Nginx web-server wi… 92 [OK] centurylink/mysql Image containing mysql. Optimized to be link… 60 [OK] 1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 50 [OK] centos/mysql-57-centos7 MySQL 5.7 SQL database server 49 mysql/mysql-cluster Experimental MySQL Cluster Docker images. Cr… 41 tutum/mysql Base docker image to run a MySQL database se… 31 schickling/mysql-backup-s3 Backup MySQL to S3 (supports periodic backup… 25 [OK] bitnami/mysql Bitnami MySQL Docker Image 25 [OK] zabbix/zabbix-web-apache-mysql Zabbix frontend based on Apache web-server w… 24 [OK] zabbix/zabbix-proxy-mysql Zabbix proxy with MySQL database support 20 [OK] linuxserver/mysql A Mysql container, brought to you by LinuxSe… 20 centos/mysql-56-centos7 MySQL 5.6 SQL database server 13 circleci/mysql MySQL is a widely used, open-source relation… 12 mysql/mysql-router MySQL Router provides transparent routing be… 8 openshift/mysql-55-centos7 DEPRECATED: A Centos7 based MySQL v5.5 image… 6 dsteinkopf/backup-all-mysql backup all DBs in a mysql server 6 [OK] jelastic/mysql An image of the MySQL database server mainta… 1 cloudposse/mysql Improved `mysql` service with support for `m… 0 [OK] ansibleplaybookbundle/mysql-apb An APB which deploys RHSCL MySQL 0 [OK] widdpim/mysql-client Dockerized MySQL Client (5.7) including Curl… 0 [OK] 返回了很多包含關鍵字的鏡像,其中包括鏡像名字,描述,星級(表示該鏡像的受歡迎程度),是否官方創建,是否自動創建等 默認的輸出結果是按照星級評價進行排序的,官方的鏡像說明是官方項目組創建和維護的,automated資源則是允許用戶驗證鏡像的來源和內容。
個人建議:如果自己的線上服務使用的化,自己寫dockerfile構建鏡像比較好
4.刪除鏡像
docker rmi 命令可以刪除鏡像,命令格式docker rmi ID/REPOSITORY:TAG(可以為標簽或者ID)
使用鏡像標簽刪除鏡像: 如果一個鏡像有兩個或兩個以上的標簽,刪除的只是標簽。
root@S1:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 16.04 94e814e2efa8 2 weeks ago 88.9MB ubuntu latest 94e814e2efa8 2 weeks ago 88.9MB hello-world latest fce289e99eb9 2 months ago 1.84kB root@S1:~# docker rmi ubuntu:16.04 Untagged: ubuntu:16.04 root@S1:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 94e814e2efa8 2 weeks ago 88.9MB hello-world latest fce289e99eb9 2 months ago 1.84kB 現在只剩下一個標簽的時候,再去用標簽刪除的話,會將鏡像永久的刪除,如下: root@S1:~# docker rmi ubuntu:latest Untagged: ubuntu:latest Untagged: ubuntu@sha256:017eef0b616011647b269b5c65826e2e2ebddbe5d1f8c1e56b3599fb14fabec8 Deleted: sha256:94e814e2efa8845d95b2112d54497fbad173e45121ce9255b93401392f538499 Deleted: sha256:e783d8ee44ce099d51cbe699f699a04e43c9af445d85d8576f0172ba92e4e16c Deleted: sha256:cc7fae10c2d465c5e4b95167987eaa53ae01a13df6894493efc5b28b95c1bba2 Deleted: sha256:99fc3504db138523ca958c0c1887dd5e8b59f8104fbd6fd4eed485c3e25d2446 Deleted: sha256:762d8e1a60542b83df67c13ec0d75517e5104dee84d8aa7fe5401113f89854d9
使用鏡像ID刪除鏡像:
當使用docker rmi 命令后面跟上鏡像的ID(也可以是ID能區分的部分前綴)時,會嘗試先刪除所有指向該鏡像的標簽,然后刪除該鏡像文件本身。如果有該鏡像的容器存在時,鏡像文件默認時無法被刪除的,(可以用-f強制刪除 但是不推薦)例如:
root@S1:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 59fa4f00d111 ubuntu:16.04 "/bin/bash" 5 minutes ago Up 4 minutes pensive_napier root@S1:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 16.04 9361ce633ff1 2 weeks ago 118MB root@S1:~# docker stop 59fa4f00d111 d59fa4f00d111 root@S1:~# docker rm 59fa4f00d111 59fa4f00d111 root@S1:~# docker rmi 9361ce633ff1 Untagged: ubuntu:16.04 Untagged: ubuntu@sha256:58d0da8bc2f434983c6ca4713b08be00ff5586eb5cdff47bcde4b2e88fd40f88 Deleted: sha256:9361ce633ff193349d54bed380a5afe86043b09fd6ea8da7549dbbedfc2a7077 Deleted: sha256:59a6856f439d187f3ce3381d0a6b0816db99cc3d8468bcf8c9d1c39d2071dcff Deleted: sha256:82997a16a0d57ac7d8b416c0d83f5841193b6a56a7844b486ab6324730867fe0 Deleted: sha256:5c6983f277f26021b5e38501fdf06fa29f7158a93641f3f10aedbdc9869121d0 Deleted: sha256:aa54c2bc12290df2851a94b8834cae75e4627219d2b423d4d3db8b0a497e79a2 root@S1:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES root@S1:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE
刪除鏡像的規則,應該先刪除容器,在刪除鏡像,之前的版本刪除還在容器的鏡像還會生成一個臨時鏡像,ubuntu16.04系統,docker18.09的是可以強制刪除掉的
5.創建鏡像
基於已有鏡像的容器創建:該方法主要是使用docker commit 命令,命令格式:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG] ],主要選項包括:
-a --author=‘ ’ 作者信息
-c --change 對創建的鏡像應用Dockerfile指令
-m --message=‘ ’ 提交信息
-p --pause=true 提交鏡像的時候 暫停容器的運行
root@iZhp38fvkcax587xnn2552Z:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 14.04 390582d83ead 2 weeks ago 188MB 啟動一個鏡像 並作出修改 root@iZhp38fvkcax587xnn2552Z:~# docker run -it ubuntu:14.04 /bin/bash root@b0ca2a732416:/# mkdir 1 2 3 root@b0ca2a732416:/# touch 4 root@b0ca2a732416:/# exit exit 這里需要記住這個容器的id號 root@iZhp38fvkcax587xnn2552Z:~# docker commit -m "add files" -a "Docker newimages" b0ca2a732416 file sha256:03aa8fcfd2f18c4ce1c4ef35be02fced08313ba62b11d03fddcc7875c80fab34 root@iZhp38fvkcax587xnn2552Z:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE file latest 03aa8fcfd2f1 6 seconds ago 188MB ubuntu 14.04 390582d83ead 2 weeks ago 188MB
基於本地模板導入:
也可以充一個操作系統模板文件導入一個鏡像。在這里,推薦使用OpenVZ提供的模板來創建。OPENVZ模板的下載地址:https://download.openvz.org/template/precreated/
root@iZhp38fvkcax587xnn2552Z:~# wget https://download.openvz.org/template/precreated/ubuntu-14.04-x86-minimal.tar.gz --2019-03-28 19:21:24-- https://download.openvz.org/template/precreated/ubuntu-14.04-x86-minimal.tar.gz Resolving download.openvz.org (download.openvz.org)... 185.231.241.69 Connecting to download.openvz.org (download.openvz.org)|185.231.241.69|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 76242510 (73M) [application/x-gzip] Saving to: ‘ubuntu-14.04-x86-minimal.tar.gz’ ubuntu-14.04-x86-minimal.tar.gz 100%[==============================================================================>] 72.71M 58.7KB/s in 21m 52s 2019-03-28 19:43:19 (56.8 KB/s) - ‘ubuntu-14.04-x86-minimal.tar.gz’ saved [76242510/76242510] root@iZhp38fvkcax587xnn2552Z:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE file latest 03aa8fcfd2f1 About an hour ago 188MB nginx latest 2bcb04bdb83f 37 hours ago 109MB root@iZhp38fvkcax587xnn2552Z:~# cat ubuntu-14.04-x86-minimal.tar.gz | docker import - ubuntu:14.04 sha256:5863575f1996d4738399f0b3b4c03fe5ab69098b370eb587fc2163367ffcff72 root@iZhp38fvkcax587xnn2552Z:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 14.04 5863575f1996 About a minute ago 205MB file latest 03aa8fcfd2f1 About an hour ago 188MB nginx latest 2bcb04bdb83f 37 hours ago 109MB
基於Dockerfile生成鏡像:
https://www.cnblogs.com/ylqh/p/10617105.html
6.導出和載入鏡像
導出鏡像:使用docker save命令,導出本地的ubuntu:14.04的鏡像文件為:ubuntu_14.04.tar
root@iZhp38fvkcax587xnn2552Z:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE file latest 03aa8fcfd2f1 13 minutes ago 188MB ubuntu 14.04 390582d83ead 2 weeks ago 188MB root@iZhp38fvkcax587xnn2552Z:~# docker save -o ubuntu_14.04.tar ubuntu:14.04
導入鏡像:使用docker load從本地文件導入到本地的鏡像庫中,例如:
root@iZhp38fvkcax587xnn2552Z:~# ls ubuntu_14.04.tar root@iZhp38fvkcax587xnn2552Z:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE file latest 03aa8fcfd2f1 17 minutes ago 188MB root@iZhp38fvkcax587xnn2552Z:~# docker load --input ubuntu_14.04.tar Loaded image: ubuntu:14.04 root@iZhp38fvkcax587xnn2552Z:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE file latest 03aa8fcfd2f1 18 minutes ago 188MB ubuntu 14.04 390582d83ead 2 weeks ago 188MB root@iZhp38fvkcax587xnn2552Z:~# docker rmi ubuntu:14.04 Untagged: ubuntu:14.04 root@iZhp38fvkcax587xnn2552Z:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE file latest 03aa8fcfd2f1 18 minutes ago 188MB root@iZhp38fvkcax587xnn2552Z:~# docker load < ubuntu_14.04.tar Loaded image: ubuntu:14.04 root@iZhp38fvkcax587xnn2552Z:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE file latest 03aa8fcfd2f1 18 minutes ago 188MB ubuntu 14.04 390582d83ead 2 weeks ago 188MB
7.上傳鏡像
使用docker push上傳鏡像到倉庫,默認上傳到Dockerhub官方倉庫(需要認證),命令格式: docker push NAME[:TAG]。
用戶在DockerHub網站注冊后,可以上傳自制的鏡像,上傳方式如下:
上傳鏡像需要登陸到docker hub上 root@S1:~# docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: zhangzhanling 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@S1:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 14.04 390582d83ead 2 weeks ago 188MB root@S1:~# docker tag ubuntu:14.04 zhangzhanling/ubuntu:14.04 root@S1:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 14.04 390582d83ead 2 weeks ago 188MB zhangzhanling/ubuntu 14.04 390582d83ead 2 weeks ago 188MB 上傳鏡像 root@S1:~# docker push zhangzhanling/ubuntu The push refers to repository [docker.io/zhangzhanling/ubuntu] 5f96fa66dc12: Mounted from library/ubuntu dda5ec330bd9: Mounted from library/ubuntu 11a0c2f551fd: Mounted from library/ubuntu eef560b4ec4f: Mounted from library/ubuntu 14.04: digest: sha256:76f6920c51a2e9da1fccca4b81a84af0ff287449282d6a04c33adeaeeb4df60d size: 1152
鏡像與容器的聯系
容器是在鏡像的最上面加了一個讀寫層,在運行容器里的文件改動時,會先從鏡像里要寫的文件復制到容器自己的文件系統中(讀寫層)。
如果容器刪除了,最上面的讀寫層也就刪除了,改動就丟失了,所以無論多少個容器共享一個鏡像,所做的寫操作都是從鏡像的文件系統中復制過來操作的,並不會修改鏡像的源文件,這種方式提高了磁盤利用率。
如果想持久化這些改動,可以通過docker commit將容器保存為一個新鏡像
本地鏡像需要可以從遠端鏡像服務器上pull或者push鏡像文件,鏡像可以實例化成容器,容器也可以commit成鏡像
匯總docker images常用的相關命令
docker image 【options】
ls :列出鏡像 docker image ls 或者 docker images
build : 通過dockerfile構建鏡像
history :查看鏡像歷史
inspect:顯示一個或者多個鏡像詳細信息
pull:從鏡像倉庫拉去鏡像
push:推送一個鏡像到鏡像倉庫
rm:移除一個或者多個鏡像
prune:移除未使用的鏡像,沒有被標記或被任何容器引用的
tag:創建一個引用源鏡像標記的目標鏡像
export:導出容器文件系統到tar歸檔文件
import:導入容器文件系統tar歸檔文件創建鏡像
save:保存一個或多個鏡像到一個tar歸檔文件
load:加載鏡像來自tar歸檔或標准輸入