官方文檔nginx
從前面的課程中咱們能夠看到,想要啓動並運行容器即 Docker Container,必須基於鏡像即 Docker image, 而咱們在使用 docker pull
去拉取鏡像時,常常會出現下面的信息:docker
[root@docker-server ~]# docker pull nginx Using default tag: latest latest: Pulling from library/nginx 8d691f585fa8: Pull complete 047cb16c0ff6: Pull complete b0bbed1a78ca: Pull complete Digest: sha256:77ebc94e0cec30b20f9056bac1066b09fbdc049401b71850922c63fc0cc1762e Status: Downloaded newer image for nginx:latest
其中 8d691f585fa8: Pull complete、047cb16c0ff6: Pull complete、b0bbed1a78ca: Pull complete
是什麼意思呢?這就是 Docker image 的分層結構,以下圖:
那麼採用分層技術有哪些好處呢?最直觀的就是分層技術支持併發上傳、下載,咱們能夠快速的下載一個很大的鏡像文件;另一個很是重要的緣由是,若是咱們想要修改鏡像,至關於在原有的鏡像基礎上再加「一層」,咱們推送到倉庫也不須要所有推送,只需推送新加的「那一層」數據便可。json
鏡像是做爲容器啓動的基礎,可是一個鏡像能夠啓動不一樣的容器,以下圖:
只有容器層纔是可讀寫的,鏡像層是隻讀的,容器運行時產生的全部數據所有存儲在容器中,一旦容器關閉這些數據會所有丟失。那若是想保存這些數據該怎麼辦呢?一是將容器裏的數據內容作成鏡像存儲下來,二是經過持久存儲的方式完成數據存儲,後面咱們會分別介紹着兩種方式分別用於處理哪些問題。安全
當前版本 docker 默認的存儲驅動是 overlay2,這也是 docker 官方推薦的驅動方式,不一樣的 Linux 發行版請參考以下:官方文檔
併發
overlay2 (上一代產品是
overlay)是最新的很是簡單、高效、穩定的聯合文件系統
union filesystem,在
CentOS/RHEL 系統中使用,須要確保系統內核不低於
3.10.0-514 即
"RHEL or CentOS using version 3.10.0-514 and above."
Docker 命令不少,你們能夠參考 官方文檔 ,文檔中對每一個用法都有很是詳細的介紹和示例。咱們此處僅介紹一些生產上常用到的。ide
具體使用方式學習
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
最基本的用法很是簡單,咱們只須要指定 鏡像名稱和 tag 信息或者 Digest 即加密摘要,通常咱們都是使用 tag 來指定不一樣「版本」的鏡像,固然使用加密摘要更加安全,可是相對來講操做複雜些。若是咱們什麼都不指定,則默認使用 latest 標籤tag,而 latest 標籤通常是默認生成的,會一直指向最新的鏡像。好比:
【不指定 tag 信息】ui
[root@docker-server ~]# docker pull busybox Using default tag: latest latest: Pulling from library/busybox Digest: sha256:fe301db49df08c384001ed752dff6d52b4305a73a7f608f21528048e8a08b51e Status: Downloaded newer image for busybox:latest
【指定 tag 信息】阿里雲
[root@docker-server ~]# docker pull busybox:1.31.0 1.31.0: Pulling from library/busybox 7c9d20b9b6cd: Already exists Digest: sha256:200659419fb0fa86380fec1802e3b4e7e792c06b5affddc04eba435e64504a88 Status: Downloaded newer image for busybox:1.31.0
【指定加密摘要信息】加密
[root@docker-server ~]# docker pull busybox@sha256:bbb143159af9eabdf45511fd5aab4fd2475d4c0e7fd4a5e154b98e838488e510 sha256:bbb143159af9eabdf45511fd5aab4fd2475d4c0e7fd4a5e154b98e838488e510: Pulling from library/busybox 57c14dd66db0: Pull complete Digest: sha256:bbb143159af9eabdf45511fd5aab4fd2475d4c0e7fd4a5e154b98e838488e510 Status: Downloaded newer image for busybox@sha256:bbb143159af9eabdf45511fd5aab4fd2475d4c0e7fd4a5e154b98e838488e510
注意:默認咱們都是從官方也就是
DockerHub 上下載鏡像,那若是咱們從其餘第三方倉庫下載鏡像該怎麼指定呢?其實
docker pull
完整的語法應該是:
docker pull [<registry>][:<port>]/[<namespace>/]<name>:<tag>
其中 registry 默認是指 DockerHub 倉庫https://index.docker.io/v1/
, namespace 可能不太好理解,你能夠理解成 項目名稱 或者 帳戶名稱 可能更接地氣一點;而 name 則是指 應用名稱 或者 倉庫名稱(在 docker 倉庫中,通常咱們習慣使用一個倉庫來存儲一個應用,即 Nginx 倉庫只用來存儲 Nginx 應用鏡像,根據不一樣 tag 信息來區分鏡像版本) ,好比我們有個電商項目 shop,其中有兩個應用分別叫作 nginx 和 httpd ,那麼你的鏡像名稱就能夠這樣指定 shop/nginx 與 shop/httpd,若是在加上標籤信息,能夠這樣 shop/nginx:v1.14.1,若是咱們還有本身的私有鏡像倉庫https://docker.byte-edu.com:5000
,那麼咱們能夠這樣指定docker.byte-edu.com:5000/shop/nginx:v1.14.1
,注意,在使用docker pull
或者docker push
時,雖然使用 https 協議,可是不要寫上 https:// ,也就是上述命令能夠這樣寫:
$ docker pull docker.byte-edu.com:5000/shop/nginx:v1.14.1
咱們在阿里雲帳戶上申請私有鏡像倉庫,一個帳戶下最多能夠設置 5 個名稱空間 namespace,可是一個名稱空間下能夠設置多少個倉庫或者應用則沒有限制。
這裏咱們會有一個問題,是否是全部人使用 docker pull docker.byte-edu.com:5000/shop/nginx:v1.14.1
均可以到這個倉庫去下載鏡像?這須要根據倉庫的性質,即公共倉庫仍是私有倉庫。若是是公共倉庫任何人均可如下載,若是是私有倉庫,則須要先登陸認證才能進行上傳、下載。登陸使用 docker login
,以下:
語法很是簡單,只要指定登陸的地址便可,以下:
$ docker login myregistry:5000
輸入正確的用戶名和密碼便可,這裏有個知識點須要你們關注下,若是咱們是在寫腳本中須要登陸倉庫,可使用 --password-stdin
的方式,好比:
$ cat ~/my_password.txt | docker login myregistry:5000 --username foo --password-stdin
這樣咱們把密碼寫入到 ~/my_password.txt
文件中便可。
注意:當咱們完成登陸以後,用戶名和密碼默認會寫入到配置文件中,文件路徑爲
~/.docker/config.json
這樣下次使用該倉庫時就不須要再次輸入用戶名和密碼了。
若是想要登出,則使用
$ docker logout myregistry:5000
登出成功後,會刪除配置文件 ~/.docker/config.json 中關於該倉庫的認證信息。
這個命令通常用於搜索下載官方鏡像,由於該命令並不支持查看鏡像 tag 信息,因此通常搜索咱們仍是經過 DockerHub 進行搜索,找打指定標籤而後下載。以下:
[root@docker-server ~]# docker search busybox NAME DESCRIPTION STARS OFFICIAL AUTOMATED busybox Busybox base image. 1700 [OK] progrium/busybox 71 [OK] radial/busyboxplus Full-chain, Internet enabled, busybox made f… 25 [OK] arm32v7/busybox Busybox base image. 7 ... ...
注:docker images == docker image ls/list
都是用於查看本地鏡像。
docker images
其實還支持不少參數,好比過濾 filter、查看加密摘要 --digests等,可是通常都不怎麼用,比較常見的一是不加任何參數,用來顯示全部鏡像;二是制定鏡像名稱,僅顯示某個鏡像列表,以下:
[root@docker-server ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 5a9061639d0a 47 hours ago 126MB busybox 1.31.0 19485c79a9bb 6 weeks ago 1.22MB busybox latest 19485c79a9bb 6 weeks ago 1.22MB registry.cn-beijing.aliyuncs.com/byte-edu/mydocker v0.1 19485c79a9bb 6 weeks ago 1.22MB hello-world latest fce289e99eb9 9 months ago 1.84kB busybox <none> 3a093384ac30 9 months ago 1.2MB
[root@docker-server ~]# docker images busybox REPOSITORY TAG IMAGE ID CREATED SIZE busybox 1.31.0 19485c79a9bb 6 weeks ago 1.22MB busybox latest 19485c79a9bb 6 weeks ago 1.22MB busybox <none> 3a093384ac30 9 months ago 1.2MB
固然,也能夠只顯示某個標籤的鏡像。
[root@docker-server ~]# docker images busybox:latest REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 19485c79a9bb 6 weeks ago 1.22MB
這個命令很簡單,直接指定鏡像名稱或者鏡像 ID 就能夠刪除,支持一次刪除多個鏡像。可是須要注意的是,若是有基於該鏡像正在運行的容器,則默認沒法刪除。
這個命令須要介紹的知識點比較多,咱們專門用一片文章來介紹吧。
注:更多技術博客請關注 字節教育官網,若是在學習或者本身實驗的過程當中遇到問題,及時與做者溝通。【QQ羣 374106486】