主頁 >  其他 > docker 簡單介紹與安裝

docker 簡單介紹與安裝

2020-09-22 09:56:01 其他

主機虛擬化(vmware,visual box等)

  • type-Ⅰ
  • type=Ⅱ

主機虛擬化是隔離最徹底的,但是由于多隔了一個虛擬的作業系統,性能會慢一些,

容器虛擬化(docker等)

隔離沒有主機虛擬化強,但是由于沒有多余的虛擬的作業系統,所有的docker都運行在一個內核之上,性能會好,

不管什么樣的虛擬化以下資訊都需要是各自獨立的:

縮寫 說明
uts 主機名和域名
mount 掛載點(檔案系統)
IPC 信號量,訊息佇列和共享記憶體
PID 行程ID
network 網卡,tcp套接字,網路設備,埠等
user 用戶和用戶組

要想實作以上功能

必須使用linux內核提供namespace功能,通過系統呼叫(clone(),setns()等),

分配資源給容器

  • 主機虛擬化:在創建系統的時候,就可以指定使用幾個cpu,多大的記憶體等外設,

  • 容器虛擬化:通過linux內核提供的control groups(Cgroups)功能,來控制各個容器,使用多少cpu,記憶體等,

    Cgroups可以控制以下設備:

    縮寫 說明
    blkio 塊設備IO
    cpu CPU
    cpuacct CPU資源使用報告
    cpuset 多處理器平臺上的CPU集合
    devices 設備訪問
    freezer 掛起或恢復任務
    memory 記憶體用量和報告
    perf_event 對cgroup中的任務進行統一性能測驗
    net_cls cgroup中的任務創建的資料報文的類別識別符

隔離能力對比

容器級虛擬化肯定比主機級虛擬化的隔離能力低,

理由:容器級虛擬化,是在同一個內核之上的;主機級虛擬化本身就是在不同的內核上,

linux內核都提供了上述的隔離能力所用到的系統呼叫了,那還有docker什么事呢?

那些系統呼叫是需要寫程式的,不是誰都能用的好,所以要有一個便于使用的現成的工具就好了,

這些現成的工具有個名字:LXC(LinuX Container),這些工具包含下面的命令(這些命令需要額外安裝:sudo apt install lava-lxc-mocker,sudo apt install lxc-utils):

  • lxc-create:假如在red hat上安裝一個utuntu,lxc-create提供了很多模板,對應不同的linux發行版,然后根據模板去遠程倉庫里找相應的包,下載到本地后,進行安裝,

當用上面的命令創建好生成環境后,如何遷移,壞了如何恢復,如何創建成百上千的生成環境,還是個棘手的問題,

docker就是解決上面問題的,它就是LXC的二次封裝,注意它不是容器技術,容器技術是linux內核的,它只是把容器技術簡化,容易使用而已,

docker把整個環境打包成一個鏡像檔案,以后再使用的時候,直接把鏡像檔案拿過來就可以使用,比如你想使用一個ubuntu環境,那就可以找到一個安裝了ubuntu的docker鏡像檔案,比如你想使用nginx環境,那就可以找到一個安裝了nginx的docker鏡像檔案,

  • lxc的主要用途是隔離了一個系統
  • docker主要用途是隔離一個用戶行程,比如nginx,

docker特點

  • 從運維角度看:假如某個安裝了nginx的docker環境出現問題了,運維人員要去調查,首先運維人員要先進入到這個docker環境,調查也需要工具(比如ps,top等),這些工具如果docker里沒有安裝的話,還需要額外安裝,對運維人員來說很麻煩,如果一個軟體系統由很多docker組成,那么每個docker里都要安裝除錯工具,

  • 從開發角度看:任何語言,只要在一個環境上開發,然后打成docker,就可以在任意支持docker的作業系統環境上運行了,這是極大的便利,真正達到了一次開發到處部署,運行,

  • 從軟體部署角度看:由于每個docker里基本就一個core行程,要把這些行程編排到一起,也不容易,

  • 從系統角度看:假設你的軟體使用的作業系統是ubuntu,web服務器是nginx,快取是redis,那么你就需要一個ubuntu的docker,nginx的docker,redis的docker,想象一下nginx的docker和redis的docker里其實也是有作業系統的,再加上ubuntu作業系統,就有了3個作業系統,產生了浪費,所以docker必須解決這個問題,采用【分層構建,聯合掛載】,

    也就是說讓nginx的docker和redis的docker里不包含作業系統,讓nginx的docker和redis的docker使用的作業系統是ubuntu的docker里的ubuntu作業系統,

  • 從編排角度看:一個軟體系統里包括很多別的子系統,每個子系統里有若干的行程,每個行程基本都是一個docker,這些子系統有執行的先后順序,和依賴關系,如何組織好這一大堆的docker是個難點,所有就出現了一堆的docker編排工具,最厲害的就是Kubernetes (這個單詞來自于希臘語,含義是舵手領航員,K8S是它的縮寫,用“8”字替代了“ubernete”這8個字符,),K8S的創造者,是眾人皆知的行業巨頭——Google, K8S并不是一件全新的發明,它的前身,是Google自己搗鼓了十多年的Borg系統, Google為了表明以后自己獨自做大,建立了CNCF組織,ibm,aws等也加入其中,讓K8S健康發展

    還有下面的編排工具:

    • nmp
    • machine+swarm+compose
    • mesos+marathon

docker結構圖:

docker是C/S架構的,server端是個守護行程,通過unix socket和client通信,所以server端和client端必須在同一臺物理機器上,client和server通信的應用層協議是https,docker先從registry下載鏡像(imags)檔案,然后加載鏡像檔案到container里,然后client端就可以操作了,

1,docker deamon:server端守護行程,

2,docker clinet:客戶端,

3,docker registries:docker倉庫,目前就是docker hub,國內訪問docker hub很慢,可以使用阿里的加速,但是必須注冊成為阿里的開發者,阿里才會提供加速鏈接,大家要想一個問題,每個鏡像都有版本,比如nginx有很多版本,如何特定到具體版本呢,docker通過,倉庫名:版本號來確定唯一一個鏡像,比如想要nginx1.15的docker鏡像,那么就使用【nginx:1.15】,所以可以看出來,倉庫名就是應用程式的名字,

docker objects

對docker object都可以進行增刪改查操作,通過restful方式

  • imags:鏡像檔案,注意:它是只讀的,很重要,比如nginx鏡像,你可以隨意使用它,但是不能改里面的東西,因為有可能是多個別的行程使用它,如果不是只讀的,別其中一個行程修改了內容,那就影響了其他的行程,也就失去了隔離的意義,
  • contains:加載鏡像,運行后,產生的行程,
  • imags/和contains的關系:images就是一個存放在硬碟上的可執行程式(比如是/bin/ls);contains則是運行/bin/ls的行程,可以運行多次,運行完,行程就結束消失了,但是/bin/ls還是存在,所以它倆的關系就是,程式和行程的關系,
  • network:網路
  • volumes:contains運行時,使用的存盤介質(卷)
  • plugin:插件,

centos7的yum源替換成清華大學的源

1,備份

$ mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

2,編輯/etc/yum.repos.d/CentOS-Base.repo

參考清華的內容

3,之后運行yum makecache生成快取

$ sudo yum makecach

在centos7下安裝docker

1,去清華鏡像下載docker-ce.repo檔案,并保存在目錄:/etc/yum.repos.d/

2,修改docker-ce.repo檔案,把【download.docker.com】替換成【mirrors.tuna.tsinghua.edu.cn/docker-ce】

3,執行yum repolist,如果如下,發現有docker-ce,

Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
repo id                               repo name                               status
base/7/x86_64                         CentOS-7 - Base                         10,097
docker-ce-stable/x86_64               Docker CE Stable - x86_64                   56
extras/7/x86_64                       CentOS-7 - Extras                          305
updates/7/x86_64                      CentOS-7 - Updates                         738
repolist: 11,196

4, 執行docker安裝命令:sudo yum install docker-ce

注意:這里的名字是【docker-ce】,不是【docker】

5,由于默認的docker倉庫在國外,訪問速度慢,所以配置一個國內的docker加速器,

? 創建檔案: /etc/docker/daemon.json

把下面內容加進去,

//docker cn的加速鏡像
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

國內的docker 鏡像:

  • docker cn
  • 阿里云加速器
  • 中國科技大學

6,啟動/重新啟動docker 守護(daemon)行程

# systemctl start docker.service
# systemctl restart docker.service

7,docker 老版本命令不再推薦使用

新版本把命令做了大的分類,如下:

Management Commands:
  builder     Manage builds
  config      Manage Docker configs
  container   Manage containers
  context     Manage contexts
  engine      Manage the docker engine
  image       Manage images
  network     Manage networks
  node        Manage Swarm nodes
  plugin      Manage plugins
  secret      Manage Docker secrets
  service     Manage services
  stack       Manage Docker stacks
  swarm       Manage Swarm
  system      Manage Docker
  trust       Manage trust on Docker images
  volume      Manage volumes

老版本使用create命令時,用docker create,新版本也可以使用這個命令,新版本把命令都歸類了,所以創建容器的話,用docker container create也是和老版本的docker create的功能是一樣的,推薦還是使用新版本的命令,現在是為了兼容老版本,所以老版本的命令還保留著,

9,檢查docker是否安裝成功:docker version或者docker info

# docker info

結果如下:說明docker安裝成功了!

Client:
 Debug Mode: false

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 19.03.2
 Storage Driver: overlay2
  Backing Filesystem: xfs
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Plugins:
  Volume: local
  Network: bridge host ipvlan 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: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
 runc version: 425e105d5a03fabd737a126ad93d62a9eeede87f
 init version: fec3683
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-957.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 3.701GiB
 Name: localhost.localdomain
 ID: D7NH:N5X6:KM6Y:Q6L4:TEUV:BWSG:X3YH:LLMZ:UEC3:T2ID:A6RB:2XSF
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://registry.docker-cn.com/
 Live Restore Enabled: false
  • Storage Driver: overlay2

    上面說的【采用分層構建,聯合掛載】要能過被使用的話,必須是【overlay2】

  • Registry Mirrors:https://registry.docker-cn.com/

    說明上面設定的加速器生效了,

c/c++ 學習互助QQ群:877684253

本人微信:xiaoshitou5854

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/103896.html

標籤:其他

上一篇:ftp中無法復制粘貼,請大神幫忙

下一篇:子網掩碼和ip地址進行and運算后得到的到底是什么

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more