【最新版】Docker實戰總結

2020-11-24 騰訊網

重磅乾貨,第一時間送達

目錄

Docker簡介

Docker優勢

Docker基本概念

Docker安裝使用

Docker常用命令

Docker鏡像構建

Docker本地倉庫

Docker圖形管理工具Portainer

Docker集群管理工具Swarm

Docker運維流程圖

Docker配置管理

Docker後續問題

Docker報錯解決

正文

一、 Docker簡介

Docker是一個開源的應用容器引擎,開發者可以打包自己的應用到容器裡面,然後遷移到其他機器的docker應用中,可以實現快速部署。

簡單的理解,docker就是一個軟體貨櫃化平臺,就像船隻、火車、卡車運輸貨櫃而不論其內部的貨物一樣,軟體容器充當軟體部署的標準單元,其中可以包含不同的代碼和依賴項。

按照這種方式容器化軟體,開發人員和 IT 專業人員只需進行極少修改或不修改,即可將其部署到不同的環境,如果出現的故障,也可以通過鏡像,快速恢復服務。

二、Docker優勢

1.特性優勢

2.資源優勢

三、Docker基本概念

Client(客戶端):是Docker的用戶端,可以接受用戶命令和配置標識,並與Docker daemon通信。

Images(鏡像):是一個只讀模板,含創建Docker容器的說明,它與作業系統的安裝光碟有點像。

Containers(容器):鏡像的運行實例,鏡像與容器的關係類比面向對象中的類和對象。

Registry(倉庫):是一個集中存儲與分發鏡像的服務。最常用的Registry是官方的Docker Hub 。

四、 Docker安裝使用

作業系統:CentOS 7

1、安裝依賴

2、添加軟體源

3、安裝docker-ce(對系統內核有一定要求,centos6不支持)

4、設置自啟並啟動

5、查看版本

運行示例:Nginx

1、搜索並下載鏡像

2、啟動一個容器並映射埠到本地

3、訪問本地映射埠

五、 Docker常用命令

1.鏡像控制

2.容器控制

3.容器啟動

-d : 後臺運行容器,並返回容器ID

-i:以交互模式運行容器,通常與 -t 同時使用

-t:為容器重新分配一個偽輸入終端,通常與 -i 同時使用

-v:綁定掛載目錄

--name="mycontainer": 為容器指定一個名稱

--net="bridge": 指定容器的網絡連接類型,支持如下:

-p/-P :埠映射,格式如圖:

4.其他命令

更多可以參考官網:https://docs.docker.com/engine/reference/commandline/cli/

六、Docker鏡像構建

1.Docker commit(1運行2修改3保存)

a) 運行容器

b) 修改容器(這裡我只是做個演示,所以就複製一下文件,具體修改需要根據你實際情況)

c) 將容器保存為新的鏡像

2. Dockerfile(1編寫2構建)

a) 編寫Dockerfile文件

b) 執行Dockerfile文件

3. Dockerfile 常用指令

七、 Docker本地倉庫

1、拉取鏡像倉庫

2、啟動鏡像服務

3、註冊https協議(需要通過本地倉庫下載鏡像,均需要配置)

4、新增tag指明倉庫地址

5、上傳鏡像到本地倉庫

6、查看本地倉庫

更多可以參考:https://www.jianshu.com/p/8f38f198724e

八、 Docker與圖形管理工具Portainer

1. 簡介

Portainer是Docker的圖形化管理工具,提供狀態顯示面板、應用模板快速部署、容器鏡像網絡數據卷的基本操作(包括上傳下載鏡像,創建容器等操作)、事件日誌顯示、容器控制臺操作、Swarm集群和服務等集中管理和操作、登錄用戶管理和控制等功能。功能十分全面,基本能滿足中小型單位對容器管理的全部需求。

2. 安裝使用

a) 搜索並下載鏡像

b) 單機方式運行

c) 訪問http://localhost:9000

首次登陸需要註冊用戶,給admin用戶設置密碼,然後單機版選擇local連接即可。

d) 控制管理

更多可以參考:https://www.cnblogs.com/river2005/p/8283700.html

九、 Docker與集群管理工具Swarm

1. 簡介

Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干臺Docker主機抽象為一個整體,並且通過一個入口統一管理這些Docker主機上的各種Docker資源。

搜索Java知音公眾號,回復「後端面試」,送你一份Java面試題寶典

2. 安裝使用

Swarm 在 Docker 1.12 版本之前屬於一個獨立的項目,在 Docker 1.12 版本發布之後,該項目合併到了 Docker 中,成為 Docker 的一個子命令。

a)啟動swarm集群只需要執行初始化命令即可:

b)設置manager節點

c)設置worker節點

d)查看節點

e)創建服務

更多參考:https://www.jianshu.com/p/028b40ca4f2ahttps://www.cnblogs.com/xiangsikai/p/9935814.html

3. 對比K8s究竟有何異同?

a)出生不同

Google根據其在Linux上容器管理經驗,改造到docker管理上,就是kubernetes。他的在許多方面表現良好,最重要的是構造於Google多年的寶貴經驗只上。

kubernetes並不是為了docker寫的,kubernetes把集群帶到了一個全新的高度,代價是學習曲線比較陡。docker-swarm 使用了一個不同的方式,它是docker原生的集群工具。

最方便的部分是它暴露了docker標準的編程接口,意味著你之前一直在使用的任何與docker溝通的工具(docker CLI, docker compose等),都可以無縫的在docker swarm上使用。

搜索Java知音公眾號,回復「後端面試」,送你一份Java面試題寶典

b)安裝配置不同

安裝設置swarm非常簡單,簡單明了並且很靈活。我們需要做的就是安裝一個服務發現工具,然後在所有的節點上安裝swarm容器。

相比較而言,kubernetes的安裝就有點複雜晦澀了。不同的作業系統上安裝都不同。每個作業系統都有自己的獨立安裝指令。

c)運行方式不同

使用Swarm和使用容器沒有什麼不同。比如,你習慣於使用Docker CLI(命令行接口),你可以繼續使用幾乎相同的命令。

如果你習慣於使用Docker Componse來運行容器,你可以繼續在Swarm集群中使用。不管你之前習慣於怎麼使用容器,你仍舊可以使用,只是在更大級別的集群中使用。

Kubernetes要求你去學習它自己的CLI(命令行接口)和配置。你不能使用你之前創建的docker-compose.yml配置,你必須要去新建與Kubernetes對應的配置。

你也不能使用之前學習的Docker CLI(命令行接口)。你必須要去學習 Kubernetes CLI(命令行接口)

最後,當需要在Docker Swarm 和 Kubernetes做出選擇時,可以考慮如下幾點:

你是否想依賴於Docker自己來解決集群的問題。如果是,選擇Swarm。如果某些功能在Docker中不支持,那它也非常可能在Swarm中找不到,因為Swarm是依賴於Docker API的。

另外一方面,如果你想要一個工具可以解決Docker的限制,Kubernetes將是不錯的選擇。Kubernetes不是基於Docker,而是基於Google多年對於管理容器的經驗。它是按照自己的方式來行事。

十、 Docker運維流程圖

十一、 Docker配置管理

1.用了容器以後,還需要配置管理嗎?

起初我們跟Docker官方一樣,屬於理想主義派。天真的認為容器就應該是inmutable的,當需要配置變更的時候,重新構建鏡像重新部署。

基於這一思路,我們在cSphere中添加了個鏡像自動構建模塊,用戶可以配置代碼倉庫的地址。服務的配置文件保存於Git或者SVN庫中,需要配置變更時,向版本庫中Push一下,自動通過hook觸發鏡像構建,並自動完成線上容器的重建。

通過這套系統,用戶可以非常方便的批量更新線上的服務,並不局限於配置文件的變更,代碼的變更也天生支持。經過實際使用,這套系統能夠很好的滿足開發和測試環境的需求,提升工作效率。

但是,在生產環境中使用的時候,我們發現這種流程其實並不那麼完美,主要表現在:鏡像構建和部署雖然自動化了,但構建是針對VCS中的某個倉庫的,改一行配置就得整體重新構建一下,在更新容器時還需要把鏡像重新分發到所有機器上,配置變更速度太慢。這種方式的配置變更會涉及到服務的重啟,這在生產環境某些場景下是不可接受的 ,有可能引起短暫的服務中斷。

搜索Java知音公眾號,回復「後端面試」,送你一份Java面試題寶典

2.應用配置文件應該需要做到什麼?

Docker應用配置文件能夠保持能夠支持針對不同環境作出更改。另外配置文件支持在線更改,重啟就生效。一般分為以下兩種方式。

a) Docker環境變量

需要在製作鏡像的時候就需要提前想好,有哪些參數是部署容器的時候會經常更改,然後把這些參數抽出來做成容器的環境變量,然後在部署的容器的時候填入不同的參數即可。

但是如果後續發現有一些參數不同場景下部署的時候也會修改,那就需要再重新製作鏡像了。

b)應用配置文件

上述的管理方式不太靈活,靈活的管理方式是將配置文件和鏡像剝離開,這樣就不會被鏡像給綁定了。

註:最新版本可以參考docker config命令管理

十二、 Docker後續問題

集群環境

網絡安全

存儲管理

日誌收集

實時監控

性能調優

……

十三、Docker報錯解決

【解決】Got permission denied while trying to connect to the Docker daemon socket at......dial unix /var/run/docker.sock: permission denied

https://www.cnblogs.com/leozhanggg/p/11730189.html

【解決】error pulling image configuration: Get https:// ...... x509: certificate has expired or is not yet valid

https://www.cnblogs.com/leozhanggg/p/12031433.html

【解決】image ... could not be accessed on a registry to record its digest.

https://www.cnblogs.com/leozhanggg/p/12023531.html

【解決】http: server gave HTTP response to HTTPS client

https://www.cnblogs.com/leozhanggg/p/12023456.html

【解決】OCI runtime exec failed......executable file not found in $PATH": unknown

https://www.cnblogs.com/leozhanggg/p/12023429.html

來源:cnblogs.com/leozhanggg/p/12039953.html

相關焦點

  • Docker & Singularity
    自從微軟更新了WSL2(雖然我一直在用WSL),但是發現docker只能在WSL2下使用,又是被需求更新。於是上網查了下window 家庭版的更新方法。打個補丁就好(可以參考該連結https://www.jianshu.com/p/a20c2d58eaac)。
  • Docker v1.13.0 正式版發布,應用容器引擎
    Docker v1.13.0 正式版發布了。
  • 雲計算核心技術Docker教程:利用Dockerfile來創建鏡像
    在docker使用過程中,我們可以從已經創建的容器中更新鏡像,並且commit提交這個鏡像來創建新的鏡像,使用docker commit 來擴展一個鏡像比較簡單,但是不方便在一個團隊中分享此時我們可以使用 Dockerfile 指令來創建一個新的鏡像。
  • 將Docker與pipeline一起使用
    test' }}返回值還可以用於通過以下方法將Docker映像發布到 Docker Hub或自定義註冊表,push()例如:node { checkout scm def customImage = docker.build("my-image:${env.BUILD_ID}") customImage.push()}映像「標籤」的一種常見用法是為latest最新,經過驗證的Docker
  • 雲計算核心技術Docker教程: Docker 容器連接
    下面我們來實現通過埠連接到一個 docker 容器。我們創建了一個 python 應用的容器。命令如下:# docker run -d -P training/webapp python app.py另外,我們可以指定容器綁定的網絡地址,比如綁定 127.0.0.1。
  • Docker專用基礎Linux發行版選擇
    有很多Linux發行商和雲運營商也發布了專門的容器發行版,與傳統發行版作業系統相比,這些Linux可能更安全,更簡練,發行版有一我們列出業界流行的幾種發行版,希望能幫助大家甄選最適合自己的發行版。概述容器專用作業系統是指專為運行容器而設計的Linux發行版,這些發行版可以提供常規發行外一些額外的優勢:簡練:容器專用作業系統應該很小,僅安裝必須的組件。
  • 使用Jenkins、Docker 構建部署 Serverless 應用
    和 docker 命令掛載到容器中,啟動 jenkins 命令如下: 注意:由於容器內 Jenkins 服務是由 jenkins 用戶啟動的,它無法訪問 /var/run/docker.sock,因此我們需要更改這個文件的權限。
  • CoreOS實踐指南(七):Docker容器管理服務
    有了第一桶金的Alex這次準備幹一票大的,他計劃開發一個足以顛覆傳統的伺服器系統的Linux發行版。為了提供能夠從任意作業系統版本穩定無縫地升級到最新版系統的能力,Alex急需解決應用程式與作業系統之間的耦合問題。因此,當時還名不見經傳的Docker容器引起了他的注意,憑著敏銳直覺,Alex預見了這個項目的價值,當仁不讓地將Docker做為了這個系統支持的第一套應用程式隔離方案。
  • Docker是什麼?有什麼用途?及理論知識詳細說明
    運維生成環境中:docker化。 了解docker三個重要概念 image鏡像 docker鏡像就是一個只讀模板,比如,一個鏡像可以包含一個完整的centos,裡面僅安裝apache或用戶的其他應用,鏡像可以用來創建docker容器,另外docker提供了一個很簡單的機制來創建鏡像或者更新現有的鏡像,用戶甚至可以直接從其他人那裡下周一個已經做好的鏡像來直接使用 container
  • 雲計算核心技術Docker教程:Docker Compose的restart和rm命令詳解
    Docker-Compose restart命令可以重新啟動所有已停止並正在運行的服務,Docker-Compose rm命令可以刪除已經停止的容器,如果服務在運行,需要先docker-compose stop 停止容器。
  • 微服務部署到docker中
    可以看到項目根目錄下新增一個名為Dockerfile的文件6.通過Xftp將項目從Windows下的磁碟位置拷貝到Linux的root目錄下二、Linux下通過Docker構建應用1.通過Xshell連接上Linux虛擬機,進入到項目目錄下,然後通過docker
  • 雲計算核心技術Docker教程:Docker Compose的pull和push命令詳解
    Docker-Compose pull命令可以拉取docker-compose.yml或者docker-stack.yml文件中定義的服務關聯的鏡像,Docker-Compose push命令可以將服務鏡像推送到registry/repository中。
  • SpringBoot+GitLab+Docker+Jenkins實現持續集成下
    下載Docker鏡像docker pull jenkinsci/blueocean6.1.2.創建Docker容器docker create --name jenkins -u root -p 8889:8080 --privileged=true -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /home/jenkins:/home docker.io
  • 資料庫到底要不要上Docker
    資料庫到底要不要上Docker IT實戰聯盟 發表於 2020-04-06 09:59:00 前言 近2年Docker非常的火熱,各位開發者恨不得把所有的應用
  • Docker 引擎概述
    Docker Engine 實際上是一個客戶端伺服器(client-server)應用:一個在伺服器上長期運行的被稱為 dockerd 的進程。一個指定結構的 APIs,這個 API 被用來與 Docker 守護進程進行通信。
  • 雲計算核心技術Docker教程:Compose使用
    2.使用 docker-compose.yml 定義構成應用程式的服務,這樣它們可以在隔離環境中一起運行。3.最後,執行 docker-compose up 命令來啟動並運行整個應用程式。運行以下命令以下載 Docker Compose 的當前穩定版本:$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  • 基於TensorFlow 、OpenCV 和 Docker 的實時視頻目標檢測
    要將其數據流發送到 docker 容器,請在運行 docker 鏡像時使用 device 參數:docker run --device=/dev/video0對於 Mac 和 Windows 用戶,將網絡攝像頭流發送到容器的方式並不像 Linux 那樣簡單(儘管 Mac 基於 Unix)。
  • 大白話讓你更懂Docker
    他只好在另一個城市花了重金又打造了一棟別墅 小A有一個朋友小B,跟小A是同樣的場景,唯一不同的是,小B認識一個魔法師,這個魔法師施展了法術(構建鏡像),將小B的別墅直接複製了一份(鏡像),裝到了小B的雙肩包(倉庫)裡,小B去到另一個城市找了一片空地(容器)直接將裝在書包裡的房子拿了出來,拿出來的房子就能變成跟小B在原城市一模一樣的房子 聽完了故事,咱們再來理解docker
  • Docker邁入雲(DockerHub)+端(Docker引擎)時代
    Docker深受網際網路巨頭髮PaaS創業公司青睞,國內的百度在大規模實踐Docker,Google 的 Compute Engine 也支持 docker 在其之上運行,Redhat也積極地在RHEL中集成對Docker的支持。
  • Docker 創建你自己的橋接網絡
    下面的例子顯示了如何創建一個橋接網絡: $ docker network create -d bridge my_bridge 參數 -d 用於告訴 Docker 在新的網絡中使用 橋接(bridge) 驅動。