色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Docker和傳統虛擬化方式的不同之處

馬哥Linux運維 ? 來源:lp ? 2019-04-16 13:40 ? 次閱讀

0 快速入門

Docker 最初 dotCloud 公司內部的一個業余項目

Docker 基于 Go 語言

Docker 項目的目標是實現輕量級的操作系統虛擬化解決方案

Docker 的基礎是 Linux 容器(LXC)等技術

Docker 容器的啟動可以在秒級實現,這相比傳統的虛擬機方式要快得多

Docker 對系統資源的利用率很高,一臺主機上可以同時運行數千個 Docker 容器

下面的圖片比較了 Docker 和傳統虛擬化方式的不同之處,可見容器是在操作系統層面上實現虛擬化,直接復用本地主機的操作系統,而傳統方式則是在硬件層面實現。

容器除了運行其中應用外,基本不消耗額外的系統資源,使得應用的性能很高,同時系統的開銷盡量小。傳統虛擬機方式運行 10 個不同的應用就要起 10 個虛擬機,而Docker 只需要啟動 10 個隔離的應用即可。

主要優勢為:

更快速的交付和部署 - 容器成為了最小單位

更高效的虛擬化 - 內核級虛擬化

更輕松的遷移和拓展

更簡單的管理

1 安裝

官方網站提供了Mac,Linux和Windows版本的安裝教程。我們只要跟著官方文檔即可,這里不再贅述。

不過需要提一下Kitematic這個圖形化工具(官方給出的定義是 Visual Docker Container Management on Mac & Windows),對于熟悉和了解 Docker 是很好的幫助,大家可以體驗一下。

守護進程

運行 Docker 守護進程時,可以用-H來改變綁定接口的方式,比如

sudo /usr/bin/docker -d -H tcp://0.0.0.0:2375,

如果不想每次都輸入這么長的命令,需要加入以下環境變量

export DOCKER_HOST="tcp://0.0.0.0:2375"

圖形用戶界面

雖然我們可以用命令來控制 docker,但是如果能有一個 web 管理界面,操作什么的會方便很多,比較常見的有

Shipyard

Potainer

2 基本概念

基本概念主要有三個:

鏡像(Image)

一個只讀的模板,鏡像可以用來創建 Docker 容器

用戶基于鏡像來運行自己的容器。鏡像是基于 Union 文件系統的層式結構

可以簡單創建或更新現有鏡像,或者直接下載使用其他人的。可以理解為生成容器的『源代碼』

容器(Container)

容器是從鏡像創建的運行實例,在啟動的時候創建一層可寫層作為最上層(因為鏡像是只讀的)

可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺

可以把容器看做是一個簡易版的 Linux 環境(包括root用戶權限、進程空間、用戶空間和網絡空間等)和運行在其中的應用程序

倉庫(Registry)

集中存放鏡像文件的場所,可以是公有的,也可以是私有的

最大的公開倉庫是Docker Hub

國內的公開倉庫包括Docker Pool等

當用戶創建了自己的鏡像之后就可以使用 push 命令將它上傳到公有或者私有倉庫,這樣下次在另外一臺機器上使用這個鏡像時候,只需要從倉庫上 pull 下來就可以了

Docker 倉庫的概念跟 Git 類似,注冊服務器可以理解為 GitHub 這樣的托管服務

另外 Docker 采用的是客戶端/服務器架構,客戶端只需要向 Docker 服務器或守護進程發出請求即可完成各類操作。那么問題來了,我們能用 Docker 來做什么呢?我們可以:

統一、優化和加速本地開發和構建流程

保證不同的環境中可以得到相同的運行結果

創建隔離環境用于測試

Docker 可以提供的隔離有:

文件系統隔離:每個容器都有自己的 root 文件系統

進程隔離:每個容器都運行在自己的進程環境中

網絡隔離:容器間的虛擬網絡接口和 IP 地址都是分開的

資源隔離和分組:使用 cgroups 將 CPU 和內存之類的資源獨立分配給每個 Docker 容器

3 常用命令

查看 docker 狀態sudo docker info

查看系統中正在運行的容器的列表docker ps

加上-a可以列出所有容器

加上-l可以列出最后一次運行的容器

一個簡單的例子

接下來我們用一個簡單的例子來體驗下 docker

4 容器小介紹

容器是獨立運行的一個或一組應用,以及它們的運行態環境。對應的,虛擬機可以理解為模擬運行的一整套操作系統(提供了運行態環境和其他系統環境)和跑在上面的應用。

啟動容器有兩種方式,一種是基于鏡像新建一個容器并啟動,另外一個是將在終止狀態(stopped)的容器重新啟動。因為 Docker 的容器實在太輕量級了,很多時候用戶都是隨時刪除和新創建容器(對于初級應用來說后者更方便)。

當利用 docker run 來創建容器時,Docker 在后臺運行的標準操作包括:

檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載

利用鏡像創建并啟動一個容器

分配一個文件系統,并在只讀的鏡像層外面掛載一層可讀寫層

從宿主主機配置的網橋接口中橋接一個虛擬接口到容器中去

從地址池配置一個 ip 地址給容器

執行用戶指定的應用程序

執行完畢后容器被終止

可以利用docker start命令,直接將一個已經終止的容器啟動運行。

5 運行容器

現在,我們來創建一個 ubuntu:14.04 的容器

docker run ubuntu:14.04 /bin/echo 'Hello wdx!'

(結果如下圖所示)

可以看到正確輸出了我們的 “Hello wdx!”

接下來,我們用docker run -t -i ubuntu:14.04 /bin/bash可以啟動一個 bash 終端用來交互。參數的意思是:

-t選項讓Docker分配一個偽終端(pseudo-tty)并綁定到容器的標準輸入上

-i則讓容器的標準輸入保持打開

我們可以輸入一些命令來測試

容器的核心為所執行的應用程序,所需要的資源都是應用程序運行所必需的。除此之外,并沒有其它的資源。我們用ps或top在偽終端中查看進程信息,可以看到只有我們運行的進程,沒有其他花里胡哨的(上圖最后一條命令)

試一試如下命令

cat /etc/hosts

ip a

ps -aux

cd ~ && echo "hello wdx" > hello.txt && cat hello.txt

(細心的同學可能會發現這里的輸出暗藏玄機)

操作完成后,輸入exit便可以退出這個 ubuntu 容器。退出之后這個容器依然存在,我們可以用docker ps -l來看看:

每個容器有一個 Container ID 和 Name,我們一般就是通過這倆來定位一個容器的。

6 鏡像

我們可以使用docker pull命令從倉庫中獲取所需要的鏡像。比如說

sudo docker pull ubuntu:12.04,

相當于

sudo docker pull registry.hub.docker.com/ubuntu:12.04,

即從注冊服務器registry.hub.docker.com中的ubuntu倉庫來下載標記為12.04的鏡像。

如果想從其他倉庫注冊服務器下載,需要輸入完成的地址,例如:

sudo docker pull dl.dockerpool.com:5000/ubuntu:12.04

下載完成之后就可以使用該鏡像了,比如下面的語句就會創建容器,其中運行bash:

sudo docker run -t -i ubuntu:12.04 /bin/bash

可以使用dokcer images來顯示本地已有的鏡像,如下

具體字段的意思一目了然,這里不再贅述。然后我們來運行官方例子whalesay鏡像。

7 運行鏡像

打開瀏覽器,進入Docker Hub

搜索whalesay這個鏡像,就可以看到結果,點進去可以看到詳細內容(基于 Ubuntu)

然后我們來運行一下,使用命令

docker run docker/whalesay cowsay boo

其中cowsay是要運行的命令,后面的boo是參數。

Docker 會先在本地查找有沒有鏡像,如果沒有就從倉庫中下載,具體的運行結果是:

也可以讓鯨魚說不同的話,比如:

8 制作鏡像

如果想要制作自己的鏡像,需要自己寫 Dockerfile。具體步驟如下

創建一個文件夾mkdir wdxtub; cd wdxtub,構造鏡像所需的所有東西都會放在這個文件夾中

創建一個名為Dockerfile的文件gedit Dockerfile

添加第一句話FROM docker/whalesay:latest,表示我們的鏡像以whalesay為基礎

添加需要運行的命令,如RUN apt-get -y update && apt-get install -y fortunes(fortunes這個程序會輸出名言警句)

通過CMD指定鏡像載入之后需要執行的命令,如CMD /usr/games/fortune -a | cowsay

保存并關閉 Dockerfile

使用sudo docker build -t wdx-whale .來構造鏡像,簡單來說就是用 Dockerfile 中的內容按步驟構造

使用docker images應該就可以看到我們新創建的鏡像

然后我們就可以運行一下看看

docker run wdx-whale

還有更賤的(感覺可以玩一天)

如果想要把自己的鏡像上傳到網上,就需要注冊一個 Docker Hub 帳號,然后點擊 Create Repository,這里我創建了一個名為wdxtub/demo的公用倉庫。

接下來我們需要打上 tag,目前docker images的情況是:

記住我們的 IMAGE ID 26ac9649d7da。用以下命令打 tag

docker tag 26ac9649d7da wdxtub/wdx-whale:latest,

然后再docker images一次:

然后用這個命令登錄

docker login --username=yourhubusername --email=yourmail@company.com,

對于我來說就是

docker login --username=wdxtub --email=dacrocodilee@gmail.com

成功之后大概是這樣:

然后就可以 push 上去了docker push wdxtub/wdx-whale,像下面這樣

為了測試 pull 自己的鏡像,我們先把本地上的 whale 鏡像刪掉:

docker rmi -f wdxtub/wdx-whale; docker rmi -f wdx-whale

(如果有其他的用不著的也都刪掉),最后剩下(上課要用的鏡像):

接著來運行一下

docker run wdxtub/wdx-whale

9 管理鏡像

我們可以把鏡像導出到本地文件,使用docker save命令即可,比如針對我現在有的鏡像wdxtub/wdx-whale(id:26ac9649d7da),可以這樣:

docker save -o wdx-local-whale.tar wdxtub/wdx-whale。

如果要載入的話,使用下面的命令即可(會載入相關的元數據信息)

docker load --input wdx-local-whale.tar# 或者docker load < wdx-local-whale.tar

在刪除鏡像之前要先用docker rm刪掉依賴于這個鏡像的所有容器.

sudo docker rmi $(docker images -q -f "dangling=true")

鏡像的實現原理

Docker 鏡像是怎么實現增量的修改和維護的? 每個鏡像都由很多層次構成,Docker 使用Union FS將這些不同的層結合到一個鏡像中去。

通常 Union FS 有兩個用途, 一方面可以實現不借助 LVM、RAID 將多個 disk 掛到同一個目錄下,另一個更常用的就是將一個只讀的分支和一個可寫的分支聯合在一起,Live CD 正是基于此方法可以允許在鏡像不變的基礎上允許用戶在其上進行一些寫操作。 Docker 在 AUFS 上構建的容器也是利用了類似的原理。

10 容器啟動

舉個例子,

后臺運行

更多的時候,需要讓 Docker在后臺運行而不是直接把執行命令的結果輸出在當前宿主機下。此時,可以通過添加 -d 參數來實現。

下面舉兩個例子來說明一下。

如果不使用 -d 參數運行容器

docker run ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

容器會把輸出的結果(STDOUT)打印到宿主機上面

如果使用了 -d 參數運行容器

docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done",

則顯示是這樣:

使用docker logs containerid可以查看輸出,如:

使用 -d 參數啟動后會返回一個唯一的 id,也可以通過 docker ps 命令來查看容器信息。容器是否會長久運行,是和docker run指定的命令有關,和 -d 參數無關

在使用 -d 參數時,容器啟動后會進入后臺。 某些時候需要進入容器進行操作,有很多種方法,包括使用 docker attach 命令或 nsenter 工具等。具體參考這里

11 終止與重新啟動

使用docker stop containerid來終止容器。終止狀態的容器可以用docker ps -a命令看到。

另外,docker restart containerid命令會將一個運行態的容器終止,然后再重新啟動它。

12 導入導出與刪除

如果要導出本地某個容器,可以使用docker export containerid命令。

可以使用docker import從容器快照文件中再導入為鏡像,例如

cat ubuntu.tar | sudo docker import - test/ubuntu:v1.0# 也可以通過指定 URL 或者某個目錄來導入,例如docker import http://example.com/exampleimage.tgz example/imagerepo

用戶既可以使用 docker load 來導入鏡像存儲文件到本地鏡像庫,也可以使用docker import 來導入一個容器快照到本地鏡像庫。這兩者的區別在于容器快照文件將丟棄所有的歷史記錄和元數據信息(即僅保存容器當時的快照狀態),而鏡像存儲文件將保存完整記錄,體積也要大。此外,從容器快照文件導入時可以重新指定標簽等元數據信息。

可以使用docker rm來刪除一個處于終止狀態的容器。如果要刪除一個運行中的容器,可以添加 -f 參數。Docker 會發送 SIGKILL 信號給容器。

用docker ps -a命令可以查看所有已經創建的包括終止狀態的容器,如果數量太多要一個個刪除可能會很麻煩,用docker rm $(docker ps -a -q)可以全部清理掉。

注意:這個命令其實會試圖刪除所有的包括還在運行中的容器,不過就像上面提過的docker rm默認并不會刪除運行中的容器。

13 倉庫

倉庫(Repository)是集中存放鏡像的地方。

一個容易混淆的概念是注冊服務器(Registry)。實際上注冊服務器是管理倉庫的具體服務器,每個服務器上可以有多個倉庫,而每個倉庫下面有多個鏡像。從這方面來說,倉庫可以被認為是一個具體的項目或目錄。例如對于倉庫地址dl.dockerpool.com/ubuntu 來說,dl.dockerpool.com 是注冊服務器地址,ubuntu是倉庫名。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11317

    瀏覽量

    209815
  • 操作系統
    +關注

    關注

    37

    文章

    6847

    瀏覽量

    123420
  • Docker
    +關注

    關注

    0

    文章

    478

    瀏覽量

    11871

原文標題:架構師分享 Docker 新手入門完全指南

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言指針和引用的不同之處及使用場合

    指針和引用的不同之處是什么?
    發表于 06-14 09:14 ?293次閱讀
    C語言指針和引用的<b class='flag-5'>不同之處</b>及使用場合

    STM32板與FPGA有哪些不同之處

    STM32板與FPGA有哪些不同之處呢?
    發表于 10-09 09:00

    GD32和STM32有哪些不同之處

    什么是GD32?GD32和STM32有哪些不同之處
    發表于 10-19 10:07

    USART與USAR有哪些不同之處

    USART是什么?USAR又是什么?USART與USAR有哪些不同之處呢?
    發表于 12-13 08:08

    Docker監控實戰分析

    的「輕」也只是相對于傳統虛擬機而已。傳統虛擬機和 Docker 的對比如圖: 從圖中可以看出 Dock
    發表于 10-13 17:05 ?2次下載
    <b class='flag-5'>Docker</b>監控實戰分析

    LDO-DCDC-Charge-Pump的原理比較與不同之處

    LDO-DCDC-Charge-Pump的原理比較與不同之處
    發表于 11-27 14:22 ?40次下載

    什么是 Docker?Docker傳統虛擬機有什么區別?

    Docker 容器將軟件以及它運行安裝所需的一切文件(代碼、運行時、系統工具、系統庫)打包到一起,這就保證了不管是在什么樣的運行環境,總是能以相同的方式運行。就好像 Java 虛擬機一樣,“一次編寫
    的頭像 發表于 03-16 14:28 ?5.2w次閱讀
    什么是 <b class='flag-5'>Docker</b>?<b class='flag-5'>Docker</b>與<b class='flag-5'>傳統</b>的<b class='flag-5'>虛擬</b>機有什么區別?

    容器、Docker、虛擬機的區別

    移植的系統。它不僅簡化了打包應用的流程,也簡化了打包應用的庫和依賴,甚至整個操作系統的文件系統能被打包成一個簡單的可移植的包,這個包可以被用來在任何其他運行Docker的機器上使用。 容器和虛擬機具有相似的資源隔離和分配方式,容
    的頭像 發表于 11-05 09:41 ?2996次閱讀

    如何區分虛擬機與Docker

    首先,大家需要明確一點,Docker容器不是虛擬機。 2014年,當我第一次接觸Docker的時候,我把它比做一種輕量級的虛擬機。這樣做無可厚非,因為
    的頭像 發表于 02-14 11:36 ?1132次閱讀
    如何區分<b class='flag-5'>虛擬</b>機與<b class='flag-5'>Docker</b>

    在AM335X平臺上運行ubuntu系統和docker容器

    下面的圖片比較了 Docker傳統虛擬方式不同之處。
    的頭像 發表于 04-04 09:50 ?1251次閱讀
    在AM335X平臺上運行ubuntu系統和<b class='flag-5'>docker</b>容器

    一種基于Docker的邊緣計算網關虛擬方法與流程

    本發明涉及一種基于docker的邊緣計算網關虛擬方法,更具體說,它涉及一種通過docker容器自動構建網關邊緣計算服務 的方法。 隨著
    發表于 05-18 16:50 ?1次下載
    一種基于<b class='flag-5'>Docker</b>的邊緣計算網關<b class='flag-5'>虛擬</b><b class='flag-5'>化</b>方法與流程

    貼片Y電容內部構造是什么樣子的,和傳統插件Y電容有什么不同之處?

    傳統的Y電容主要是插件形式的,自從科雅推出JK-ET系列貼片Y電容以來,很多人搞不明白,貼片Y電容內部構造是什么樣子的,和傳統插件Y電容有什么不同之處
    的頭像 發表于 08-27 10:29 ?1466次閱讀
    貼片Y電容內部構造是什么樣子的,和<b class='flag-5'>傳統</b>插件Y電容有什么<b class='flag-5'>不同之處</b>?

    噪音抑制與主動降噪:有何不同之處

    噪音抑制與主動降噪:有何不同之處?
    的頭像 發表于 11-30 17:29 ?733次閱讀
    噪音抑制與主動降噪:有何<b class='flag-5'>不同之處</b>?

    Docker虛擬機的區別

    Docker虛擬機是兩種不同的虛擬技術,它們在實現方式、資源消耗、運行性能等方面存在許多差異。本文將會詳細介紹它們的區別。 一、實現
    的頭像 發表于 11-23 09:37 ?9829次閱讀

    智能制造與傳統制造有什么不同之處

    、生產方式、管理模式等方面存在很大的不同,這些不同之處正是智能制造的優勢和特點。 二、設計理念的不同 傳統制造設計理念 傳統制造的設計理念主要側重于產品的功能性、穩定性和成本效益。在設
    的頭像 發表于 06-07 15:36 ?3405次閱讀
    主站蜘蛛池模板: 国产精品无码AV天天爽色欲| 久久亚洲精品成人综合| 欧美末成年videos丨| Y8848高清私人影院软件优势| 欧美猛男gaygayxxgv| 成人网视频在线观看免费| 无人区在线日本高清免费| 精品一成人岛国片在线观看| 最近中文字幕2018MV高清在线| 日本高清二区| 精品无码国产自产在线观看| 99久久国产综合精品国| 99热免费精品店| 三级黄网站| 本庄优花aⅴ全部在线影片| 无码免费视频AAAAAA片草莓| 久久99热这里只频精品6| 阿离被扒开双腿疯狂输出| 亚洲 自拍 偷拍 另类综合图区 | 日韩欧美国产免费看清风阁| 国产最猛性XXXX69交| 亚洲乱码国产一区三区| 女人高潮被爽到呻吟在线观看| 国产精品无码久久久久不卡| 97精品视频在线观看| 亚洲AV精品无码喷水直播间| 女教师の诱惑| 精品午夜中文字幕熟女人妻在线| 草草久久久无码国产专区全集观看| 亚洲免费视频网站| 揉抓捏打抽插射免费视频| 牢记永久免费网址| 国精产品一区一区三区有限| 厕所RXXX| 最新无码专区在线视频| 亚洲成AV人片一区二区不卡| 欧洲-级毛片内射八十老太婆| 精品国产5g影院天天爽| 国产成人精品综合在线| 97夜夜澡人人爽人人模人人喊| 亚洲AV无码国产精品午夜久久 |