1. 程式人生 > >Docker概述與安裝(官網譯)

Docker概述與安裝(官網譯)

額外 latest ups syslog alt mirrors lan systems roo

1、Docker概述

原文地址:https://docs.docker-cn.com/engine/docker-overview/#docker-engine

Docker是一個開發,集裝,運行應用程序的開放平臺。Docker使您可以將應用程序與基礎架構分離,以便快速交付軟件。使用Docker,您可以像管理應用程序一樣管理基礎架構。通過利用Docker的方法快速集裝,測試和部署代碼,您可以顯著減少編寫代碼和在生產中運行代碼之間的延遲。

2、Docker平臺

Docker提供了在稱為容器的松散隔離環境中打包和運行應用程序的功能。隔離和安全性允許您在給定主機上同時運行多個容器。容器是輕量級的,因為它們不需要管理程序的額外負載,而是直接在主機內核中運行。

這意味著您可以在給定硬件組合上運行比使用虛擬機時更多的容器。您甚至可以在實際虛擬機的主機中運行Docker容器!

Docker提供工具和平臺來管理容器的生命周期:

  • 使用容器開發應用程序及其支持組件。
  • 容器成為分發和測試應用程序的單元。
  • 準備就緒後,將應用程序部署到生產環境中,作為容器或協調服務。無論您的生產環境是本地數據中心,雲提供商還是兩者的混合,這都是一樣的。

3、Docker引擎

Docker Engine是一個C-S應用程序,包含以下主要組件:

  • server,是一種長時間運行的程序,稱為守護程序進程( dockerd命令)。

  • 一個REST API,它指定程序可以用來與守護進程通信並指示它做什麽的接口。

  • 命令行界面(CLI)客戶端(docker命令)。

技術分享圖片

CLI使用Docker REST API通過腳本或直接CLI命令控制Docker守護程序或與之交互。許多其他Docker應用程序使用底層API和CLI。

守護程序創建和管理Docker對象,例如鏡像,容器,網絡和卷。

  • 註意:Docker是根據開源Apache 2.0許可證授權的。

4、我們使用Docker能幹啥?

快速,一致地交付您的應用程序

Docker允許開發人員使用提供應用程序和服務的本地容器在標準化環境中工作,從而簡化了開發生命周期。容器非常適合持續集成和持續開發(CI / CD)工作流程。

請考慮以下示例場景。

  • 您的開發人員在本地編寫代碼並使用Docker容器與同事共享他們的工作。
  • 他們使用Docker將他們的應用程序推入測試環境並執行自動和手動測試。
  • 當開發人員發現錯誤時,他們可以在開發環境中修復它們,並將它們重新部署到測試環境中進行測試和驗證。
  • 測試完成後,獲取客戶的修復就像將更新的鏡像推送到生產環境一樣簡單。

響應式部署和擴展

Docker基於容器的平臺允許高度可移植的工作負載。Docker容器可以在開發人員的本地筆記本電腦上,在數據中心的物理或虛擬機上,在雲提供商上,或在混合環境中運行。

Docker的可移植性和輕量級特性還可以輕松地動態管理工作負載,按照業務需求即時擴展或拆除應用程序和服務。

在相同的硬件上運行更多工作量

Docker輕巧而快速。它為基於管理程序的虛擬機提供了一種可行的,經濟高效的替代方案,因此您可以使用更多的計算容量來實現業務目標。Docker非常適合高密度環境以及需要用更少資源完成更多工作的中小型部署。

5、Docker架構

Docker使用C-S架構。Docker 客戶端與Docker 守護進程通信,後者負責構建,運行和分發Docker容器。Docker客戶端和守護程序可以 在同一系統上運行,也可以將Docker客戶端連接到遠程Docker守護程序。Docker客戶端和守護程序使用REST API,通過UNIX套接字或網絡接口進行通信。

技術分享圖片

The Docker daemon(守護進程)

Docker守護程序(dockerd)偵聽Docker API請求並管理Docker對象,如鏡像,容器,網絡和卷。守護程序還可以與其他守護程序通信以管理Docker服務。

The Docker client(客戶端)

Docker client(docker)是許多Docker用戶與Docker交互的主要方式。當您使用諸如此類的命令時docker run,客戶端會將這些命令發送給它們dockerd,然後執行這些命令docker命令使用Docker API。Docker客戶端可以與多個守護進程通信。

Docker registries(鏡像倉庫)

Docker倉庫存儲Docker鏡像。Docker Hub和Docker Cloud是任何人都可以使用的公共倉庫,Docker配置為默認在Docker Hub上查找鏡像。您甚至可以運行自己的私有倉庫。如果您使用Docker Datacenter(DDC),它包括Docker Trusted Registry(DTR)。

使用docker pulldocker run命令時,將從配置的倉庫中提取所需的鏡像。使用該docker push命令時,您的鏡像將被推送到配置的鏡像倉庫。

Docker商店允許您購買和出售Docker鏡像或免費分發。例如,您可以從軟件供應商處購買包含應用程序或服務的Docker映像,並使用該映像將應用程序部署到測試,登陸和生產環境中。您可以通過提取新版本的映像並重新部署容器來升級應用程序。

Docker objects(對象)

使用Docker時,您將創建和使用鏡像,容器,網絡,卷,插件和其他對象。本節簡要介紹其中一些對象。

鏡像

一個鏡像是一個帶有指令的只讀模板,它用於創建一個Docker容器。通常,鏡像基於另一個鏡像(基礎鏡像),並帶有一些額外的自定義。例如,您可以構建基於鏡像的ubuntu 鏡像,但安裝Apache Web服務器和應用程序,以及運行應用程序所需的配置詳細信息。

您可以創建自己的鏡像,也可以只使用其他人創建的鏡像並在鏡像倉庫中發布。要構建自己的鏡像,可以使用簡單的語法創建Dockerfile,以定義創建鏡像和運行鏡像所需的步驟。Dockerfile中的每條指令都在鏡像中創建一個鏡像層。更改Dockerfile並重建鏡像時,僅重建已更改的那些層。與其他虛擬化技術相比,這是使鏡像如此輕量,小巧和快速的部分原因。

容器

容器是鏡像的可運行實例。您可以使用Docker API或CLI創建,運行,停止,移動或刪除容器。您可以將容器連接到一個或多個網絡,將存儲連接到它,甚至可以根據其當前狀態創建新鏡像。

默認情況下,容器與其他容器及其主機相對隔離。您可以控制容器的網絡,存儲或其他基礎子系統與其他容器或主機的隔離程度。

容器由其鏡像以及您在創建或運行它時提供給它定義的任何配置選項。當容器停止時,沒有存儲在持久化存儲中的所有改變都會消失。

Example docker run command

以下命令運行ubuntu容器,以交互方式附加到本地命令行會話,然後運行/bin/bash

$ docker run -i -t ubuntu /bin/bash

運行此命令時,會發生以下情況(假設您使用的是默認倉庫配置):

  1. 如果您沒有ubuntu本地鏡像,Docker會從您配置的倉庫中提取鏡像,就好像您已docker pull ubuntu手動運行一樣

  2. Docker創建一個新容器,就像您docker create 手動運行命令一樣。

  3. Docker將讀寫文件系統分配給容器,作為其最後一層。這允許正在運行的容器在其本地文件系統中創建或修改文件和目錄。

  4. Docker創建了一個網絡接口,用於將容器連接到默認網絡,因為您沒有指定任何網絡選項。這包括為容器分配IP地址。默認情況下,容器可以使用主機的網絡連接連接到外部網絡。

  5. Docker啟動容器並執行/bin/bash由於容器以交互方式運行並連接到終端(由於-i-t)標誌,因此您可以使用鍵盤提供輸入,並將輸出記錄到終端。

  6. 鍵入exit以終止/bin/bash命令時,容器會停止但不會被刪除。您可以重新啟動它或將其刪除。

服務

服務允許您跨多個Docker守護程序擴展容器,這些守護程序一起作為具有多個管理器工作程序的群組一起工作swarm的每個成員都是Docker守護程序,並且守護進程都使用Docker API進行通信。服務允許您定義所需的狀態,例如在任何給定時間必須可用的服務的副本數。默認情況下,服務在所有工作節點之間進行負載平衡。對於消費者來說,Docker服務似乎是一個單獨的應用程序。Docker Engine支持Docker 1.12及更高版本中的swarm模式。

6、實現技術

Docker是用Go編寫的,它利用Linux內核的幾個功能來提供其功能。

Namespaces(系統隔離)

Docker使用一種稱為namespaces提供隔離工作空間的技術來稱為容器當您運行容器時,Docker會為該容器創建一組namespaces

這些命名空間提供了一隔離層。容器的每個方面都在一個單獨的命名空間中運行,其訪問權限僅限於該命名空間。

Docker Engine在Linux上使用以下命名空間:

  • pid命名空間:進程隔離(PID:進程ID)。
  • net命名空間:管理網絡接口(NET:網絡)。
  • ipc命名空間:管理訪問IPC資源(IPC:進程間通信)。
  • mnt命名空間:管理文件系統掛載點(MNT:Mount)。
  • uts命名空間:隔離內核和版本標識符。(UTS:Unix Timesharing System)。

Control groups(資源控制)

Linux上的Docker Engine還依賴於另一種稱為control groupscgroups)的技術。cgroup將應用程序限制為特定的一組資源。control groups允許Docker Engine將可用的硬件資源共享給容器,並可選擇強制執行限制和約束。例如,您可以限制特定容器的可用內存。

Union file systems

聯合文件系統或UnionFS是通過創建層來操作的文件系統,使它們非常輕量和快速。Docker Engine使用UnionFS為容器提供構建塊。Docker Engine可以使用多種UnionFS變體,包括AUFS,btrfs,vfs和DeviceMapper。

Container format

Docker Engine將namespaces,control groups和UnionFS組合到一個稱為容器格式的包裝器中。默認的容器格式是libcontainer將來,Docker可以通過與BSD Jails或Solaris Zones等技術集成來支持其他容器格式。

7、Next steps

  • 閱讀有關安裝Docker Engine的信息
  • 獲得Docker入門 教程的實踐經驗
  • 查看Docker Engine用戶指南中的示例和深入討論主題

8、Docker安裝

docker支持架構

Docker 的安裝和使用有一些前提條件,主要體現在體系架構和內核的支持上。
對於體系架構,除了 Docker 一開始就支持的 X86-64 ,其他體系架構的支持則一直在不斷地完善和推進中。

docker版本
Docker 分為 CE 和 EE 兩大版本。CE 即社區版,免費支持周期 7 個月;EE 即企業版,強調安全,付費使用,支持周期 24 個月。
我們在安裝前可以參看官方文檔獲取最新的 Docker 支持情況,官方文檔在這裏:https://docs.docker.com/install/。

docker內核支持檢測
Docker 對於內核支持的功能,即內核的配置選項也有一定的要求(比如必須開啟 Cgroup 和 Namespace 相關選項,以及其他的網絡和存儲驅動等)。
Docker 源碼中提供了一個檢測腳本來檢測和指導內核的配置,腳本鏈接在這裏:https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh。
在滿足前提條件後,安裝就變得非常的簡單了。

卸載老版本

由於 Docker-CE 支持 64 位版本的 CentOS 7 ,並且要求內核版本不低於 3.10,首先我們需要卸載掉舊版本的 Docker:

$ sudo yum remove docker docker-client docker-client-latest docker-common \
docker-latest docker-latest-logrotate \
docker-logrotate docker-selinux docker-engine-selinux docker-engine

  

安裝依賴包

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

安裝 DOCKER CE版本

$ sudo yum install docker-ce

  

查看docker信息

[root@localhost ~]# docker info
Containers: 2
 Running: 2
 Paused: 0
 Stopped: 0
Images: 4
Server Version: 18.09.0
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: c4446665cb9c30056f4998ed953e6d4ff22c7c39
runc version: 4fc53a81fb7c994640722ac585fa9ca548971871
init version: fec3683
Security Options:
 seccomp
  Profile: default
Kernel Version: 3.10.0-693.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 3.702GiB
Name: localhost.localdomain
ID: B6DC:4GR2:YPOR:YXZ4:XYAV:HGJD:MDGW:BFPP:ET4I:GWNL:6QGB:CCJG
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Registry Mirrors:
 http://f1361db2.m.daocloud.io/
Live Restore Enabled: false
Product License: Community Engine

  

配置鏡像加速器

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

  

  

Docker概述與安裝(官網譯)