企業級微服務實戰(三)

Docker 實戰應用

1. 關於 Docker 鏡像、容器、存儲驅動的說明

官方文檔nginx

1.1 鏡像分層(Image and Layers)

從前面的課程中咱們能夠看到,想要啓動並運行容器即 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 的分層結構,以下圖:
image.png
那麼採用分層技術有哪些好處呢?最直觀的就是分層技術支持併發上傳、下載,咱們能夠快速的下載一個很大的鏡像文件;另一個很是重要的緣由是,若是咱們想要修改鏡像,至關於在原有的鏡像基礎上再加「一層」,咱們推送到倉庫也不須要所有推送,只需推送新加的「那一層」數據便可。json

1.2 容器與分層技術(Container and Layers)

鏡像是做爲容器啓動的基礎,可是一個鏡像能夠啓動不一樣的容器,以下圖:
image.png
只有容器層纔是可讀寫的,鏡像層是隻讀的,容器運行時產生的全部數據所有存儲在容器中,一旦容器關閉這些數據會所有丟失。那若是想保存這些數據該怎麼辦呢?一是將容器裏的數據內容作成鏡像存儲下來,二是經過持久存儲的方式完成數據存儲,後面咱們會分別介紹着兩種方式分別用於處理哪些問題。安全

1.3 Docker 存儲驅動(Storage Drivers)

當前版本 docker 默認的存儲驅動是 overlay2,這也是 docker 官方推薦的驅動方式,不一樣的 Linux 發行版請參考以下:官方文檔
image.png併發

overlay2 (上一代產品是 overlay)是最新的很是簡單、高效、穩定的聯合文件系統 union filesystem,在 CentOS/RHEL 系統中使用,須要確保系統內核不低於 3.10.0-514"RHEL or CentOS using version 3.10.0-514 and above."

2. Docker 經常使用命令

Docker 命令不少,你們能夠參考 官方文檔 ,文檔中對每一個用法都有很是詳細的介紹和示例。咱們此處僅介紹一些生產上常用到的。ide

2.1 docker pull:獲取鏡像

具體使用方式學習

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,其中有兩個應用分別叫作 nginxhttpd ,那麼你的鏡像名稱就能夠這樣指定 shop/nginxshop/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,以下:

2.2 docker login/logout:登陸/登出 registry

語法很是簡單,只要指定登陸的地址便可,以下:

$ 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 中關於該倉庫的認證信息。

2.3 docker search:搜索鏡像

這個命令通常用於搜索下載官方鏡像,由於該命令並不支持查看鏡像 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
... ...
2.4 docker images:查看本地鏡像

注: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
2.5 docker rmi:刪除鏡像

這個命令很簡單,直接指定鏡像名稱或者鏡像 ID 就能夠刪除,支持一次刪除多個鏡像。可是須要注意的是,若是有基於該鏡像正在運行的容器,則默認沒法刪除。

2.6 docker run/create:啓動/建立鏡像
這個命令須要介紹的知識點比較多,咱們專門用一片文章來介紹吧。

注:更多技術博客請關注 字節教育官網,若是在學習或者本身實驗的過程當中遇到問題,及時與做者溝通。【QQ羣 374106486】

相關文章
相關標籤/搜索