python docker快速入門2安裝

簡介

本章中,您將學(xué)習如何安裝Docker。并學(xué)習Docker術(shù)語,如映像、容器、Dockerfiles和 Docker組件。您還將使用一些簡單的Docker命令來工作。用于創(chuàng)建、運行和停止Docker容器。

安裝

Docker公司提供了社區(qū)版和企業(yè)版。的Docker平臺。企業(yè)版的功能與Docker平臺相同。社區(qū)版,但它提供了額外的支持和認證的。容器、插件和基礎(chǔ)設(shè)施。對于大多數(shù)一般的開發(fā)和生產(chǎn)使用,社區(qū)版 合適的。

在Windows上安裝Docker 在Windows上安裝Docker之前,你需要滿足一定的先決條件。這些包括以下內(nèi)容。

  • Hyper-V支持 - 硬件虛擬化支持,通常在系統(tǒng)BIOS中啟用 - 只有64位版本的Windows 10(Pro/Education/)才能安裝。這看起來像一個虛擬化設(shè)置需要,而你在上一章了解到,Docker并不是虛擬化。

那么為什么Docker for Windows需要虛擬化所需的功能呢?簡短的回答是,Docker依賴于眾多的功能,比如命名空間和cgroups,而這些在Windows上是不可用的。為了繞過這一限制,Docker for Windows創(chuàng)建了一個運行Linux內(nèi)核的輕量級Hyper-V容器。

在撰寫本文時,Docker包括對Native容器的實驗性支持,允許在不需要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

參考資料

基本概念

現(xiàn)在我們已經(jīng)安裝并運行了Docker,讓我們來了解與Docker相關(guān)的不同術(shù)語。

Layer: Image是應(yīng)用于Docker鏡像的修改,由Docker文件中的指令來表示。通常情況下,當一個基礎(chǔ)鏡像被改變時,就會創(chuàng)建一個圖層--例如,考慮一個看起來像這樣的Dockerfile。

FROM ubuntu

Run mkdir /tmp/logs

RUN apt-get install vim

RUN apt-get install htop

現(xiàn)在在這種情況下,Docker會將Ubuntu鏡像作為基礎(chǔ)鏡像,并添加三個層。

  • 一個層用于創(chuàng)建/tmp/logs - 另一個層安裝vim - 第三個層安裝htop。

當Docker構(gòu)建鏡像時,每個層都會疊加在下一個層上,并使用聯(lián)合文件系統(tǒng)合并成一個層。層使用sha256哈希值進行唯一識別。這使其易于重用和緩存。當Docker掃描基礎(chǔ)鏡像時,它會掃描構(gòu)成鏡像的所有層的ID,并開始下載層。如果某個層存在于本地緩存中,它就會跳過下載緩存的鏡像。

Docker Image:Docker image是一個只讀的模板,它構(gòu)成了你的應(yīng)用程序的基礎(chǔ)。一個Docker鏡像從一個基礎(chǔ)鏡像開始--通常選擇的是大家最熟悉的操作系統(tǒng)的鏡像,比如Ubuntu。在這個鏡像之上,我們可以添加構(gòu)建我們的應(yīng)用棧,在需要的時候添加包。

有許多預(yù)構(gòu)建的鏡像,用于一些最常見的應(yīng)用程序堆棧,如Django、PHP-FPM與nginx。

等。

我們可以從相關(guān)的Dockerfile中構(gòu)建自己的鏡像,然后將構(gòu)建好的鏡像發(fā)布到注冊表中。我們將在以后的章節(jié)中深入研究Dockerfile?,F(xiàn)在,將Docker鏡像視為最終的可執(zhí)行包,它包含了運行應(yīng)用程序的一切。這包括源代碼、所需的庫和任何依賴關(guān)系。

Docker容器:Docker鏡像在主機中運行時,會生成一個有自己命名空間的進程,稱為Docker容器。Docker鏡像與容器的主要區(qū)別在于,Docker鏡像存在一個薄薄的讀/寫的容器。。對容器的文件系統(tǒng)的任何改變,如寫入新文件或修改現(xiàn)有文件,都是在這個可寫容器層上完成的,而不是在下層。

綁定掛載和卷:我們在前面提到,當一個容器運行時,對容器的任何更改都存在于文件系統(tǒng)的容器層中。當一個容器被殺死時,這些更改就會丟失,數(shù)據(jù)也無法再訪問。即使在容器運行時,從容器中獲取數(shù)據(jù)也不是很直接。此外,向容器的可寫層寫入數(shù)據(jù)需要一個存儲驅(qū)動來管理文件系統(tǒng)。存儲驅(qū)動在文件系統(tǒng)上提供了一個可用來持久化變化的抽象,這種抽象往往會降低性能。

基于這些原因,Docker提供了不同的方式來從Docker主機將數(shù)據(jù)掛載到容器中:卷、綁定掛載和tmpfs卷。tmpfs卷只存儲在主機系統(tǒng)的內(nèi)存中,而綁定掛載和卷則存儲在主機文件系統(tǒng)中。

Docker Registry:我們在前面提到過,你可以利用常見應(yīng)用棧的現(xiàn)有鏡像--你有沒有想過這些鏡像在哪里,以及如何在構(gòu)建應(yīng)用時使用它們?Docker Registry是一個可以存儲Docker鏡像的地方,這樣就可以將它們作為基礎(chǔ)來使用

的應(yīng)用棧。一些常見的Docker注冊中心的例子包括以下幾個。

? Docker Hub

? Google Container Registry

? Amazon Elastic Container Registry

? JFrog Artifactory

Dockerfile:Dockerfile是一組告訴Docker如何構(gòu)建鏡像的指令。

一個典型的Dockerfile由以下內(nèi)容組成。

  • 一個FROM指令,告訴Docker什么是基礎(chǔ)鏡像 - 一個ENV指令,傳遞一個環(huán)境變量 - 一個RUN指令,運行一些shell命令(例如,基礎(chǔ)鏡像中不可用的依賴安裝的程序)。

  • 一個CMD或一個ENTRYPOINT指令,告訴Docker在容器啟動時運行哪個可執(zhí)行文件 正如你所看到的,Dockerfile指令集的語法清晰而簡單,這使得它很容易理解。我們將在本書后面對Dockerfiles進行深入的研究。

Docker Engine:Docker Engine是Docker的核心部分。Docker Engine是一個客戶端-服務(wù)器應(yīng)用程序,它為構(gòu)建和管理Docker鏡像、Docker容器等提供平臺、運行時和工具。

Docker Engine提供了以下內(nèi)容。

? Docker daemon

? Docker CLI

? Docker API-

Docker Daemon - 。

Docker守護進程是一個在主機后臺運行的服務(wù),處理大部分Docker命令的重任。

守護進程監(jiān)聽用于創(chuàng)建和管理Docker對象(如容器)的API請求。

Docker守護進程還可以與其他守護進程對話,以管理和監(jiān)控Docker容器。守護進程間通信的一些例子包括用于容器指標監(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>

在任何時候,給一個命令添加幫助,都會顯示出該命令所需的文檔。例如,如果你不太確定從哪里開始使用Docker CLI,你可以鍵入以下內(nèi)容。

docker help

docker help pull

Docker API

Docker還提供了一個與Docker引擎交互的API。如果需要在應(yīng)用程序中創(chuàng)建或管理容器,這一點特別有用。幾乎所有Docker CLI支持的操作都可以通過API來完成。

最簡單的方法是使用curl發(fā)送API請求來啟動Docker API。對于Windows Docker主機,我們可以通過TCP端點到達。

curl <u>http://localhost:2375/images/json</u>

curl --unix-socket /var/run/docker.sock -X POST <u>http://images/json</u>

Docker Compose是一個定義和運行多容器應(yīng)用程序的工具。就像Docker允許你為你的應(yīng)用程序構(gòu)建一個鏡像并在你的容器中運行一樣,Compose使用相同的鏡像與定義文件(稱為compose文件)相結(jié)合來構(gòu)建。啟動和運行多容器應(yīng)用程序,包括依賴和鏈接容器。

Docker Compose最常見的用例是運行應(yīng)用程序及其依賴的服務(wù)(如數(shù)據(jù)庫和緩存提供商)。

以與運行單個容器應(yīng)用同樣簡單、精簡的方式。

Docker Machine是一個用于在多個虛擬主機上安裝Docker引擎,然后管理主機的工具。Docker Machine允許你在本地以及遠程系統(tǒng)上創(chuàng)建Docker主機,包括在Amazon Web Services、DigitalOcean和Microsoft Azure等云平臺上。

使用Docker鏡像 讓我們來看看可用的Docker鏡像。要做到這一點,請鍵入以下命令。

docker image ls 這是本地可用鏡像的列表。

下面是有些常用的命令,可以自己實踐體驗下。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容