1、Docker部署及基礎理論

来源:https://www.cnblogs.com/wupalupa/archive/2020/02/18/12325233.html
-Advertisement-
Play Games

1、Docker入門簡介 Docker技術類似碼頭上看到的集裝箱,最早集裝箱沒有出現的時候,碼頭上有許多搬運的工人在搬運貨物,有了集裝箱以後,搬運貨物變得簡單,通過集裝箱的搬運模式更加單一、高效,將貨物打包在集裝箱裡面,可以複製貨物之間相互影響。 如果要將貨物搬運到另一個碼頭就需要裝運,通過集裝箱, ...


1、Docker入門簡介

  Docker技術類似碼頭上看到的集裝箱,最早集裝箱沒有出現的時候,碼頭上有許多搬運的工人在搬運貨物,有了集裝箱以後,搬運貨物變得簡單,通過集裝箱的搬運模式更加單一、高效,將貨物打包在集裝箱裡面,可以複製貨物之間相互影響。

  如果要將貨物搬運到另一個碼頭就需要裝運,通過集裝箱,可以直接把它們運送到另一個航艙內,而且完全可以保證裡面的貨物是整體地搬遷,而不會損壞貨物本身。

  而Docker虛擬化正是基於類似的原理,將原本複雜的環境打包成為鏡像模塊,然後將模塊遷移到各個平臺,可以快速地交付使用,從而減少了人工大量的干預。

  Docker是一個開源的應用容器引擎,開發者使用打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到如何流行的Linux機器上,進而實現虛擬化。

  容器是完全使用沙箱機制的,而且互相之間不會有如何介面,幾乎沒有性能開銷,可以很容易地在機器和數據中心運行,最重要的是,他們不依賴於如何語言、框架或包括系統。

  Docker虛擬化和傳統虛擬機(KVM、Xen等)方式的不同之處在於Docker虛擬化可以在操作系統層面上直接實現App或者虛擬化,直接復用本地機器的操作系統,而傳統方式則需要在硬體的基礎上,虛擬GurstOS操作系統,然後在GuestOS操作系統上部署相關的App應用。

Docker虛擬化實施有以下三個概念:

  • Docker鏡像:Docker鏡像是一個靜態模塊,與常見的ISO鏡像類似,是一個樣板,不能直接修改,可以通過封裝生成;
  • Docker容器:基於Docker鏡像運行啟動的應用或系統,稱之為一個Docker容器或Docker虛擬機;
  • Docker倉庫:Docker倉庫是存放Docker鏡像的地方,常見分為公開倉庫和私有倉庫兩種形式;

Docker倉庫的用處:

  Docker倉庫是Docker鏡像的存儲倉庫。可以推送鏡像到docker倉庫中,然後在docker客戶端,可以從docker倉庫中搜索和拉取鏡像。

Docker容器是如何工作的:

  一個Docker容器包含了一個操作系統、用戶添加的文件和元數據(meta-data)。每個容器都是從鏡像建立的,鏡像告訴Docker容器內包含了什麼,當容器啟動時運行什麼程式,還有許多配置數據。Docker鏡像是只讀的,當Docker運行一個從鏡像建立的容器,它會在鏡像頂部添加一個可讀寫的層,應用程式可以在這裡運行。

Docker用途:簡單配置、代碼流水管理、開發效率、應用隔離、伺服器整合、多租戶、快速部署

2、Docker LXC及Cgroup

  Docker虛擬化的由來需要從Docker發展歷史來看,最早的Docker技術為LXC+聯合文件系統(AUFS)組合。Docker0.9.0版本開始引入libcontainer可以視作LXC的替代品,其中LXC負責資源管理,AUFS負責鏡像管理。而LXC包括Cgroup、Namespace、Chroot等組件,並通過Cgroups進行資源管理。

  Docker、LXC、Cgroup三者的關係是Cgroup在最底層落實資源管理。LXC在Cgroup上封裝了一層,Docker又在LXC封裝了一層。

  Cgroups最初的目標是為資源管理提供一個統一的框架,整合現有的Cpuset等子系統,也為未來開發新的子系統提供介面。

  Linux container容器可以提供輕量級的虛擬化,以便隔離進程和資源,而且不需要提供指令解釋機制以及全虛擬化的其他複雜性。容器有效地將由單個操作系統管理的資源劃分到獨立的組中,以便更好地在獨立的組之間平衡有衝突的資源使用需求。

3、Docker虛擬化特點

Docker虛擬化跟傳統虛擬化相比,有以下特點:

  • 操作啟動快,運行時的性能可以獲取極大提升,管理操作(啟動、停止、開啟、重啟等)都是以秒或毫秒為單位的;
  • 輕量級虛擬化,用戶會擁有足夠的“操作系統”,僅需添加或減小鏡像即可,單台伺服器上可以部署100~1000個containers容器,而傳統虛擬化能虛擬10~20個虛擬機就非常不錯了;
  • 開源免費,成本低,由現代Linux內核支持並驅動;
  • 前景及雲支持,正在越來越受歡迎,各大主流公司都在推動Docker的快速交付;
  • 更簡單的管理,使用Docker只需要小小的修改,就可以替代以往大量的更新工作,所有的修改都以增量的方式被分發和更新,從而實現自動化並且高效的管理;

4、Docker虛擬化原理

  Docker虛擬化中最核心部分為Docker引擎,Docker引擎是一個C/S(client/server)機構的應用;

  Docker server是一個常駐進程,rest API實現了client和server間的交互協議 ,CLI實現容器和鏡像的管理,為用戶提供統一的操作界面。Docker使用C/S架構,client通過介面與server進程通信實現容器的構建、運行和發佈,client和server可以運行在同一臺集群,也可以通過跨主機實現遠程通信。

Docker鏡像作為Docker中最基本的概念,有以下特性:

  • 鏡像分層:每個鏡像都由一個或多個鏡像層組成;
  • 可通過在某個鏡像上加上一定的鏡像層得到新鏡像(此過程可以通過編寫DockerFile或基於容器Commit實現);
  • 每個鏡像層擁有唯一鏡像ID;
  • 鏡像在存儲和使用時共用相同的鏡像層(根據ID),所以在Pull鏡像時,已有的鏡像層會在自動跳過下載;
  • 每個鏡像層都是只讀的,即使啟動成容器,也無法對其真正的修改,修改只會作用於最上層的容器層。

Docker容器,可以理解為一個或多個運行進程,而這些運行進程將占有相應的記憶體、相應的CPU計算資源,則通過Docker鏡像的鏡像層文件來提供。

基於每個鏡像的json文件,Docker可以通過解析Docker鏡像的驚悚文件,獲知應該在這個鏡像之上運行什麼樣的進程,應該為進程配置怎樣的環境變數,Docker守護進程實現了靜態向動態的轉變。

5、Docker安裝配置-CentOS7.X系列安裝Docker軟體

sed -i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config
setenforce 0
yum -y install epel-release
yum -y install docker*
systemctl start docker

報錯:

Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.

解決辦法:

vi /etc/sysconfig/docker

systemctl start docker
systemctl enable docker
ps -ef |grep docker

 

Docker下載加速,預設docker下載是從國外去下載,但是下載速度慢,所有我們 這邊使用國內的:

cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com"
]
}
EOF
systemctl restart docker

6、Dockers必備命令

公共倉庫Nginx和CentOS鏡像下載以及本地導入CentOS鏡像,執行如下命令

docker pull centos             :Docker下載CentOS鏡像

docker pull nginx             :Docker下載Nginx鏡像

本地導入鏡像:

格式:cat 本地容器快照名 | docker import-自定義容器名:自定義標記名

docker version             :查看Docker版本

docker info             :查看當前信息

docker search centos           :搜索可用Docker鏡像

docker search -s 500 nginx           :搜索星級為500以上的鏡像

docker pull docker.io/nginx           :下載nginx鏡像

docker images             :查看當前Docker所有鏡像

啟動Docker鏡像:

-i:表示交互輸入 -t:表示打開終端 -d:表示後臺啟動

docker run -i -t centos /bin/bash

進入Docker容器:

docker exec -it a9ca644fd04f /bin/bash       :紅色部分是容器的ID

退出Docker容器:

(1)exit或者ctrl+d :退出並停止容器

(2)先按ctrl+p再按ctrl+q :退出偽終端,容器後臺運行

docker ps         :查看容器,-l獲得最後一個容器的ID,-a查看所有的容器

docker start id       :啟動Docker容器,可以利用docker ps查看容器,然後輸入iD

docker stop id         :關閉Docker容器

docker save -o centos-7.2.tar centos:latest         :存儲鏡像

docker rm id     :刪除Docker容器,如果刪除多個容器則需要使用空格隔離即可~!

docker rmi id               :刪除Dokcer鏡像

docker load < centos-7.2.tar           :導入容器快照

docker export -o centos-7.2.test.tar container_id   :Docker導出鏡像

cat centos-7.2.test.tar | docker import - centos-7.2.test :本地導入Docker鏡像,紅色為鏡像名,需要自定義

docker run -p 5500:80 -it nginx /bin/bash       :將宿主機5500埠映射給容器的80埠

nginx                        :啟動nginx服務

圖片顯示

 

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 眾所周知,由於 Adobe Flash 控制項歷史久遠,積累了許多漏洞。早在2017年7月,Adobe就宣佈了要在2020年底終止對 Flash 的支持。微軟稱其瀏覽器移除 Flash 插件的最後期限是2020年12月前。但由於國內的主流網站都還大量使用 Flash ,因此我們需要一種辦法解決此問題, ...
  • Win+S -> msconfig ...
  • 當linux 代理軟體設置好後,我們需要設置命令行代理的連接方式,這樣在命令行中的軟體才能使用: 設置http/https代理: export https_proxy="127.0.0.1:12333" export http_proxy="127.0.0.1:12333" 如果有密碼: expor ...
  • 徹底理解Windows認證 一、Windows本地認證 1. 我的密碼在哪裡? 路徑:C:\Windows\System32\config\SAM 當我們登錄系統的時候,系統會自動的讀取SAM文件中的“密碼”與我們輸入的“密碼”進行對比,如果相同,證明認證成功。 2. NTML(NT LAN Man ...
  • 這裡分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期 ...
  • Microchip的SRAM和NVSRAM系列(SPI串列SRAM和NVSRAM設備)提供了一種輕鬆添加外部RAM的方式,且具有以下特性功能 特性低功耗CMOS技術:4μA最大待機電流 標準4引腳SPI介面:晶元選擇、數據輸入、數據輸出和時鐘 無限寫入存儲器、零寫入時間 提供備用電池(512Kb、1 ...
  • [root@localhost ~]# vim user.sh 1 #!/bin/bash 2 for i in `cut -d ":" -f1 /etc/passwd`; 3 do 4 echo -e "Hello User:" "\033[31m$i\033[0m" "shell is" "\0 ...
  • parted用於操縱磁碟分區的程式,通常用於規則大小超過2T的分區,也可用於小分區的規劃;它支持多種分區表格式,包括MS-DOS(MBR)和GPT;這對於為新操作系統創建空間,重新組織磁碟使用以及將數據複製到新硬碟非常有用;parted命令的操作都是實時生效的,每操作一步都應小心 parted具有兩 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...