精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

系統(tǒng)之上的進(jìn)程級(jí)別虛擬化技術(shù)——Docker

馬哥Linux運(yùn)維 ? 來(lái)源:未知 ? 作者:李倩 ? 2018-05-02 14:55 ? 次閱讀

一般說(shuō)來(lái) SPA 的項(xiàng)目我們只要啟一個(gè)靜態(tài)文件 Server 就可以了,但是針對(duì)傳統(tǒng)項(xiàng)目就不一樣了,一個(gè)項(xiàng)目會(huì)依賴很多服務(wù)端程序。之前我們的開(kāi)發(fā)模式是在一臺(tái)開(kāi)發(fā)機(jī)上部署開(kāi)發(fā)環(huán)境,所有人都在這臺(tái)開(kāi)發(fā)機(jī)上使用 Samba 連接開(kāi)發(fā)。老式開(kāi)發(fā)是沒(méi)什么問(wèn)題的,但是前端因?yàn)橐肓司幾g流程,增加了 Webpack 打包構(gòu)建的行為,當(dāng)多人共同開(kāi)發(fā)的時(shí)候經(jīng)常會(huì)因?yàn)閮?nèi)存爆滿進(jìn)程被殺導(dǎo)致打包失敗。痛定思痛后為了解決這個(gè)問(wèn)題,我決定將 Docker 引入我們的開(kāi)發(fā)環(huán)境,通過(guò)將開(kāi)發(fā)環(huán)境本地化來(lái)解決這個(gè)問(wèn)題,所以有了本文。

Why Docker?

普通的 Web 服務(wù)一般都會(huì)依賴很多程序,例如 PHP, MySQL, Redis, Node 等等。正常情況下我們會(huì)去手動(dòng)安裝這些程序來(lái)配置服務(wù)需要的環(huán)境,這樣會(huì)帶來(lái)幾個(gè)問(wèn)題:

同一環(huán)境不同的服務(wù)依賴同一個(gè)軟件的不同版本,經(jīng)典的例如 python2 和 python3, 本地 Mac 上是 PHP7,但是服務(wù)只能支持 PHP5.6。

同一環(huán)境不同的服務(wù)可能會(huì)修改同一份文件,例如系統(tǒng)的配置,Nginx 的配置等,都會(huì)造成影響。

同一服務(wù)在多臺(tái)機(jī)器上部署需要手工操作,導(dǎo)致大量的人力成本浪費(fèi)。

這樣逐個(gè)的安裝軟件實(shí)在是太麻煩了,所以大家就想干脆就直接把整個(gè)系統(tǒng)打包好放到機(jī)器上得了,于是就出現(xiàn)了虛擬機(jī)技術(shù)。這樣做能保證系統(tǒng)環(huán)境的穩(wěn)定以及重復(fù)的手工操作可以避免,但是也同樣會(huì)帶來(lái)一些問(wèn)題:

打包后的虛擬機(jī)文件包含系統(tǒng)鏡像所以特別大。

打包后的虛擬機(jī)文件包含系統(tǒng)鏡像所以服務(wù)需要等待系統(tǒng)啟動(dòng)成功之后才能啟動(dòng)。

打包過(guò)程無(wú)法實(shí)現(xiàn)自動(dòng)化。

針對(duì)第三點(diǎn),后來(lái)出現(xiàn)了 Vagrant 使用 vagrantfile 的形式將鏡像構(gòu)建腳本化從而實(shí)現(xiàn)自動(dòng)化的功能,不過(guò)其它兩點(diǎn)沒(méi)有解決。所以后來(lái)就出來(lái)了系統(tǒng)之上的進(jìn)程級(jí)別虛擬化技術(shù) —— Docker。它為我們帶來(lái)了以下幾個(gè)優(yōu)點(diǎn):

不需要打包系統(tǒng)進(jìn)鏡像所以體積非常小

不需要等待虛擬系統(tǒng)啟動(dòng)所以啟動(dòng)快速資源占用低

沙箱機(jī)制保證不同服務(wù)之間環(huán)境隔離

Dockerfile 鏡像構(gòu)建機(jī)制讓鏡像打包部署自動(dòng)化

Docker hub 提供鏡像平臺(tái)方便共享鏡像

以下是 VM 和 Docker 技術(shù)的具體區(qū)別,可以看到 VM 是打包了 Guest OS 進(jìn)入鏡像中的,而 Docker 是直接基于宿主系統(tǒng)虛擬化的實(shí)例。

Docker 基礎(chǔ)

Docker 支持 Windows/Linux/Mac/AWS/Azure 多種平臺(tái)的安裝,其中 Windows 需要 Win10+,Mac 需要 EI Captain+。Docker 是一個(gè) C/S 架構(gòu)的服務(wù),安裝好 docker 之后需要啟動(dòng) docker 軟件后才能使用 docker 命令。

Docker 主要有 Dockerfile, Image, Container, Repository 四個(gè)基本概念。通過(guò) Dockerfile 我們可以生成 Docker Image(鏡像)。自己制作的鏡像可以上傳到 Docker hub 平臺(tái),也可以從平臺(tái)上拉去我們需要的鏡像。當(dāng)鏡像拉到本地之后,我們就可以實(shí)例化這個(gè)鏡像形成一個(gè) Container(實(shí)例) 了。一個(gè)簡(jiǎn)單的鏡像啟動(dòng)的命令是:

$ docker run[組織名稱]/<鏡像名稱>:[鏡像標(biāo)簽]`

其中除了鏡像名稱,其它的都是可選參數(shù)。組織名稱不填默認(rèn)為library,鏡像標(biāo)簽不填則默認(rèn)為latest。例如經(jīng)典的啟動(dòng)一個(gè) Hello World 鏡像的過(guò)程如下:

可以看到當(dāng)我實(shí)例化hello-world這個(gè)鏡像的時(shí)候,docker 發(fā)現(xiàn)本地沒(méi)有這個(gè)鏡像會(huì)先去 Docker hub 遠(yuǎn)端拉取鏡像,如剛才說(shuō)的,默認(rèn)是latest標(biāo)簽。拉取后就會(huì)實(shí)例化執(zhí)行入口命令了。我們除了可以使用 Docker hub 查找我們需要的鏡像之外,也可以使用docker search命令來(lái)查找。16年的一篇文章③顯示,Docker hub 上的鏡像包總量已經(jīng)超過(guò)40萬(wàn)了,并且以每周4-5k的速度增長(zhǎng)著。

下面我們就來(lái)看看如何運(yùn)行一個(gè) Nginx 容器實(shí)例:

$ docker run

-d

--rm

-p8080:80

-v"$PWD/workspace":/var/www/hello.world

-v"$PWD/hello.world.conf":/etc/nginx/conf.d/hello.world.conf

nginx

使用docker run命令就能啟動(dòng)一個(gè)實(shí)例了,其中-p表示將本機(jī)的 8080 端口映射到鏡像實(shí)例內(nèi)的 80 端口,而-v表示將本地的$PWD/workspace文件夾映射到鏡像實(shí)例里的/var/www/hello.world文件夾,后面的同理。最后再指定一下鏡像名稱,就能完成一次 Nginx 實(shí)例的啟動(dòng)了。此時(shí)訪問(wèn)http://hello.world:8080即可看到效果。

注:千萬(wàn)不要在容器實(shí)例中存儲(chǔ)內(nèi)容,實(shí)例銷毀時(shí)實(shí)例內(nèi)的所有內(nèi)容都會(huì)被銷毀,下次啟動(dòng)的時(shí)候又是全新的實(shí)例,內(nèi)容不會(huì)保存下來(lái)。如果需要存儲(chǔ)服務(wù)需要使用掛載卷或者外部存儲(chǔ)服務(wù)。

Dockerfile

Dockerfile 是 Docker 比較重要的概念。它是 Docker 創(chuàng)建鏡像的核心,它的出現(xiàn)給 Docker 提供了兩大好處:

文本化的鏡像生成操作讓其方便版本管理和自動(dòng)化部署

每條命令對(duì)應(yīng)鏡像的一層,細(xì)化操作后保證其可增量更新,復(fù)用鏡像塊,減小鏡像體積

Dockerfile 的一些編寫(xiě)規(guī)則主要如下:

使用#來(lái)注釋

FROM 指令告訴 Docker 使用哪個(gè)鏡像作為基礎(chǔ)

RUN 開(kāi)頭的指令會(huì)在創(chuàng)建中運(yùn)行,比如安裝一個(gè)軟件包

COPY 指令將文件復(fù)制進(jìn)鏡像中

WORKDIR 指定工作目錄

CMD/ENTRYPOINT 容器啟動(dòng)執(zhí)行命令

RUN 和 CMD/ENTRYPOINT 都是執(zhí)行命令,區(qū)別在于 RUN 是在鏡像構(gòu)建過(guò)程中執(zhí)行的,而 CMD/ENTRYPOINT 是在鏡像生成實(shí)例的時(shí)候執(zhí)行的,類似于 C/C++ 語(yǔ)言的頭文件的正常代碼的區(qū)別。而且后者在一個(gè) Dockerfile 文件中只能有一個(gè)存在。CMD/ENTRYPOINT 的區(qū)別除了在寫(xiě)法上有區(qū)別之外,還有在docker run命令后增加 CMD 參數(shù)的情況下有區(qū)別(CMD會(huì)被復(fù)寫(xiě))。一般建議使用 ENTRYPOINT 會(huì)更方便點(diǎn)。一個(gè)簡(jiǎn)單的 Node 命令行腳本的 Dockerfile 文件如下:

FROM mhart/alpine-node:8.9.3LABEL maintainer="lizheming "

org.label-schema.name="Drone Wechat Notification"

org.label-schema.vendor="lizheming"

org.label-schema.schema-version="1.1.0"

WORKDIR/wechat

COPYpackage.json/wechat/package.json

RUN npm install--production--registry=https://registry.npm.taobao.org

COPY index.js/wechat/index.js

ENTRYPOINT["node","/wechat/index.js"]

這里我認(rèn)為依賴是比較固定的,沒(méi)有代碼修改那么頻繁,所以將其提前了。最終保證了所以越穩(wěn)定的變化的命令至于上層,保證了每層打包出來(lái)的 Layer 能夠盡可能的復(fù)用,而不會(huì)徒增鏡像的大小。最后我們使用如下命令就可以完成一個(gè) Docker 鏡像的構(gòu)建了:

$ docker build lizheming/drone-wechat:latest

參數(shù)和docker run是一樣的。構(gòu)建完成之后就可以開(kāi)心的 push 到 Docker hub 上啦~

Docker Compose

以上我們說(shuō)了下如何啟動(dòng)一個(gè)服務(wù),但是我們都明白一個(gè)完整的項(xiàng)目肯定是不止依賴一個(gè)服務(wù)的,而 Docker 鏡像的 ENTRYPOINT 只能設(shè)置一個(gè),所以難道我們要使用docker run命令手動(dòng)創(chuàng)建 N 個(gè)容器實(shí)例嗎?為了解決這個(gè)問(wèn)題,Docker Compose 就瞬時(shí)出現(xiàn)了。Docker Compose 是一款容器編排程序,使用 YAML 配置的形式將你需要啟動(dòng)的容器管理起來(lái),免去我們需要多次執(zhí)行docker run命令的煩惱。

Docker Compose 是使用 Python 開(kāi)發(fā)的,它的安裝非常的簡(jiǎn)單,直接pip install docker-compose就好了。安裝完成之后分別使用up和stop命令可以啟動(dòng)和停止服務(wù)。一個(gè)簡(jiǎn)單的 docker-compose.yaml 配置文件大概如下:

version:"2"

services:

nginx:

depends_on:

-"php"

image:"nginx:latest"

volumes:

-"$PWD/src/docker/conf:/etc/nginx/conf.d"

-"$PWD:/home/q/system/m_look_360_cn"

ports:

-"8082:80"

container_name:"m.look.360.cn-nginx"

php:

image:"lizheming/php-fpm-yaf"

volumes:

-"$PWD:/home/q/system/m_look_360_cn"

container_name:"m.look.360.cn-php"

Docker Compose 的另外一個(gè)好處就是能夠幫我們處理容器的依賴關(guān)系,在每個(gè)容器中會(huì)將容器的 IP 和服務(wù)的名稱使用 hosts 的方式綁定,這樣我們就能在容器中直接使用服務(wù)名稱來(lái)接入對(duì)應(yīng)的容器了。例如下面這個(gè) Nginx 配置中的php:9000就是利用了這個(gè)原理。

server{

listen80;

server_namedev.m.look.360.cn;

charsetutf-8;

root/home/q/system/m_look_360_cn/public;

indexindex.htmlindex.htmindex.php;

error_page500502503504/50x.html;

location=/50x.html{

roothtml;

}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

#

location~.php${

fastcgi_passphp:9000;

#fastcgi_pass unix:/tmp/fcgi.sock;

fastcgi_indexindex.php;

}

}

Docker 相關(guān)

基于 Docker 容器虛擬化技術(shù)除了以上說(shuō)的解決部署環(huán)境之外,還有一些其它的優(yōu)點(diǎn),例如:

基于 Docker 的 CI 持續(xù)集成和 CD 持續(xù)支付

基于 Kubernetes, Docker Swarm 的集群彈性擴(kuò)容和縮容

CI/CD 對(duì)于現(xiàn)在的敏捷開(kāi)發(fā)是非常重要的,自動(dòng)化任務(wù)幫助我們節(jié)省很多不必要的開(kāi)發(fā)時(shí)間浪費(fèi),具體可查看我之間的文章《基于Docker的CI工具》④。而 k8s 和 Docker Swarm 帶來(lái)的彈性擴(kuò)容和縮容讓業(yè)務(wù)不在為流量問(wèn)題而頭疼。通過(guò)監(jiān)控報(bào)警設(shè)置當(dāng)出現(xiàn)峰值的時(shí)候自動(dòng)擴(kuò)容抗壓,當(dāng)出現(xiàn)低谷的時(shí)候自動(dòng)去除多余的容器來(lái)節(jié)省成本,同時(shí)也將多余的資源給其它服務(wù)使用。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 虛擬化技術(shù)
    +關(guān)注

    關(guān)注

    1

    文章

    50

    瀏覽量

    13041
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    454

    瀏覽量

    11815

原文標(biāo)題:Docker 從入門到實(shí)踐

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何使用 Docker容器技術(shù)

    對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),Docker肯定都不陌生,今天小編帶大家重新學(xué)習(xí)一下Docker。 什么是 Docker 官話: Docker 是一種開(kāi)源的容器
    的頭像 發(fā)表于 09-30 11:24 ?1.6w次閱讀

    ARM平臺(tái)實(shí)現(xiàn)Docker容器技術(shù)

    或網(wǎng)絡(luò)接口進(jìn)行通信。圖1(2)Docker的作用更高效的利用系統(tǒng)資源:Docker對(duì)系統(tǒng)資源的利用率更高,無(wú)論是應(yīng)用執(zhí)行速度,內(nèi)存損耗或者文件存儲(chǔ)速度,都要比傳統(tǒng)
    發(fā)表于 07-17 11:05

    ARM平臺(tái)實(shí)現(xiàn)Docker容器技術(shù)

    或網(wǎng)絡(luò)接口進(jìn)行通信。 圖1(2)Docker的作用更高效的利用系統(tǒng)資源:Docker對(duì)系統(tǒng)資源的利用率更高,無(wú)論是應(yīng)用執(zhí)行速度,內(nèi)存損耗或者文件存儲(chǔ)速度,都要比傳統(tǒng)
    發(fā)表于 07-25 14:36

    Linux上的虛擬技術(shù)歷史回顧

    虛擬技術(shù)的應(yīng)用十分廣泛. 當(dāng)前虛擬技術(shù)主要關(guān)注于服務(wù)器的
    發(fā)表于 07-22 07:18

    恩智浦LS1028A虛擬測(cè)試

    本文硬件平臺(tái)以飛凌嵌入式OK1028A-C開(kāi)發(fā)板為基礎(chǔ)進(jìn)行講解,其它LS1028產(chǎn)品,由于各個(gè)廠家設(shè)置不同會(huì)有所差異,請(qǐng)參考使用。本文檔主要介紹 LS1028A開(kāi)發(fā)板虛擬測(cè)試- Docker
    發(fā)表于 05-26 17:13

    ARM的虛擬技術(shù)是什么?如何去實(shí)現(xiàn)呢

    主流的操作系統(tǒng)都有一個(gè)假設(shè),就是這個(gè)系統(tǒng)有一個(gè)特權(quán)模式之下的OS,之上在跑多個(gè)非特權(quán)模式的APP;而ARM的虛擬
    發(fā)表于 05-09 09:55

    基于硬件輔助虛擬技術(shù)的交叉視圖進(jìn)程檢測(cè)

    分析了進(jìn)程隱藏技術(shù)和檢測(cè)技術(shù),對(duì)Strider Ghost Buster所使用的交叉視圖進(jìn)程檢測(cè)技術(shù)及相關(guān)問(wèn)題進(jìn)行了深入研究,結(jié)合硬件輔助
    發(fā)表于 02-13 16:17 ?32次下載
    基于硬件輔助<b class='flag-5'>虛擬</b><b class='flag-5'>化</b><b class='flag-5'>技術(shù)</b>的交叉視圖<b class='flag-5'>進(jìn)程</b>檢測(cè)

    容器、Docker虛擬機(jī)的區(qū)別

    容器技術(shù)起源于Linux,是一種內(nèi)核虛擬技術(shù),提供輕量級(jí)的虛擬,以便隔離
    的頭像 發(fā)表于 11-05 09:41 ?2953次閱讀

    Linux技術(shù)Docker如何欺騙容器中的進(jìn)程

    Docker趕緊加班加點(diǎn),用上了這個(gè)namespace,將進(jìn)程的“視野”鎖定在容器規(guī)定的范圍內(nèi),如此一來(lái),容器內(nèi)的進(jìn)程彷佛被施上了障眼法,再也看不到外面的世界。
    發(fā)表于 10-08 10:52 ?412次閱讀

    Docker常見(jiàn)的問(wèn)題和坑

    虛擬機(jī)通過(guò)添加Hypervisor層(虛擬中間層),虛擬出網(wǎng)卡、內(nèi)存、CPU等虛擬硬件,再在其上建立
    的頭像 發(fā)表于 11-03 09:59 ?794次閱讀

    如何區(qū)分虛擬機(jī)與Docker

    首先,大家需要明確一點(diǎn),Docker容器不是虛擬機(jī)。 2014年,當(dāng)我第一次接觸Docker的時(shí)候,我把它比做一種輕量級(jí)的虛擬機(jī)。這樣做無(wú)可厚非,因?yàn)?/div>
    的頭像 發(fā)表于 02-14 11:36 ?1071次閱讀
    如何區(qū)分<b class='flag-5'>虛擬</b>機(jī)與<b class='flag-5'>Docker</b>

    在AM335X平臺(tái)上運(yùn)行ubuntu系統(tǒng)docker容器

    下面的圖片比較了 Docker 和傳統(tǒng)虛擬方式的不同之處。傳統(tǒng)虛擬機(jī)技術(shù)虛擬出一套硬件后,在
    的頭像 發(fā)表于 04-04 09:50 ?1192次閱讀
    在AM335X平臺(tái)上運(yùn)行ubuntu<b class='flag-5'>系統(tǒng)</b>和<b class='flag-5'>docker</b>容器

    Docker虛擬機(jī)的區(qū)別

    的操作系統(tǒng)實(shí)例來(lái)實(shí)現(xiàn)虛擬技術(shù)。其實(shí)現(xiàn)方式是通過(guò)Hypervisor來(lái)實(shí)現(xiàn)的。Hypervisor是一個(gè)運(yùn)行在物理機(jī)上的軟件或硬件,負(fù)責(zé)管理和分配
    的頭像 發(fā)表于 11-23 09:37 ?9583次閱讀

    ARM平臺(tái)實(shí)現(xiàn)Docker容器技術(shù)

    ,亦可實(shí)現(xiàn)虛擬。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口。使用Docker,可像管理應(yīng)用程序一樣管理基礎(chǔ)結(jié)構(gòu)。通過(guò)利用Docker的快速發(fā)布、測(cè)試和部署代碼的方法,可顯著減少產(chǎn)
    的頭像 發(fā)表于 03-07 13:48 ?762次閱讀
    ARM平臺(tái)實(shí)現(xiàn)<b class='flag-5'>Docker</b>容器<b class='flag-5'>技術(shù)</b>

    Jtti:Docker會(huì)替代調(diào)虛機(jī)嗎

    Docker是計(jì)算虛擬的一種方式,和使用虛擬機(jī)進(jìn)行虛擬是類似的。由于近幾年
    的頭像 發(fā)表于 07-12 14:38 ?278次閱讀
    Jtti:<b class='flag-5'>Docker</b>會(huì)替代調(diào)虛機(jī)嗎