欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Docker是什么,有什么用?一看就明白

Docker是什么,有什么用?一看就明白

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到望城網(wǎng)站設(shè)計(jì)與望城網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、空間域名、網(wǎng)頁(yè)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋望城地區(qū)。

Docker是一個(gè)基于輕量級(jí)虛擬化技術(shù)的容器,整個(gè)項(xiàng)目基于Go語(yǔ)言開(kāi)發(fā),并采用了Apache 2.0協(xié)議。Docker可以將我們的應(yīng)用程序打包封裝到一個(gè)容器中,該容器包含了應(yīng)用程序的代碼、運(yùn)行環(huán)境、依賴庫(kù)、配置文件等必需的資源,通過(guò)容器就可以實(shí)現(xiàn)方便快速并且與平臺(tái)解耦的自動(dòng)化部署方式,無(wú)論你部署時(shí)的環(huán)境如何,容器中的應(yīng)用程序都會(huì)運(yùn)行在同一種環(huán)境下。

舉個(gè)栗子,小明寫了一個(gè)CMS系統(tǒng),該系統(tǒng)的技術(shù)棧非常廣,需要依賴于各種開(kāi)源庫(kù)和中間件。如果按照純手動(dòng)的部署方式,小明需要安裝各種開(kāi)源軟件,還需要寫好每個(gè)開(kāi)源軟件的配置文件。如果只是部署一次,這點(diǎn)時(shí)間開(kāi)銷還是可以接受的,但如果小明每隔幾天就需要換個(gè)服務(wù)器去部署他的程序,那么這些繁瑣的重復(fù)工作無(wú)疑是會(huì)令人發(fā)狂的。這時(shí)候,Docker的用處就派上場(chǎng)了,小明只需要根據(jù)應(yīng)用程序的部署步驟編寫一份Dockerfile文件(將安裝、配置等操作交由Docker自動(dòng)化處理),然后構(gòu)建并發(fā)布他的鏡像,這樣,不管在什么機(jī)器上,小明都只需要拉取他需要的鏡像,然后就可以直接部署運(yùn)行了,這正是Docker的魅力所在。

那么鏡像又是什么呢?鏡像是Docker中的一個(gè)重要概念:

  • Image(鏡像):它類似于虛擬機(jī)中使用到的鏡像,由于任何應(yīng)用程序都需要有它自己的運(yùn)行環(huán)境,Image就是用來(lái)提供所需運(yùn)行環(huán)境的一個(gè)模板。
  • Container(容器):Container是Docker提供的一個(gè)抽象層,它就像一個(gè)輕量級(jí)的沙盒,其中包含了一個(gè)極簡(jiǎn)的Linux系統(tǒng)環(huán)境與運(yùn)行在其中的應(yīng)用程序。Container是Image的運(yùn)行實(shí)例(Image本身是只讀的,Container啟動(dòng)時(shí),Docker會(huì)在Image的上層創(chuàng)建一個(gè)可寫層,任何在Container中的修改都不會(huì)影響到Image,如果想要在Image保存Container中的修改,Docker采用了基于Container生成新的Image層的策略),Docker引擎利用Container來(lái)操作并隔離每個(gè)應(yīng)用(也就是說(shuō),每個(gè)容器中的應(yīng)用都是互相獨(dú)立的)。

其實(shí)從Docker與Container的英文單詞原意中就可以體會(huì)出Docker的思想。Container可以釋義為集裝箱,集裝箱是一個(gè)可以便于機(jī)械設(shè)備裝卸的封裝貨物的通用標(biāo)準(zhǔn)規(guī)格,它的發(fā)明簡(jiǎn)化了物流運(yùn)輸?shù)臋C(jī)械化過(guò)程,使其建立起了一套標(biāo)準(zhǔn)化的物流運(yùn)輸體系。而Docker的意思為碼頭工人,可以認(rèn)為,Docker就像是在碼頭上辛勤工作的工人,把應(yīng)用打包成一個(gè)個(gè)具有某種標(biāo)準(zhǔn)化規(guī)格的"集裝箱"(其實(shí)這里指出的集裝箱對(duì)應(yīng)的是Image,在Docker中Container更像是一個(gè)運(yùn)行中的沙盒),當(dāng)貨物運(yùn)輸?shù)侥康牡睾?,碼頭工人們(Docker)就可以把集裝箱拆開(kāi)取出其中的貨物(基于Image來(lái)創(chuàng)建Container并運(yùn)行)。這種標(biāo)準(zhǔn)化與隔離性可以很方便地組合使用多個(gè)Image來(lái)構(gòu)建你的應(yīng)用環(huán)境(Docker也提倡每個(gè)Image都遵循單一職責(zé)原則,也就是只做好一件事),或者與其他人共享你的Image。

本文作者為SylvanasSun(sylvanas.sun@gmail.com),首發(fā)于SylvanasSun’s Blog。
原文鏈接:sylvanassun.github.io/2017/11/19/…
(轉(zhuǎn)載請(qǐng)務(wù)必保留本段聲明,并且保留超鏈接。)

Docker VS 虛擬機(jī)

在上文中我們提到了Docker是基于輕量級(jí)虛擬化技術(shù)的,所以它與我們平常使用的虛擬機(jī)是不一樣的。虛擬機(jī)技術(shù)可以分成以下兩類:

系統(tǒng)虛擬機(jī)

  • 系統(tǒng)虛擬機(jī):通過(guò)軟件對(duì)計(jì)算機(jī)系統(tǒng)的模擬來(lái)提供一個(gè)真實(shí)計(jì)算機(jī)的替代品。它是物理硬件的抽象并提供了運(yùn)行完整操作系統(tǒng)所需的功能。虛擬機(jī)通過(guò)物理機(jī)器來(lái)管理和共享硬件,這樣實(shí)現(xiàn)了多個(gè)虛擬機(jī)環(huán)境彼此之間的隔離,一臺(tái)機(jī)器上可以運(yùn)行多個(gè)虛擬機(jī),每個(gè)虛擬機(jī)包括一個(gè)操作系統(tǒng)的完整副本。在系統(tǒng)虛擬機(jī)中,所運(yùn)行的所有軟件或操作都只會(huì)影響到該虛擬機(jī)的環(huán)境。我們經(jīng)常使用的VMWare就是系統(tǒng)虛擬機(jī)的實(shí)現(xiàn)。
  • 程序虛擬機(jī):允許程序獨(dú)立運(yùn)行在平臺(tái)之外。比較典型的例子就是JVM,Java通過(guò)JVM這一抽象層使得Java程序與操作系統(tǒng)和硬件平臺(tái)解耦(因?yàn)槊總€(gè)Java程序都是運(yùn)行在JVM中的),因此實(shí)現(xiàn)了所謂的compile once, run everywhere。

Docker所用到的技術(shù)與上述兩種都不相同,它使用了更輕量級(jí)的虛擬化技術(shù),多個(gè)Container共享了同一個(gè)操作系統(tǒng)內(nèi)核,并且就像運(yùn)行在本地上一樣。Container技術(shù)相對(duì)于虛擬機(jī)來(lái)說(shuō),只是一個(gè)應(yīng)用程序?qū)拥某橄?,它將代碼與依賴關(guān)系打包到一起,多個(gè)Container可以在同一臺(tái)機(jī)器上運(yùn)行(意味著一個(gè)虛擬機(jī)上也可以運(yùn)行多個(gè)Container),并與其它Container共享操作系統(tǒng)內(nèi)核,每一個(gè)Container都在用戶空間中作為一個(gè)獨(dú)立的進(jìn)程運(yùn)行,這些特性都證明了Container要比虛擬機(jī)更加靈活與輕量(一般都是結(jié)合虛擬機(jī)與Docker一起使用)。

Container技術(shù)其實(shí)并不是個(gè)新鮮事物,最早可以追溯到UNIX中的chroot(在1979年的V7 Unix中引入),它可以改變當(dāng)前正在運(yùn)行的進(jìn)程及其子目錄的根目錄,在這種修改過(guò)的環(huán)境下運(yùn)行的程序不能在指定的目錄樹(shù)之外訪問(wèn)文件,從而限制用戶的活動(dòng)范圍,為進(jìn)程提供了隔離空間。

之后各種Unix版本涌現(xiàn)出很多Container技術(shù),在2006年,Google提出了"Process Containers"期望在Linux內(nèi)核中實(shí)現(xiàn)進(jìn)程資源隔離的相關(guān)特性,由于Container在Linux內(nèi)核中的定義過(guò)于寬泛混亂,后來(lái)該項(xiàng)目改名為CGroups(Control Groups),實(shí)現(xiàn)了對(duì)進(jìn)程的資源限制。

2008年,LXC(Linux Containers)發(fā)布,它是一種在操作系統(tǒng)層級(jí)上的虛擬化方法,用于在Linux系統(tǒng)上通過(guò)共享一個(gè)內(nèi)核來(lái)運(yùn)行多個(gè)互相隔離的程序(Container)。LXC正是結(jié)合了Linux內(nèi)核中的CGroups和對(duì)分離的名稱空間的支持來(lái)為應(yīng)用程序提供了一個(gè)隔離的環(huán)境。而Docker也是基于LXC實(shí)現(xiàn)的(Docker的前身是dotClound公司中的內(nèi)部項(xiàng)目,它是一家提供PaaS服務(wù)的公司。),并作出了許多改進(jìn)。

使用Docker

在使用Docker之前你需要先安裝Docker(這好像是一句廢話。。。),根據(jù)不同的平臺(tái)安裝方法都不相同,可以去參考Install Docker | Docker Documentation或者自行Google。

安裝完畢之后,輸入docker --version來(lái)確認(rèn)是否安裝成功。

$ docker --version

Docker version 17.05.0-ce-rc1, build 2878a85復(fù)制代碼

從Docker Hub中可以pull到其他人發(fā)布的Image,我們也可以注冊(cè)一個(gè)賬號(hào)去發(fā)布自己的Image與他人共享。

[root@Jack ~]# docker search redis # 查看redis鏡像是否存在

[root@Jack ~]# docker pull redis # 拉取redis鏡像到本機(jī)

Using default tag: latest

Trying to pull repository docker.io/library/redis ...

latest: Pulling from docker.io/library/redis

Digest: sha256:cd277716dbff2c0211c8366687d275d2b53112fecbf9d6c86e9853edb0900956

[root@Jack ~]# docker images # 查看鏡像信息

REPOSITORY TAG IMAGE ID CREATED SIZE

docker.io/python 3.6-onbuild 7195f9298ffb 2 weeks ago 691.1 MB

docker.io/mongo latest d22888af0ce0 2 weeks ago 360.9 MB

docker.io/redis latest 8f2e175b3bd1 2 weeks ago 106.6 MB復(fù)制代碼

有了Image,之后就可以在其之上運(yùn)行一個(gè)Container了,命令如下。

[root@Jack ~]# docker run -d -p 6379:6379 redis # 運(yùn)行redis,-p代表將本機(jī)上6379端口映射到Container的6379端口 -d代表在后臺(tái)啟動(dòng)

[root@Jack ~]# docker ps -a # 查看容器信息,如果不加-a只會(huì)顯示當(dāng)前運(yùn)行中的容器

# 如果想要進(jìn)入容器中,那么需要執(zhí)行以下命令

[root@Jack ~]# docker ps # 先獲得容器的id

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

1f928073b7eb redis "docker-entrypoint.sh" 45 seconds ago Up 44 seconds 0.0.0.0:6379->6379/tcp desperate_khorana

[root@Jack ~]# docker exec -it 1f928073b7eb /bin/bash # 然后再執(zhí)行該命令進(jìn)入到容器中

root@1f928073b7eb:/data# touch hello_docker.txt # 在容器中創(chuàng)建一個(gè)文件

root@1f928073b7eb:/data# exit # 退出

exit

[root@Jack ~]#

# 也可以在啟動(dòng)時(shí)直接進(jìn)入 命令如下

[root@Jack ~]# docker run -d -it -p 6379:6379 redis /bin/bash復(fù)制代碼

我們對(duì)Container做出了修改,如果想要保留這個(gè)修改,可以通過(guò)commit命令來(lái)生成一個(gè)新的Image。

# -m為描述信息 -a為作者 1f9是你要保存的容器id 取前3個(gè)字符 docker可以自行識(shí)別

# sylvanassun/redis為鏡像名 :test 為一個(gè)tag 一般用于標(biāo)識(shí)版本

[root@Jack ~]# docker commit -m "test" -a "SylvanasSun" 1f9 sylvanassun/redis:test

sha256:e7073e8e5bd70b8d58092fd6bd8c2551e65dd29241c235eddf2a7f4b4b25cbbd

[root@Jack ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

sylvanassun/redis test e7073e8e5bd7 2 seconds ago 106.6 MB

docker.io/python 3.6-onbuild 7195f9298ffb 2 weeks ago 691.1 MB

docker.io/mongo latest d22888af0ce0 2 weeks ago 360.9 MB

docker.io/redis latest 8f2e175b3bd1 2 weeks ago 106.6 MB復(fù)制代碼

想刪除一個(gè)容器或鏡像也很簡(jiǎn)單,但在刪除鏡像前需要先刪除依賴于它的容器。

[root@Jack ~]# docker stop 1f9 # 關(guān)閉運(yùn)行中的容器,相應(yīng)的也有docker start id命令來(lái)啟動(dòng)一個(gè)容器

1f9

[root@Jack ~]# docker rm 1f9 # 刪除容器

1f9

[root@Jack ~]# docker rmi e70 # 刪除上面保存的鏡像

Untagged: sylvanassun/redis:test

Deleted: sha256:e7073e8e5bd70b8d58092fd6bd8c2551e65dd29241c235eddf2a7f4b4b25cbbd

Deleted: sha256:751db4a870e5f703082b31c1614a19c86e0c967334a61f5d22b2511072aef56d復(fù)制代碼

如果想要自己構(gòu)建一個(gè)鏡像,那么需要編寫Dockerfile文件,該文件描述了鏡像的依賴環(huán)境以及如何配置你的應(yīng)用環(huán)境。

# 使用python:2.7-slim 作為父鏡像

FROM python:2.7-slim

# 跳轉(zhuǎn)到/app 其實(shí)就是cd命令

WORKDIR /app

# 將當(dāng)前目錄的內(nèi)容(.)復(fù)制到鏡像的/app目錄下

ADD . /app

# RUN代表運(yùn)行的shell命令,下面這條命令是根據(jù)requirements.txt安裝python應(yīng)用的依賴包

RUN pip install --trusted-host pypi.python.org -r requirements.txt

# 暴露80端口讓外界訪問(wèn)

EXPOSE 80

# 定義環(huán)境變量

ENV NAME World

# 當(dāng)容器啟動(dòng)時(shí)執(zhí)行的命令,它與RUN不同,只在容器啟動(dòng)時(shí)執(zhí)行一次

CMD ["python", "app.py"]復(fù)制代碼

然后就可以通過(guò)docker build -t xxx/xxxx .命令來(lái)構(gòu)建鏡像,-t后面是鏡像名與tag等信息,注意.表示在當(dāng)前目錄下尋找Dockerfile文件。

學(xué)會(huì)如何構(gòu)建自己的鏡像之后,你是否也想將它發(fā)布到Docker Hub上與他人分享呢?要想做到這一點(diǎn),需要先注冊(cè)一個(gè)Docker Hub賬號(hào),之后通過(guò)docker login命令登錄,然后再docker push image name,就像在使用Git一樣簡(jiǎn)單。

關(guān)于Docker的更多命令與使用方法,請(qǐng)參考Docker Documentation | Docker Documentation,另外我還推薦使用Docker Compose來(lái)構(gòu)建鏡像,它可以很方便地組合管理多個(gè)鏡像。

Docker提供了非常強(qiáng)大的自動(dòng)化部署方式與靈活性,對(duì)多個(gè)應(yīng)用程序之間做到了解耦,提供了開(kāi)發(fā)上的敏捷性、可控性以及可移植性。同時(shí),Docker也在不斷地幫助越來(lái)越多的企業(yè)實(shí)現(xiàn)了向云端遷移、向微服務(wù)轉(zhuǎn)型以及向DevOps模式的實(shí)踐。

如今,微服務(wù)與DevOps火爆程度日益漸高,你又有何理由選擇拒絕Docker呢?讓我們一起選擇擁抱Docker,擁抱未來(lái)!

網(wǎng)頁(yè)題目:Docker是什么,有什么用?一看就明白
當(dāng)前路徑:http://aaarwkj.com/article30/goodpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)關(guān)鍵詞優(yōu)化、網(wǎng)站內(nèi)鏈App設(shè)計(jì)、用戶體驗(yàn)、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
欧美丝袜熟女日韩亚洲| 国产成人精品一二三四区| 亚洲国产精品区一区二区| 亚洲中文字幕偷拍色图| 91麻豆视频福利视频| 91亚洲精品一区二区三区| 亚洲av成人永久网站一区| 国产精品老熟女一区二区| 欧美一区二区三在线| 国产自愉自愉免费精品七| 亚洲人成网站18禁止人| 91亚洲熟妇国产熟妇肥婆| 亚洲欧美国产日韩天堂区| 成人精品国产亚洲av| 亚洲精品色婷婷一区二区| 中文字幕中文字幕乱码| 国产91香蕉在线精品| 欧洲精品亚洲精品日韩专区| 极品人妻视频中文字幕| 全国精品免费视频久久久| 成人在线一区二区三区观看| 日韩不卡一区二区在线观看| 在线青青草视频免费观看| 一区二区亚洲免费的视频| 亚洲男人天堂在线观看| 国产精品区一区二区三区| 国产精品夜色一区二区三区不卡| 亚洲啪啪av一区二区三区| 精品成人在线一区二区| 久久午夜视频在线观看| 初爱视频教程完整版韩国| 少妇欧美日韩精品在线观看| 国产成人精品久久久亚洲| 欧美国内日本一区二区| 欧美日本在线区一区二| 国内成人午夜激情视频| 久草福利资源在线观看视频| 日韩三级精品一区二区| 91人妻这里只有精品| 日韩欧美亚洲综合另类| 久久精品一区欧美成人|