簡介
本章中,您將學(xué)習(xí)如何安裝Docker绰垂。并學(xué)習(xí)Docker術(shù)語室奏,如映像、容器劲装、Dockerfiles和 Docker組件胧沫。您還將使用一些簡單的Docker命令來工作。用于創(chuàng)建占业、運(yùn)行和停止Docker容器绒怨。
安裝
Docker公司提供了社區(qū)版和企業(yè)版。的Docker平臺(tái)谦疾。企業(yè)版的功能與Docker平臺(tái)相同南蹂。社區(qū)版,但它提供了額外的支持和認(rèn)證的念恍。容器六剥、插件和基礎(chǔ)設(shè)施。對于大多數(shù)一般的開發(fā)和生產(chǎn)使用峰伙,社區(qū)版 合適的疗疟。
在Windows上安裝Docker 在Windows上安裝Docker之前,你需要滿足一定的先決條件瞳氓。這些包括以下內(nèi)容策彤。
- Hyper-V支持 - 硬件虛擬化支持,通常在系統(tǒng)BIOS中啟用 - 只有64位版本的Windows 10(Pro/Education/)才能安裝匣摘。這看起來像一個(gè)虛擬化設(shè)置需要店诗,而你在上一章了解到,Docker并不是虛擬化音榜。
那么為什么Docker for Windows需要虛擬化所需的功能呢必搞?簡短的回答是,Docker依賴于眾多的功能囊咏,比如命名空間和cgroups,而這些在Windows上是不可用的塔橡。為了繞過這一限制梅割,Docker for Windows創(chuàng)建了一個(gè)運(yùn)行Linux內(nèi)核的輕量級(jí)Hyper-V容器。
在撰寫本文時(shí)葛家,Docker包括對Native容器的實(shí)驗(yàn)性支持户辞,允許在不需要Hyper-V的情況下創(chuàng)建容器。
<u>https://hub.docker.com/editions/community/docker-ce-desktop-windows</u>
<u>https://hub.docker.com/editions/community/docker-ce-desktop-mac</u>
<u>https://www.docker.com/community-edition</u>
sudo apt install docker.io
docker run --rm hello-world
參考資料
- 本講座目錄
- 代碼地址 https://github.com/china-testing/python-testing-examples/tree/master/pytest_projects 建議拷貝到瀏覽器訪問
- 本文涉及的python測試開發(fā)庫 謝謝點(diǎn)贊癞谒!
- 本文相關(guān)海量書籍下載
基本概念
現(xiàn)在我們已經(jīng)安裝并運(yùn)行了Docker底燎,讓我們來了解與Docker相關(guān)的不同術(shù)語刃榨。
Layer: Image是應(yīng)用于Docker鏡像的修改,由Docker文件中的指令來表示双仍。通常情況下枢希,當(dāng)一個(gè)基礎(chǔ)鏡像被改變時(shí),就會(huì)創(chuàng)建一個(gè)圖層--例如朱沃,考慮一個(gè)看起來像這樣的Dockerfile苞轿。
FROM ubuntu
Run mkdir /tmp/logs
RUN apt-get install vim
RUN apt-get install htop
現(xiàn)在在這種情況下,Docker會(huì)將Ubuntu鏡像作為基礎(chǔ)鏡像逗物,并添加三個(gè)層搬卒。
- 一個(gè)層用于創(chuàng)建/tmp/logs - 另一個(gè)層安裝vim - 第三個(gè)層安裝htop。
當(dāng)Docker構(gòu)建鏡像時(shí)翎卓,每個(gè)層都會(huì)疊加在下一個(gè)層上契邀,并使用聯(lián)合文件系統(tǒng)合并成一個(gè)層。層使用sha256哈希值進(jìn)行唯一識(shí)別失暴。這使其易于重用和緩存坯门。當(dāng)Docker掃描基礎(chǔ)鏡像時(shí),它會(huì)掃描構(gòu)成鏡像的所有層的ID锐帜,并開始下載層田盈。如果某個(gè)層存在于本地緩存中,它就會(huì)跳過下載緩存的鏡像缴阎。
Docker Image:Docker image是一個(gè)只讀的模板允瞧,它構(gòu)成了你的應(yīng)用程序的基礎(chǔ)。一個(gè)Docker鏡像從一個(gè)基礎(chǔ)鏡像開始--通常選擇的是大家最熟悉的操作系統(tǒng)的鏡像蛮拔,比如Ubuntu述暂。在這個(gè)鏡像之上,我們可以添加構(gòu)建我們的應(yīng)用棧建炫,在需要的時(shí)候添加包畦韭。
有許多預(yù)構(gòu)建的鏡像,用于一些最常見的應(yīng)用程序堆棧肛跌,如Django艺配、PHP-FPM與nginx。
等衍慎。
我們可以從相關(guān)的Dockerfile中構(gòu)建自己的鏡像转唉,然后將構(gòu)建好的鏡像發(fā)布到注冊表中。我們將在以后的章節(jié)中深入研究Dockerfile∥壤Γ現(xiàn)在赠法,將Docker鏡像視為最終的可執(zhí)行包,它包含了運(yùn)行應(yīng)用程序的一切乔夯。這包括源代碼砖织、所需的庫和任何依賴關(guān)系款侵。
Docker容器:Docker鏡像在主機(jī)中運(yùn)行時(shí),會(huì)生成一個(gè)有自己命名空間的進(jìn)程侧纯,稱為Docker容器新锈。Docker鏡像與容器的主要區(qū)別在于,Docker鏡像存在一個(gè)薄薄的讀/寫的容器茂蚓。壕鹉。對容器的文件系統(tǒng)的任何改變,如寫入新文件或修改現(xiàn)有文件聋涨,都是在這個(gè)可寫容器層上完成的晾浴,而不是在下層。
綁定掛載和卷:我們在前面提到牍白,當(dāng)一個(gè)容器運(yùn)行時(shí)脊凰,對容器的任何更改都存在于文件系統(tǒng)的容器層中。當(dāng)一個(gè)容器被殺死時(shí)茂腥,這些更改就會(huì)丟失狸涌,數(shù)據(jù)也無法再訪問。即使在容器運(yùn)行時(shí)最岗,從容器中獲取數(shù)據(jù)也不是很直接帕胆。此外,向容器的可寫層寫入數(shù)據(jù)需要一個(gè)存儲(chǔ)驅(qū)動(dòng)來管理文件系統(tǒng)般渡。存儲(chǔ)驅(qū)動(dòng)在文件系統(tǒng)上提供了一個(gè)可用來持久化變化的抽象懒豹,這種抽象往往會(huì)降低性能。
基于這些原因驯用,Docker提供了不同的方式來從Docker主機(jī)將數(shù)據(jù)掛載到容器中:卷脸秽、綁定掛載和tmpfs卷。tmpfs卷只存儲(chǔ)在主機(jī)系統(tǒng)的內(nèi)存中蝴乔,而綁定掛載和卷則存儲(chǔ)在主機(jī)文件系統(tǒng)中记餐。
Docker Registry:我們在前面提到過,你可以利用常見應(yīng)用棧的現(xiàn)有鏡像--你有沒有想過這些鏡像在哪里薇正,以及如何在構(gòu)建應(yīng)用時(shí)使用它們片酝?Docker Registry是一個(gè)可以存儲(chǔ)Docker鏡像的地方,這樣就可以將它們作為基礎(chǔ)來使用
的應(yīng)用棧挖腰。一些常見的Docker注冊中心的例子包括以下幾個(gè)雕沿。
? Docker Hub
? Google Container Registry
? Amazon Elastic Container Registry
? JFrog Artifactory
Dockerfile:Dockerfile是一組告訴Docker如何構(gòu)建鏡像的指令。
一個(gè)典型的Dockerfile由以下內(nèi)容組成曙聂。
一個(gè)FROM指令,告訴Docker什么是基礎(chǔ)鏡像 - 一個(gè)ENV指令鞠鲜,傳遞一個(gè)環(huán)境變量 - 一個(gè)RUN指令宁脊,運(yùn)行一些shell命令(例如断国,基礎(chǔ)鏡像中不可用的依賴安裝的程序)。
一個(gè)CMD或一個(gè)ENTRYPOINT指令榆苞,告訴Docker在容器啟動(dòng)時(shí)運(yùn)行哪個(gè)可執(zhí)行文件 正如你所看到的稳衬,Dockerfile指令集的語法清晰而簡單,這使得它很容易理解坐漏。我們將在本書后面對Dockerfiles進(jìn)行深入的研究薄疚。
Docker Engine:Docker Engine是Docker的核心部分。Docker Engine是一個(gè)客戶端-服務(wù)器應(yīng)用程序赊琳,它為構(gòu)建和管理Docker鏡像街夭、Docker容器等提供平臺(tái)、運(yùn)行時(shí)和工具躏筏。
Docker Engine提供了以下內(nèi)容板丽。
? Docker daemon
? Docker CLI
? Docker API-
Docker Daemon - 。
Docker守護(hù)進(jìn)程是一個(gè)在主機(jī)后臺(tái)運(yùn)行的服務(wù)趁尼,處理大部分Docker命令的重任埃碱。
守護(hù)進(jìn)程監(jiān)聽用于創(chuàng)建和管理Docker對象(如容器)的API請求。
Docker守護(hù)進(jìn)程還可以與其他守護(hù)進(jìn)程對話酥泞,以管理和監(jiān)控Docker容器砚殿。守護(hù)進(jìn)程間通信的一些例子包括用于容器指標(biāo)監(jiān)控的通信Datadog和用于容器安全監(jiān)控的Aqua。
Docker CLI是你與Docker交互的主要方式芝囤。Docker CLI公開了一組你可以提供的命令似炎。Docker CLI將請求轉(zhuǎn)發(fā)到Docker daemon,然后由Docker daemon執(zhí)行必要的工作凡人。
build
pull
run
exec
雖然Docker CLI包括種類繁多的命令和子命令名党,但我們在本書中最常用的命令如前所述。
<u>https://docs.docker.com/engine/reference/commandline/cli/</u>
在任何時(shí)候挠轴,給一個(gè)命令添加幫助传睹,都會(huì)顯示出該命令所需的文檔。例如岸晦,如果你不太確定從哪里開始使用Docker CLI欧啤,你可以鍵入以下內(nèi)容。
docker help
docker help pull
Docker API
Docker還提供了一個(gè)與Docker引擎交互的API启上。如果需要在應(yīng)用程序中創(chuàng)建或管理容器邢隧,這一點(diǎn)特別有用。幾乎所有Docker CLI支持的操作都可以通過API來完成冈在。
最簡單的方法是使用curl發(fā)送API請求來啟動(dòng)Docker API倒慧。對于Windows Docker主機(jī),我們可以通過TCP端點(diǎn)到達(dá)。
curl <u>http://localhost:2375/images/json</u>
curl --unix-socket /var/run/docker.sock -X POST <u>http://images/json</u>
Docker Compose是一個(gè)定義和運(yùn)行多容器應(yīng)用程序的工具纫谅。就像Docker允許你為你的應(yīng)用程序構(gòu)建一個(gè)鏡像并在你的容器中運(yùn)行一樣炫贤,Compose使用相同的鏡像與定義文件(稱為compose文件)相結(jié)合來構(gòu)建。啟動(dòng)和運(yùn)行多容器應(yīng)用程序付秕,包括依賴和鏈接容器兰珍。
Docker Compose最常見的用例是運(yùn)行應(yīng)用程序及其依賴的服務(wù)(如數(shù)據(jù)庫和緩存提供商)。
以與運(yùn)行單個(gè)容器應(yīng)用同樣簡單询吴、精簡的方式掠河。
Docker Machine是一個(gè)用于在多個(gè)虛擬主機(jī)上安裝Docker引擎,然后管理主機(jī)的工具猛计。Docker Machine允許你在本地以及遠(yuǎn)程系統(tǒng)上創(chuàng)建Docker主機(jī)唠摹,包括在Amazon Web Services、DigitalOcean和Microsoft Azure等云平臺(tái)上有滑。
使用Docker鏡像 讓我們來看看可用的Docker鏡像跃闹。要做到這一點(diǎn),請鍵入以下命令毛好。
docker image ls 這是本地可用鏡像的列表望艺。
下面是有些常用的命令,可以自己實(shí)踐體驗(yàn)下肌访。
docker image inspect hello-world
docker pull nginx
docker pull nginx:1.12-alpine-perl
docker pull docker-private.registry:1337/nginx
docker login docker-private.registry:1337
docker run -p 80:80 nginx
docker image inspect nginx | jq .[].Config.ExposedPorts
docker ps
docker ps -a
-n required-name
docker stop <container-id>
docker kill 3ed1222964de
docker rm <container-id>
docker image ls
docker rmi 3f8a4339aadd