1.什麼是Docker?
docker底層是由linux container組成,使得進程之間互相隔離,但能夠共享主機資源python
2.Docker帶來的好處?
經過 Docker 能夠將程序運行的環境也一塊兒打包到版本控制去了,這樣就排除了由於環境不一樣形成的各類問題linux
Docker 是一個開源的應用容器引擎,基於 go 語言開發,可讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,而後發佈到任何流行的 Linux 服務器。容器是一個沙箱機制,相互之間不會有影響(相似於咱們手機上運行的 app),而且容器開銷是很低的git
3.Docker幾個重要概念
鏡像:是一個只讀模板,帶有建立 Docker 容器的說明,通常來講的,鏡像會基於另外的一些基礎鏡像並加上一些額外的自定義功能來組成。好比,你能夠構建一個基於 Centos 的鏡像,而後在這個基礎鏡像上面安裝一個 Nginx 服務器,這樣就能夠構成一個屬於咱們本身的鏡像了github
容器:是一個鏡像的可運行的實例,可使用 Docker REST API 或者 CLI 命令行工具來操做容器,容器的本質是進程,但與直接在宿主執行的進程不一樣,容器進程運行於屬於本身的獨立的命名空間。所以容器能夠擁有本身的 root 文件系統、本身的網絡配置、本身的進程空間,甚至本身的用戶 ID 空間。容器內的進程是運行在一個隔離的環境裏,使用起來,就好像是在一個獨立於宿主的系統下操做同樣。這種特性使得容器封裝的應用比直接在宿主運行更加安全docker
registry:是用來存儲 Docker 鏡像的倉庫,Docker Hub 是 Docker 官方提供的一個公共倉庫,並且 Docker 默認也是從 Docker Hub 上查找鏡像的,固然你也能夠很方便的運行一個私有倉庫,當咱們使用 docker pull 或者 docker run 命令時,就會從咱們配置的 Docker 鏡像倉庫中去拉取鏡像,使用 docker push 命令時,會將咱們構建的鏡像推送到對應的鏡像倉庫中,registry 能夠理解爲用於鏡像的 github 這樣的託管服務ubuntu
Namespaces:
命名空間 (namespaces) 是 Linux 爲咱們提供的用於分離進程樹、網絡接口、掛載點以及進程間通訊等資源的方法。在平常使用我的 PC 時,咱們並無運行多個徹底分離的服務器的需求,可是若是咱們在服務器上啓動了多個服務,這些服務其實會相互影響的,每個服務都能看到其餘服務的進程,也能夠訪問宿主機器上的任意文件,一旦服務器上的某一個服務被***,那麼***者就可以訪問當前機器上的全部服務和文件,這是咱們不肯意看到的,咱們更但願運行在同一臺機器上的不一樣服務能作到徹底隔離,就像運行在多臺不一樣的機器上同樣。而 Docker 其實就經過 Linux 的 Namespaces 技術來實現的對不一樣的容器進行隔離安全
一張圖片完整的解釋什麼是鏡像???
鏡像究竟是什麼,它又是如何組成和組織的呢?而這其中最重要的概念就是鏡像層(Layers)的概念,而鏡像層依賴於一系列的底層技術,好比文件系統(filesystems)、寫時複製(copy-on-write)、聯合掛載(union mounts)等服務器
Docker 鏡像是由一系列的層組成的,每層表明 Dockerfile 中的一條指令,好比下面的 Dockerfile 文件:網絡
FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.pyapp
這裏的 Dockerfile 包含4條命令,其中每一行就建立了一層,FROM 語句從 ubuntu:18.04 這個基礎鏡像建立一個層開始,COPY 命令從 Docker 客戶端的當前目錄添加一些新的文件,RUN 指令使用 make 命令構建應用,最後一層指定在容器中運行什麼命令
鏡像就是由這些層一層一層堆疊起來的,鏡像中的這些層都是隻讀的,當咱們運行容器的時候,就能夠在這些基礎層至上添加新的可寫層,也就是咱們一般說的容器層,對於運行中的容器所作的全部更改(好比寫入新文件、修改現有文件、刪除文件)都將寫入這個容器層