容器技術-docker2

容器化技術Docker

Docker介紹
官網:
docker.io
docker.com
公司名稱:原名dotCloud ?14年改名為docker
容器產品:docker 16年已經被更名為Moby

docker-hub
? ? ? ?docker.io

docker容器歷史

和虛擬機一樣,容器技術也是一種資源隔離的虛擬化技術。我們追溯它的歷史,會發現它的技術雛形早已有之。

容器簡史

容器概念始于 1979 年提出的 UNIX chroot,它是一個 UNIX 操作系統的系統調用,將一個進程及其子進程的根目錄改變到文件系統中的一個新位置,讓這些進程只能訪問到這個新的位置,從而達到了進程隔離的目的。

2000 年的時候 FreeBSD 開發了一個類似于 chroot 的容器技術 Jails,這是最早期,也是功能最多的容器技術。Jails 英譯過來是監獄的意思,這個“監獄”(用沙盒更為準確)包含了文件系統、用戶、網絡、進程等的隔離。

2001 Linux 也發布自己的容器技術 Linux VServer,2004 Solaris 也發布了 Solaris Containers,兩者都將資源進行劃分,形成一個個 zones,又叫做虛擬服務器。

2005 年推出 OpenVZ,它通過對 Linux 內核進行補丁來提供虛擬化的支持,每個 OpenVZ 容器完整支持了文件系統、用戶及用戶組、進程、網絡、設備和 IPC 對象的隔離。

2007 年 Google 實現了 Control Groups( cgroups ),并加入到 Linux 內核中,這是劃時代的,為后期容器的資源配額提供了技術保障。

2008 年基于 cgroups 和 linux namespace 推出了第一個最為完善的 Linux 容器 LXC。

2013 年推出到現在為止最為流行和使用最廣泛的容器 Docker,相比其他早期的容器技術,Docker 引入了一整套容器管理的生態系統,包括分層的鏡像模型,容器注冊庫,友好的 Rest API。

2014 年 CoreOS 也推出了一個類似于 Docker 的容器 Rocket,CoreOS 一個更加輕量級的 Linux 操作系統,在安全性上比 Docker 更嚴格。

2016 年微軟也在 Windows 上提供了容器的支持,Docker 可以以原生方式運行在 Windows 上,而不是需要使用 Linux 虛擬機。

基本上到這個時間節點,容器技術就已經很成熟了,再往后就是容器云的發展,由此也衍生出多種容器云的平臺管理技術,其中以 kubernetes 最為出眾,有了這樣一些細粒度的容器集群管理技術,也為微服務的發展奠定了基石。因此,對于未來來說,應用的微服務化是一個較大的趨勢。

為什么需要容器

其一,這是技術演進的一種創新結果,其二,這是人們追求高效生產活動的一種工具。

隨著軟件開發的發展,相比于早期的集中式應用部署方式,現在的應用基本都是采用分布式的部署方式,一個應用可能包含多種服務或多個模塊,因此多種服務可能部署在多種環境中,如虛擬服務器、公有云、私有云等,由于多種服務之間存在一些依賴關系,所以可能存在應用在運行過程中的動態遷移問題,那這時如何保證不同服務在不同環境中都能平滑的適配,不需要根據環境的不同而去進行相應的定制,就顯得尤為重要。

就像貨物的運輸問題一樣,如何將不同的貨物放在不同的運輸機器上,減少因貨物的不同而頻繁進行貨物的裝載和卸載,浪費大量的人力物力。

為此人們發明了集裝箱,將貨物根據尺寸形狀等的不同,用不同規格的集裝箱裝載,然后再放到運輸機上運輸,由于集裝箱密封,只有貨物到達目的地才需拆封,在運輸過程能夠再不同運輸機上平滑過渡,所以避免了資源的浪費。

因此集裝箱被譽為是運輸業與世界貿易最重要的發明。

Docker 容器的思想就是采用集裝箱思想,為應用提供了一個基于容器的標準化運輸系統。Docker 可以將任何應用及其依賴打包成一個輕量級、可移植、自包含的容器。容器可以運行在幾乎所有的操作系統上。這樣容器就可以跑在任何環境中,因此才有了那句話:

Build Once, Run Anywhere

這種集裝箱的思想我們也能從 Docker 的 Logo 中看出來,這不就是一堆集裝箱嗎?

Docker對paas的降維打擊(了解)

IaaS  infrastructure as a service 基礎設施及服務
PaaS platform as a service   平臺級服務
SaaS software as a service    軟件級服務
dSaaS data storage as a service  數據級服務
CaaS   container as a service   容器級服務PaaS 項目成功的主要原因是它提供了一種名叫"應用托管"的能力。 paas之前主流用戶的普遍用法是租一批 AWS 或者 OpenStack 的虛擬機,然后像以前管理物理服務器那樣,用腳本或者手工的方式在這些機器上部署應用。這個部署過程會碰到云端虛擬機和本地環境不一致的問題,所以當時的云計算服務,比的就是誰能更好地模擬本地服務器環境,能帶來更好的"上云"體驗。而 PaaS 開源項目的出現,就是當時解決這個問題的一個最佳方案。PaaS 如何部署應用虛擬機創建好之后,運維人員只需要在這些機器上部署一個 Cloud Foundry 項目,然后開發者只要執行一條命令就能把本地的應用部署到云上,這條命令就是:# cf push " 應用 "PaaS 項目的核心組件像 Cloud Foundry 這樣的 PaaS 項目,最核心的組件就是一套應用的打包和分發機制。 Cloud Foundry 為每種主流編程語言都定義了一種打包格式,而"cf push"的作用,基本上等同于用戶把應用的可執行文件和啟動腳本打進一個壓縮包內,上傳到云上 Cloud Foundry 的存儲中。接著,Cloud Foundry 會通過調度器選擇一個可以運行這個應用的虛擬機,然后通知這個機器上的 Agent 把應用壓縮包下載下來啟動。由于需要在一個虛擬機上啟動很多個來自不同用戶的應用,Cloud Foundry 會調用操作系統的 Cgroups 和 Namespace 機制為每一個應用單獨創建一個稱作"沙盒"的隔離環境,然后在"沙盒"中啟動這些應用進程。這就實現了把多個用戶的應用互不干涉地在虛擬機里批量自動地運行起來的目的。這正是 PaaS 項目最核心的能力。 而這些 Cloud Foundry 用來運行應用的隔離環境,或者說"沙盒",就是所謂的"容器"。注:Cloud Foundry是當時非常主流非常火的一個PaaS項目Docker 鏡像Docker 項目確實與 Cloud Foundry 的容器在大部分功能和實現原理上都是一樣的,可偏偏就是這剩下的一小部分不一樣的功能,成了 Docker 項目接下來"呼風喚雨"的不二法寶。這個功能,就是 Docker 鏡像。恐怕連 Docker 項目的作者 Solomon Hykes 自己當時都沒想到,這個小小的創新,在短短幾年內就如此迅速地改變了整個云計算領域的發展歷程。PaaS的問題:PaaS 之所以能夠幫助用戶大規模部署應用到集群里,是因為它提供了一套應用打包的功能。可就是這個打包功能,卻成了 PaaS 日后不斷遭到用戶詬病的一個"軟肋"。根本原因:一旦用上了 PaaS,用戶就必須為每種語言、每種框架,甚至每個版本的應用維護一個打好的包。這個打包過程,沒有任何章法可循,更麻煩的是,明明在本地運行得好好的應用,卻需要做很多修改和配置工作才能在 PaaS 里運行起來。而這些修改和配置,并沒有什么經驗可以借鑒,基本上得靠不斷試錯,直到你摸清楚了本地應用和遠端 PaaS 匹配的"脾氣"才能夠搞定。最后結局是,"cf push"確實是能一鍵部署了,但是為了實現這個一鍵部署,用戶為每個應用打包的工作可謂一波三折,費盡心機。而Docker 鏡像解決的,恰恰就是打包這個根本性的問題。 Docker 鏡像的精髓所謂 Docker 鏡像,其實就是一個壓縮包。但是這個壓縮包里的內容,比 PaaS 的應用可執行文件 + 啟停腳本的組合就要豐富多了。實際上,大多數 Docker 鏡像是直接由一個完整操作系統的所有文件和目錄構成的,所以這個壓縮包里的內容跟你本地開發和測試環境用的操作系統是完全一樣的。這就有意思了:假設你的應用在本地運行時,能看見的環境是 CentOS 7.2 操作系統的所有文件和目錄,那么只要用 CentOS 7.2 的 ISO 做一個壓縮包,再把你的應用可執行文件也壓縮進去,那么無論在哪里解壓這個壓縮包,都可以得到與你本地測試時一樣的環境。當然,你的應用也在里面!這就是 Docker 鏡像最厲害的地方:只要有這個壓縮包在手,你就可以使用某種技術創建一個"沙盒",在"沙盒"中解壓這個壓縮包,然后就可以運行你的程序了。更重要的是,這個壓縮包包含了完整的操作系統文件和目錄,也就是包含了這個應用運行所需要的所有依賴,所以你可以先用這個壓縮包在本地進行開發和測試,完成之后,再把這個壓縮包上傳到云端運行。在這個過程中,你完全不需要進行任何配置或者修改,因為這個壓縮包賦予了你一種極其寶貴的能力:本地環境和云端環境的高度一致!這,正是 Docker 鏡像的精髓。那么,有了 Docker 鏡像這個利器,PaaS 里最核心的打包系統一下子就沒了用武之地,最讓用戶抓狂的打包過程也隨之消失了。相比之下,在當今的互聯網里,Docker 鏡像需要的操作系統文件和目錄,可謂唾手可得。所以,你只需要提供一個下載好的操作系統文件與目錄,然后使用它制作一個壓縮包即可,這個命令就是:
# docker build " 鏡像 "鏡像制作完成,用戶就可以讓 Docker 創建一個"沙盒"來解壓這個鏡像,然后在"沙盒"中運行自己的應用,這個命令就是:
# docker run " 鏡像 "Docker 項目給 PaaS 世界帶來的"降維打擊"其實是提供了一種非常便利的打包機制。這種機制直接打包了應用運行所需要的整個操作系統,從而保證了本地環境和云端環境的高度一致,避免了用戶通過"試錯"來匹配兩種不同運行環境之間差異的痛苦過程。

容器和虛擬機的區別

容器和 VM 的主要區別:
容器提供了基于進程的隔離,而虛擬機提供了資源的完全隔離。虛擬機可能需要一分鐘來啟動,而容器只需要一秒鐘或更短。容器使用宿主操作系統的內核,而虛擬機使用獨立的內核。Docker 的局限性之一是,它只能用在 64 位的操作系統上。Docker對服務器端開發/部署帶來的變化:
實現更輕量級的虛擬化,方便快速部署
對于部署來說可以極大的減少部署的時間成本和人力成本
Docker支持將應用打包進一個可以移植的容器中,重新定義了應用開發,測試,部署上線的過程,核心理念就
是 Build once, Run anywhere
1)標準化應用發布,docker容器包含了運行環境和可執行程序,可以跨平臺和主機使用;
2)節約時間,快速部署和啟動,VM啟動一般是分鐘級,docker容器啟動是秒級;
3)方便構建基于SOA架構或微服務架構的系統,通過服務編排,更好的松耦合;
4)節約成本,以前一個虛擬機至少需要幾個G的磁盤空間,docker容器可以減少到MB級;
5)方便持續集成,通過與代碼進行關聯使持續集成非常方便;
6)可以作為集群系統的輕量主機或節點,在IaaS平臺上,已經出現了CaaS,通過容器替代原來的主機。Docker 優勢:
1、交付物標準化
Docker是軟件工程領域的"標準化"交付組件,最恰到好處的類比是"集裝箱"。
集裝箱將零散、不易搬運的大量物品封裝成一個整體,集裝箱更重要的意義在于它提供了一種通用的封裝貨物的
標準,卡車、火車、貨輪、橋吊等運輸或搬運工具采用此標準,隧道、橋梁等也采用此標準。以集裝箱為中心的
標準化設計大大提高了物流體系的運行效率。
傳統的軟件交付物包括:應用程序、依賴軟件安裝包、配置說明文檔、安裝文檔、上線文檔等非標準化組件。
Docker的標準化交付物稱為"鏡像",它包含了應用程序及其所依賴的運行環境,大大簡化了應用交付的模式。2、一次構建,多次交付
類似于集裝箱的"一次裝箱,多次運輸",Docker鏡像可以做到"一次構建,多次交付"。當涉及到應用程序多副本
部署或者應用程序遷移時,更能體現Docker的價值。3、應用隔離
集裝箱可以有效做到貨物之間的隔離,使化學物品和食品可以堆砌在一起運輸。Docker可以隔離不同應用程序
之間的相互影響,但是比虛擬機開銷更小。
總之,容器技術部署速度快,開發、測試更敏捷;提高系統利用率,降低資源成本。

Docker的度量:
Docker是利用容器來實現的一種輕量級的虛擬技術,從而在保證隔離性的同時達到節省資源的目的。Docker的
可移植性可以讓它一次建立,到處運行。Docker的度量可以從以下四個方面進行:
1)隔離性Docker采用libcontainer作為默認容器,代替了以前的LXC。libcontainer的隔離性主要是通過內核的命名空間來實現 的,有pid、net、ipc、mnt、uts命令空間,將容器的進程、網絡、消息、文件系統和主機名進行隔離。
2)可度量性Docker主要通過cgroups控制組來控制資源的度量和分配。
3)移植性Docker利用AUFS來實現對容器的快速更新。AUFS是一種支持將不同目錄掛載到同一個虛擬文件系統下的文件系統,支持對每個目錄的讀寫權限管理。AUFS具有層的概念,每一次修改都是在已有的只寫層進行增量修改,修改的內容將形成新的文件層,不影響原有的層。
4)安全性安全性可以分為容器內部之間的安全性;容器與托管主機之間的安全性。容器內部之間的安全性主要是通過命名空間和cgroups來保證的。容器與托管主機之間的安全性主要是通過內核能力機制的控制,可以防止Docker非法入侵托管主機。Docker容器使用AUFS作為文件系統,有如下優勢:
1)節省存儲空間多個容器可以共享同一個基礎鏡像存儲。
2)快速部署如果部署多個來自同一個基礎鏡像的容器時,可以避免多次復制操作。
3)升級方便升級一個基礎鏡像即可影響到所有基于它的容器。
4)增量修改可以在不改變基礎鏡像的同時修改其目錄的文件,所有的更高都發生在最上層的寫操作層,增加了基礎鏡像的可共享內 容。

Docker容器基本概念

  1. Linux 容器技術:Docker 利用 Linux 內核的容器特性來實現虛擬化。Linux 容器是一種輕量級的虛擬化技術,通過使用命名空間(namespace)和控制組(cgroup)等功能,可以在操作系統層面上實現隔離和資源限制。Docker 利用這些功能創建和管理容器,使得應用程序可以在隔離的環境中運行。
  2. 鏡像:Docker 鏡像是構建容器的基礎,它是一個只讀的文件系統,包含了運行應用程序所需的所有依賴項、配置和文件。鏡像可以通過 Dockerfile 進行定義和構建,其中包含了一系列的指令來描述應用程序的配置和構建過程。鏡像可以通過層(layer)的概念進行管理,每個指令都會生成一個新的層,多個層可以共享和重用,從而實現鏡像的高效存儲和分發。
  3. 容器:Docker 容器是從鏡像創建的運行實例。容器包含了一個完整的文件系統、運行時環境和應用程序。通過容器,可以將應用程序和其依賴項打包在一起,并提供一致的運行環境,使得應用程序可以在不同的計算機上以相同的方式運行。容器之間是相互隔離的,每個容器都有自己的文件系統、進程和網絡棧。
  4. Docker 引擎:Docker 引擎是 Docker 的核心組件,負責管理和運行容器。它包括了三個主要的組件:Docker 守護進程(dockerd)、Docker 客戶端(docker)和 Docker 鏡像倉庫(Docker Registry)。Docker 守護進程負責監控和管理容器,接收來自客戶端的請求并相應地創建、啟動、停止和銷毀容器。Docker 客戶端是用戶與 Docker 引擎交互的命令行工具或 API。Docker 鏡像倉庫用于存儲和分享 Docker 鏡像。
  5. 容器編排和管理:除了單個容器的管理,Docker 還提供了一些工具和功能來進行容器編排和管理。例如,Docker Compose 允許通過一個單獨的配置文件定義和運行多個容器組成的應用程序。Docker Swarm 是 Docker 官方提供的集群管理工具,可以將多個 Docker 主機組成一個集群,并在集群中部署和管理容器。此外,還有其他第三方工具如 Kubernetes,可以與 Docker 集成,提供更強大的容器編排和管理能力。

Docker系統有兩個程序:docker服務端和docker客戶端

  1. docker服務端:
    是一個服務進程,管理著所有的容器。
  2. docker客戶端:
    扮演著docker服務端的遠程控制器,可以用來控制docker的服務端進程。
Docker三大核心組件:Docker 鏡像 - Docker  images Docker 倉庫 - Docker  registeriesDocker 容器 - Docker  containers docker 倉庫:用來保存鏡像,可以理解為代碼控制中的代碼倉庫。同樣的,Docker 倉庫也有公有和私有的概念。
公有的 Docker  倉庫名字是 Docker Hub。Docker Hub  提供了龐大的鏡像集合供使用。這些鏡像可以是自己創建,或者在別人的鏡像基礎上創建。Docker 倉庫是 Docker 的分發部分。 docker 鏡像:Docker 鏡像是 Docker 容器運行時的只讀模板,每一個鏡像由一系列的層 (layers) 組成。Docker 使用  UnionFS 來將這些層聯合到單獨的鏡像中。UnionFS  允許獨立文件系統中的文件和文件夾(稱之為分支)被透明覆蓋,形成一個單獨連貫的文件系統。正因為有了這些層的存在,Docker  是如此的輕量。當你改變了一個 Docker  鏡像,比如升級到某個程序到新的版本,一個新的層會被創建。因此,不用替換整個原先的鏡像或者重新建立(在使用虛擬機的時候你可能會這么做),只是一個新的層被添加或升級了。現在你不用重新發布整個鏡像,只需要升級,層使得分發 Docker 鏡像變得簡單和快速。 在 Docker 的術語里,一個只讀層被稱為鏡像,一個鏡像是永久不會變的。由于 Docker 使用一個統一文件系統,Docker 進程認為整個文件系統是以讀寫方式掛載的。 但是所有的變更都發生頂層的可寫層,而下層的原始的只讀鏡像文件并未變化。由于鏡像不可寫,所以鏡像是無狀態的。
每一個鏡像都可能依賴于由一個或多個下層的組成的另一個鏡像。下層那個鏡像是上層鏡像的父鏡像。鏡像名字:registry/repo:tagdaocloud.io/library/centos:7基礎鏡像:
一個沒有任何父鏡像的鏡像,謂之基礎鏡像。鏡像ID:
所有鏡像都是通過一個 64 位十六進制字符串 (內部是一個 256 bit 的值)來標識的。 為簡化使用,前 12 個字符可以組成一個短ID,可以在命令行中使用。短ID還是有一定的碰撞機率,所以服務器總是返回長ID。Docker 容器:Docker 容器和文件夾很類似,一個Docker容器包含了所有的某個應用運行所需要的環境。每一個 Docker 容器都是從 Docker  鏡像創建的。Docker 容器可以運行、開始、停止、移動和刪除。每一個 Docker 容器都是獨立和安全的應用平臺,Docker 容器是  Docker 的運行部分。

docker安裝

自帶源安裝

CentOS 7 中 Docker 的安裝:
Docker 軟件包已經包括在默認的 CentOS-Extras 軟件源(聯網使用centos7u2自帶網絡Yum源)里。因此想要安裝 docker,只需要運行下面的 yum 命令:       
# yum install docker啟動 Docker 服務:# service docker start# chkconfig docker onCentOS 7    # systemctl start docker.service# systemctl enable docker.service確定docker服務在運行:
結果會顯示服務端和客戶端的版本,如果只顯示客戶端版本說明服務沒有啟動
[root@docker1 yum]# docker version
Client: Docker Engine - CommunityVersion:           19.03.4API version:       1.40Go version:        go1.12.10Git commit:        9013bf583aBuilt:             Fri Oct 18 15:52:22 2019OS/Arch:           linux/amd64Experimental:      falseServer: Docker Engine - CommunityEngine:Version:          19.03.4API version:      1.40 (minimum version 1.12)Go version:       go1.12.10Git commit:       9013bf583aBuilt:            Fri Oct 18 15:50:54 2019OS/Arch:          linux/amd64Experimental:     falsecontainerd:Version:          1.2.10GitCommit:        b34a5c8af56e510852c35414db4c1f4fa6172339runc:Version:          1.0.0-rc8+devGitCommit:        3e425f80a8c931f88e6d94a8c831b9d5aa481657docker-init:Version:          0.18.0GitCommit:        fec3683查看docker基本信息:#docker info校驗Docker的安裝
[root@master ~]# docker run -it ubuntu bash
Unable to find image 'ubuntu:latest' locally
Trying to pull repository daocloud.io/ubuntu ... 
latest: Pulling from daocloud.io/ubuntu
22ecafbbcc4a: Pull complete 
580435e0a086: Pull complete 
Digest: sha256:80c2902178d79f439b13c5a244f3b1ef67ca890dbbe58d19caa13301ca56a505如果自動進入下面的容器環境,說明ubuntu鏡像運行成功,Docker的安裝也沒有問題:可以操作容器了
root@50a0449d7729:/# pwd     
/
root@50a0449d7729:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

docker版本和官方源安裝

moby、docker-ce與docker-ee
最早時docker是一個開源項目,主要由docker公司維護。
2017年3月1日起,docker公司將原先的docker項目改名為moby,并創建了docker-ce和docker-ee。三者關系:moby是繼承了原先的docker的項目,是社區維護的的開源項目,誰都可以在moby的基礎打造自己的容器產品docker-ce是docker公司維護的開源項目,是一個基于moby項目的免費的容器產品docker-ee是docker公司維護的閉源產品,是docker公司的商業產品。moby project由社區維護,docker-ce project是docker公司維護,docker-ee是閉源的。要使用免費的docker,從https://github.com/docker/docker-ce上獲取。要使用收費的docker,從https://www.docker.com/products/docker-enterprise上獲取。docker-ce的發布計劃v1.13.1之后,發布計劃更改為:Edge:   月版本,每月發布一次,命名格式為YY.MM,維護到下個月的版本發布Stable: 季度版本,每季度發布一次,命名格式為YY.MM,維護4個月安裝:docker-ce的release計劃跟隨moby的release計劃,可以使用下面的命令直接安裝最新的docker-ce:# curl -fsSL https://get.docker.com/ | shCentOS如果是centos,上面的安裝命令會在系統上添加yum源:/etc/yum.repos.d/docker-ce.repo # wget https://download.docker.com/linux/centos/docker-ce.repo# mv docker-ce.repo /etc/yum.repos.d# yum install -y docker-ce或者直接下載rpm安裝:# wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm# yum localinstall docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm注意:在說docker的時候盡量說Linux docker因為Docker on Mac,以及 Windows Docker(Hyper-V 實現),實際上是基于虛擬化技術實現的,跟我們介紹使用的 Linux 容器完全不同。

國內源安裝新版docker

使用aliyun docker yum源安裝新版docker
刪除已安裝的Docker# yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-selinux \docker-engine-selinux \docker-engine配置阿里云Docker Yum源# yum install -y yum-utils device-mapper-persistent-data lvm2 git# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安裝指定版本查看Docker版本:# yum list docker-ce --showduplicates安裝較舊版本(比如Docker 17.03.2) :需要指定完整的rpm包的包名,并且加上--setopt=obsoletes=0 參數:# yum install -y --setopt=obsoletes=0 \docker-ce-17.03.2.ce-1.el7.centos.x86_64 \docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch安裝Docker新版本(比如Docker 18.03.0):加上rpm包名的版本號部分或不加都可以:# yum install docker-ce-18.03.0.ce  -y或者# yum install docker-ce -y啟動Docker服務:#systemctl enable docker#systemctl start docker查看docker版本狀態: # docker -vDocker version 1.13.1, build 8633870/1.13.1  # docker versionClient:Version:           18.09.0API version:       1.39Go version:        go1.10.4Git commit:        4d60db4Built:             Wed Nov  7 00:48:22 2018OS/Arch:           linux/amd64Experimental:      falseServer: Docker Engine - CommunityEngine:Version:          18.09.0API version:      1.39 (minimum version 1.12)Go version:       go1.10.4Git commit:       4d60db4Built:            Wed Nov  7 00:19:08 2018OS/Arch:          linux/amd64Experimental:     false查看docker運行狀態:# docker infoContainers: 0Running: 0Paused: 0Stopped: 0Images: 0Server Version: 18.09.0Storage Driver: overlay2Backing Filesystem: xfsSupports d_type: trueNative Overlay Diff: trueLogging Driver: json-fileCgroup Driver: cgroupfsPlugins:Volume: localNetwork: bridge host macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslogSwarm: inactiveRuntimes: runcDefault Runtime: runcInit Binary: docker-initcontainerd version: c4446665cb9c30056f4998ed953e6d4ff22c7c39runc version: 4fc53a81fb7c994640722ac585fa9ca548971871init version: fec3683Security Options:seccompProfile: defaultKernel Version: 3.10.0-957.el7.x86_64Operating System: CentOS Linux 7 (Core)OSType: linuxArchitecture: x86_64CPUs: 4Total Memory: 1.934GiBName: dockerID: MF5S:ZX25:SWJ3:XEIG:FFHP:5VXF:F5AL:KQFF:KKXP:XZGY:YGTE:EBQFDocker Root Dir: /var/lib/dockerDebug Mode (client): falseDebug Mode (server): falseRegistry: https://index.docker.io/v1/Labels:Experimental: falseInsecure Registries:127.0.0.0/8Live Restore Enabled: falseProduct License: Community Engine~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~bonding報錯1:docker info的時候報如下錯誤bridge-nf-call-iptables is disabled解決1:追加如下配置,然后重啟系統# vim /etc/sysctl.conf   net.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-arptables = 1問題2:虛擬機ping百度也能ping通,但是需要等好幾秒才出結果,關鍵是下載鏡像一直報錯如下# docker pull daocloud.io/library/nginxUsing default tag: latestError response from daemon: Get https://daocloud.io/v2/: dial tcp: lookup daocloud.io on 192.168.1.2:53: read udp   192.168.1.189:41335->192.168.1.2:53: i/o timeout解決2:我的虛擬機用的網關和dns都是虛擬機自己的.1或者.2,把DNS改成8.8.8.8問題就解決了,ping百度也秒出結果# vim /etc/resolv.confnameserver 8.8.8.8

生產docker的環境配置

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://pilvpemn.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
#注意:一定注意編碼問題,出現錯誤---查看命令:journalctl -amu docker 即可發現錯誤

登入登出docker hub

login     Register or log in to a Docker registry
登錄到自己的Docker register,需有Docker Hub的注冊賬號# docker loginUsername: testPassword: Email: xxxx@foxmail.comWARNING: login credentials saved in /root/.docker/config.jsonLogin Succeededlogout    Log out from a Docker registry
退出登錄# docker logoutRemove login credentials for https://index.docker.io/v1/注:推送鏡像庫到私有源(可注冊 docker 官方賬戶,推送到官方自有賬戶)

國內鏡像源

去查看如何使用aliyun的docker鏡像庫
去查看如何使用網易蜂巢的docker鏡像庫Docker 加速器  
使用 Docker 的時候,需要經常從官方獲取鏡像,但是由于顯而易見的網絡原因,拉取鏡像的過程非常耗時,嚴重影響使用 Docker 的體驗。因此 DaoCloud 推出了加速器工具解決這個難題,通過智能路由和緩存機制,極大提升了國內網絡訪問 Docker Hub 的速度,目前已經擁有了廣泛的用戶群體,并得到了 Docker 官方的大力推薦。
如果您是在國內的網絡環境使用 Docker,那么 Docker 加速器一定能幫助到您。    Docker 加速器對 Docker 的版本有要求嗎?    
需要 Docker 1.8 或更高版本才能使用,如果您沒有安裝 Docker 或者版本較舊,請安裝或升級。    Docker 加速器支持什么系統?    
Linux, MacOS 以及 Windows 平臺。    Docker 加速器是否收費?    
DaoCloud 為了降低國內用戶使用 Docker 的門檻,提供永久免費的加速器服務,請放心使用。  國內比較好的鏡像源:網易蜂巢、aliyun和daocloud,下面是daocloud配置方式:
Docker Hub并沒有在國內部署服務器或者使用國內的CDN服務,因此在國內特殊的網絡環境下,鏡像下載十分耗時。
為了克服跨洋網絡延遲,能夠快速高效地下載Docker鏡像,可以采用DaoCloud提供的服務Docker Hub Mirror,速度
快很多
1.注冊網站賬號
2.然后進入你自己的""制臺",選擇"加速器",點"立即開始",接入你自有的主機,就看到如下的內容了curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361XXX.m.daocloud.io
該腳本可以將 --registry-mirror 加入到你的 Docker 配置文件 /etc/docker/daemon.json 中。適用于 Ubuntu14.04、Debian、CentOS6 、CentOS7、Fedora、Arch Linux、openSUSE Leap 42.1,其他版本可能有細微不同。更多詳情請訪問文檔。3.配置完成后從Docker Hub Mirror下載鏡像,命令:#dao pull ubuntu注1:第一次使用daocloud是配置了加速器的,可以直接使用dao pull centos拉取經過加速之后的鏡像,但是后來發現,不使用加速器也可以直接在daocloud官網上找到想要拉取的鏡像地址進行拉取,比如:#docker pull 
daocloud.io/library/tomcat:6.0-jre7
注2:上面配置加速器的方法,官網會更新,最新方法你應該根據官網提示去操作。
===========以下為tigerfive親測================
使用國內鏡像:
進入網站:https://hub.daocloud.io/
注冊帳號:tigerfive
進入鏡像市場:填寫搜索的鏡像名稱選擇第一個點擊右邊快速部署:寫入名稱,選擇我的主機,按提示繼續在主機上進行所有操作# mkdir /docker
# cd /docker
# curl -L -o /tmp/daomonit.x86_64.rpm https://get.daocloud.io/daomonit/daomonit.x86_64.rpm
# rpm -Uvh /tmp/daomonit.x86_64.rpm
# daomonit -token=36e3dedaa2e6b352f47b26a3fa9b67ffd54f5077 save-config
# service daomonit start出現如下界面:說明自有主機接入完成(注意:這里我用的主機是我自己筆記本上的一臺虛擬機)接下來我們在鏡像市場找到一個centos的鏡像:點擊右面的拉取按鈕,會出現拉取命令如下:
我們按命令執行:# docker pull daocloud.io/library/centos:7出現如下提示:說明拉取成功Trying to pull repository daocloud.io/library/centos ... latest: Pulling from daocloud.io/library/centos08d48e6f1cff: Pull complete Digest: sha256:934ff980b04db1b7484595bac0c8e6f838e1917ad3a38f904ece64f70bbca040Status: Downloaded newer image for daocloud.io/library/centos:latest查看一下本地鏡像:      [root@docker1 docker]# docker imagesREPOSITORY                   TAG                 IMAGE ID            CREATED             SIZEdaocloud.io/library/centos   latest              0584b3d2cf6d        3 weeks ago         196.5 MB在拉取回來的本地鏡像執行命令:萬年不變的"你好世界":    # docker run daocloud.io/library/centos:7 /bin/echo "hello world"hello world使用容器中的shell:[root@docker1 docker]# docker run -i -t centos:7 /bin/bash  Unable to find image 'centos:latest' locallyTrying to pull repository docker.io/library/centos ...   注意上面這樣是不行的,因為默認使用的是docker官方默認鏡像庫的位置,需要按如下命令執行:[root@docker1 docker]# docker run -i -t daocloud.io/library/centos:7 /bin/bash-i   捕獲標準輸入輸出-t   分配一個終端或控制臺進去之后可以在里面執行其他命令[root@336412c1b562 /]# lsanaconda-post.log  bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var[root@336412c1b562 /]# df -h   #可以看到這里的磁盤分區是鏡像本身的磁盤分區Filesystem                                                                                           Size  Used Avail Use% Mounted on/dev/mapper/docker-253:0-134984824-bc712573ec743c160ea903f6196ff4814056230d6a232eb3d39761d182bc7d1c   10G  240M  9.8G   3% /tmpfs                                                                                                497M     0  497M   0% /devtmpfs                                                                                                497M     0  497M   0% /sys/fs/cgroup/dev/mapper/centos-root                                                                               38G  2.3G   36G   7% /etc/hostsshm                                                                                                   64M     0   64M   0% /dev/shm[root@336412c1b562 /]# exitexit[root@docker1 docker]# df -h   #這是我本地主機系統的磁盤分區文件系統                 容量  已用  可用 已用% 掛載點/dev/mapper/centos-root   38G  2.3G   36G    7% /devtmpfs                 487M     0  487M    0% /devtmpfs                    497M     0  497M    0% /dev/shmtmpfs                    497M   20M  478M    4% /runtmpfs                    497M     0  497M    0% /sys/fs/cgroup/dev/vda1                497M  107M  391M   22% /boottmpfs                    100M     0  100M    0% /run/user/0/dev/sr0                 7.3G  7.3G     0  100% /mnt/centos7u2重新進入容器:執行其他命令試一下,可以看到我們的容器可以做我們熟悉的所有的事情:
1.可以上網[root@9990e6c99bbd /]# ping www.baidu.com -c 2PING www.a.shifen.com (180.97.33.107) 56(84) bytes of data.64 bytes from 180.97.33.107: icmp_seq=1 ttl=52 time=19.8 ms64 bytes from 180.97.33.107: icmp_seq=2 ttl=52 time=19.1 ms
2.網絡yum源已經配置好[root@9990e6c99bbd /]# yum repolistLoaded plugins: fastestmirror, ovlbase                                                                                                                           | 3.6 kB  00:00:00     extras                                                                                                                         | 3.4 kB  00:00:00     updates                                                                                                                        | 3.4 kB  00:00:00     (1/4): base/7/x86_64/group_gz                                                                                                  | 155 kB  00:00:01     (2/4): extras/7/x86_64/primary_db                                                                                              | 166 kB  00:00:04     (3/4): updates/7/x86_64/primary_db                                                                                             | 9.1 MB  00:00:07     (4/4): base/7/x86_64/primary_db                                                                                                | 5.3 MB  00:00:22     Determining fastest mirrors* base: mirrors.tuna.tsinghua.edu.cn* extras: mirrors.tuna.tsinghua.edu.cn* updates: mirrors.163.comrepo id                                                                repo name                                                                statusbase/7/x86_64                                                          CentOS-7 - Base                                                          9007extras/7/x86_64                                                        CentOS-7 - Extras                                                         393updates/7/x86_64                                                       CentOS-7 - Updates                                                       2560repolist: 119603.可以安裝軟件:[root@9990e6c99bbd /]# lsof -i:80bash: lsof: command not found[root@9990e6c99bbd /]# yum install lsof httpd -yLoaded plugins: fastestmirror, ovlLoading mirror speeds from cached hostfile* base: mirrors.tuna.tsinghua.edu.cn* extras: mirrors.tuna.tsinghua.edu.cn* updates: mirrors.163.comResolving Dependencies--> Running transaction  check---> Package lsof.x86_64 0:4.87-4.el7 will be installed--> Finished Dependency ResolutionDependencies Resolved======================================================================================================================================================Package                          Arch                               Version                                   Repository                        Size======================================================================================================================================================Installing:lsof                             x86_64                             4.87-4.el7                                base                             331 k

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/37975.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/37975.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/37975.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java基于ssm+jsp 二手手機回收平臺系統

1前臺首頁功能模塊 二手手機回收平臺系統&#xff0c;在系統首頁可以查看首頁、手機商城、新聞資訊、我的、跳轉到后臺、購物車等內容&#xff0c;如圖1所示。 圖1前臺首頁功能界面圖 用戶注冊&#xff0c;在用戶注冊頁面可以填寫賬號、密碼、姓名、手機、郵箱、照片、地址、…

深度解析RocketMq源碼-消息推送、持久化、消費全流程

1.緒論 前面的幾篇文章都剖析了broker的存儲文件。那么生產者發送一條消息到達broker過后是如何處理的&#xff0c;這條消息結果什么處理過后&#xff0c;消費者才能夠消費這條消息。接下來&#xff0c;帶我們將仔細剖析一下一條消息從生產者生產消息&#xff0c;到到達broker…

在線字節大端序小端序轉換器

具體請前往&#xff1a;在線字節大端序小端序轉換器

操作系統期末復習真題四

一、前言&#x1f680;&#x1f680;&#x1f680; 小鄭在刷題的過程中幫大家整理了一些常見的考試題目&#xff0c;以及易于遺忘的知識點&#xff0c;希望對大家有所幫助。 二、正文?????? 1.OS的不確定性是指(ABC)。 A.程序的運行次序不確定 B.程序多次運行的時間不…

獨立開發者系列(13)——示例理解面向對象與過程

專業術語晦澀難懂&#xff0c;特別是當你沒有寫過稍微大點的系統的時候&#xff0c;你要理解這里面的區別很難。 從最簡單的早期我們學習開始&#xff0c;我們除了練習hello world掌握了入門函數之后&#xff0c;基本都再練習算法。比如水仙花數的獲取&#xff0c;冒泡排序&…

Redis的使用和原理

目錄 1.初識Redis 1.1 Redis是什么&#xff1f; 1.2 Redis的特性 1.2.1 速度快 1.2.2 基于鍵值對的數據結構服務器 1.2.3 豐富的功能 1.2.4 簡單穩定 1.2.5 持久化 1.2.6 主從復制 1.2.7 高可用和分布式 1.3 Redis的使用場景 1.3.1 緩存 1.3.2 排行榜系統 1.3.3 計數器應用 1.3…

【計算機網絡】HTTPS——更安全的HTTP通信(個人筆記)

學習日期&#xff1a;2024.6.26 內容摘要&#xff1a;HTTPS存在的意義、特點和工作方式 HTTP的缺點——易竊聽、偽裝、篡改 在Web及網絡基礎中&#xff0c;我們已經知道了網頁是怎么打開的&#xff0c;HTTP確實是一個相當優秀和方便的協議&#xff0c;但HTTP也有很多不足&…

【操作系統期末速成】 EP04 | 學習筆記(基于五道口一只鴨)

文章目錄 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文&#xff1a;??????2.1 考點七&#xff1a;進程通信2.2 考點八&#xff1a;線程的概念2.3 考點九&#xff1a;處理機調度的概念及原則2.4 考點十&#xff1a;調度方式與調度算法 一、前言&#x1f680;…

排序(冒泡排序、選擇排序、插入排序、希爾排序)-->深度剖析(一)

歡迎來到我的Blog&#xff0c;點擊關注哦&#x1f495; 前言 排序是一種基本的數據處理操作&#xff0c;它涉及將一系列項目重新排列&#xff0c;以便按照指定的標準&#xff08;通常是數值大小&#xff09;進行排序。在C語言中&#xff0c;排序算法是用來對元素進行排序的一系…

FPGA 690T NVME高速存儲設計

高速存儲設計會有各種需求的考慮&#xff0c;那么對應的方案也不完全相同&#xff0c;這篇文章出一期純FPGA實現的高速存儲方案。用純fpga實現高速存儲板卡有易國產化&#xff0c;功耗低和體積小等特點&#xff0c;缺點就是靈活性不是很強&#xff0c;實現標準ext4和nfs文件系統…

計算機的錯誤計算(十六)

摘要 計算機的錯誤計算&#xff08;十五&#xff09;中歷史事件給我們的啟示或警示。 計算機的錯誤計算&#xff08;十五&#xff09;介紹了歷史上發生的一些事件。從這些事件我們可以得到一些啟示或警示。 若不是油氣平臺的沉沒&#xff0c;設計者會得出精度低了嗎&#x…

信息盲盒系統設計

信息盲盒系統是一種結合了隨機性和趣味性的信息傳遞和接收方式&#xff0c;類似于實體盲盒的概念&#xff0c;但在數字領域應用。這種系統通常用于增加用戶參與度、提升用戶體驗或作為營銷策略的一部分。設計一個信息盲盒系統需要考慮以下幾個關鍵要素&#xff1a; 1. 定義目標…

數據倉庫建模基礎理論-01-為什么需要數據建模?

一、什么是數據模型&#xff1f; 數據模型是數據庫的基礎結構&#xff0c;用于描述和組織數據的方式。 它不僅是數據庫的底層結構&#xff0c;還是一個概念性工具&#xff0c;幫助理解數據的含義和關系。 數據模型包括數據本身、數據之間的關系、數據的語義&#xff08;含義和…

C++ | Leetcode C++題解之第206題反轉鏈表

題目&#xff1a; 題解&#xff1a; class Solution { public:ListNode* reverseList(ListNode* head) {if (!head || !head->next) {return head;}ListNode* newHead reverseList(head->next);head->next->next head;head->next nullptr;return newHead;} …

在Ubuntu 16.04上安裝和配置GitLab的方法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到網站。 簡介 GitLab CE&#xff08;Community Edition&#xff09;是一個開源應用程序&#xff0c;主要用于托管 Git 倉庫&#xff0c;并提供額…

AI在創造還是毀掉音樂之論文

AI在創造還是毀掉音樂&#xff1f; 簡介&#xff1a;最近一個月&#xff0c;輪番上線的音樂大模型&#xff0c;一舉將素人生產音樂的門檻降到了最低&#xff0c;并掀起了音樂圈會不會被AI徹底顛覆的討論。短暫的興奮后&#xff0c;AI產品的版權歸屬于誰&#xff0c;創意產業要…

一秒記單詞:音通義通,一秒牢記

一秒記單詞&#xff0c;從小學到高中&#xff0c;一秒牢記 一、小學生記單詞&#xff0c;快速突破 1.1 好的開始&#xff0c;是成功的一半 sun n.太陽 【通】尚 moon n.月亮 【通】母恩 mother n.母親&#xff0c;媽 【通】媽汁 sea n.海&#xff0c;大海 【通】細 sand …

【MySQL基礎篇】SQL指令:DQL及DCL

1、DQL DQL - 介紹 DQL英文全稱是Data Query Language(數據查詢語言)&#xff0c;數據查詢語言&#xff0c;用來查詢數據表中的記錄。&#xff08;在MySQL中應用是最為廣泛的&#xff09; 查詢關鍵字&#xff1a;SELECT DQL - 語法 SELECT 字段列表 FROM 表名列表 WHER…

【人工智能學習之圖像操作(六)】

【人工智能學習之圖像操作&#xff08;六&#xff09;】 Hough變換直線檢測圓檢測 圖像分割 Hough變換 在圖像處理中&#xff0c;霍夫變換用來檢測任意能夠用數學公式表達的形狀&#xff0c;即使這個形狀被破壞或者有點扭曲 直線檢測 import cv2 import numpy as np image …

利用微信開放標簽<wx-open-launch-weapp>在H5中跳轉微信小程序報錯完美的解決方案

一、報錯&#xff1a; [WXTAG] [JSCORE] The slot <template> or <script type"text/wxtag-template"> of <wx-open-launch-weapp> is missing 二、源碼 官方源代碼如下&#xff0c;<script type"text/wxtag-template"></sc…