chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

Docker 從入門到實踐

馬哥Linux運(yùn)維 ? 來源:工程師李察 ? 2019-05-02 14:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

本文內(nèi)容主要是我之前分享的文字版,若想看重點的話可以看之前的Slide①

也可以查看分享視頻②

Why Docker?

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

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

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

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

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

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

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

打包過程無法實現(xiàn)自動化。

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

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

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

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

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

Docker hub 提供鏡像平臺方便共享鏡像

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

Docker 基礎(chǔ)

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

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

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

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

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

下面我們就來看看如何運(yùn)行一個 Nginx 容器實例:

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

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

Dockerfile

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

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

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

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

使用#來注釋

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

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

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

WORKDIR 指定工作目錄

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

RUN 和 CMD/ENTRYPOINT 都是執(zhí)行命令,區(qū)別在于 RUN 是在鏡像構(gòu)建過程中執(zhí)行的,而 CMD/ENTRYPOINT 是在鏡像生成實例的時候執(zhí)行的,類似于 C/C++ 語言的頭文件的正常代碼的區(qū)別。而且后者在一個 Dockerfile 文件中只能有一個存在。CMD/ENTRYPOINT 的區(qū)別除了在寫法上有區(qū)別之外,還有在docker run命令后增加 CMD 參數(shù)的情況下有區(qū)別(CMD會被復(fù)寫)。一般建議使用 ENTRYPOINT 會更方便點。一個簡單的 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)為依賴是比較固定的,沒有代碼修改那么頻繁,所以將其提前了。最終保證了所以越穩(wěn)定的變化的命令至于上層,保證了每層打包出來的 Layer 能夠盡可能的復(fù)用,而不會徒增鏡像的大小。最后我們使用如下命令就可以完成一個 Docker 鏡像的構(gòu)建了:

$ docker build lizheming/drone-wechat:latest

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

Docker Compose

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

Docker Compose 是使用 Python 開發(fā)的,它的安裝非常的簡單,直接pip install docker-compose就好了。安裝完成之后分別使用up和stop命令可以啟動和停止服務(wù)。一個簡單的 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.#-nginx"

php:

image:"lizheming/php-fpm-yaf"

volumes:

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

container_name:"m.look.#-php"

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

server{

listen80;

server_namedev.m.look.#;

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ù)除了以上說的解決部署環(huán)境之外,還有一些其它的優(yōu)點,例如:

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

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

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

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

    關(guān)注

    2

    文章

    1303

    瀏覽量

    73952
  • 機(jī)器
    +關(guān)注

    關(guān)注

    0

    文章

    798

    瀏覽量

    41821
  • 虛擬機(jī)
    +關(guān)注

    關(guān)注

    1

    文章

    971

    瀏覽量

    30291

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    Renesas QuickConnect Beginners Kit 快速上手:入門實踐

    Renesas QuickConnect Beginners Kit 快速上手:入門實踐 在當(dāng)今快速發(fā)展的電子科技領(lǐng)域,快速原型開發(fā)和高效的系統(tǒng)設(shè)計是工程師們追求的目標(biāo)。Renes
    的頭像 發(fā)表于 12-29 09:25 ?155次閱讀

    協(xié)議實踐——EtherNet/IP與NetStaX的最新進(jìn)展

    協(xié)議實踐——EtherNet/IP與NetStaX的最新進(jìn)展
    的頭像 發(fā)表于 12-19 15:26 ?1382次閱讀
    <b class='flag-5'>從</b>協(xié)議<b class='flag-5'>到</b><b class='flag-5'>實踐</b>——EtherNet/IP與NetStaX的最新進(jìn)展

    探索Murata Type2EG BLE評估套件:入門實踐

    探索Murata Type2EG BLE評估套件:入門實踐 在物聯(lián)網(wǎng)和無線通信飛速發(fā)展的今天,藍(lán)牙低功耗(BLE)技術(shù)憑借其低功耗、低成本和廣泛的兼容性,成為了眾多應(yīng)用的首選。Mu
    的頭像 發(fā)表于 12-18 09:40 ?247次閱讀

    嵌入式入門進(jìn)階,怎么學(xué)?

    嵌入式入門進(jìn)階,怎么學(xué)? 嵌入式學(xué)習(xí)的核心是 “軟硬結(jié)合的技術(shù)壁壘”,科學(xué)分層才能高效突破。以下是入門
    發(fā)表于 09-02 09:44

    Altium Designer電路設(shè)計入門精通

    Altium Designer電路設(shè)計入門精通 獲取完整文檔資料可下載附件哦?。。?! 如果內(nèi)容有幫助可以關(guān)注、點贊、評論支持一下哦~
    發(fā)表于 08-20 16:40

    DSP入門精通全集

    這是一本循序漸進(jìn)介紹DSP的書籍,DSP的入門知識介紹DPS的硬件,接口,應(yīng)用,DSP的ADC/DAC數(shù)字濾波器處理。本文除了對DS
    發(fā)表于 07-12 14:36

    DeepSeek:入門精通

    電子發(fā)燒友網(wǎng)站提供《DeepSeek:入門精通.pdf》資料免費(fèi)下載
    發(fā)表于 05-28 14:12 ?4次下載

    典型電路原理、電路識圖入門精通等資料

    1、電路識圖入門精通高清電子資料 由淺入深地介紹了電路圖的基礎(chǔ)知識、典型單元電路的識圖方法,通過“入門篇”和“精通篇”循序漸進(jìn)、由淺入深地介紹了電路圖的基礎(chǔ)知識、典型單元電路的識圖
    的頭像 發(fā)表于 04-15 15:53 ?2.2w次閱讀
    典型電路原理、電路識圖<b class='flag-5'>從</b><b class='flag-5'>入門</b><b class='flag-5'>到</b>精通等資料

    推薦電子電路入門精通

    分成三個部分。 分析電路 要沿信號路徑,輸入輸出,進(jìn)行逐級分析;要弄清電路關(guān)鍵點處包含有什么 信號,要知道它們的正常波形、幅度和電壓、工作頻率;還要弄清各級電路的功 能及每一個元器件在電路中的作用
    發(fā)表于 04-15 15:00

    【技術(shù)案例】Android in Docker

    Docker介紹Docker是一個開源的容器化平臺,用于打包、分發(fā)和運(yùn)行應(yīng)用程序。它通過將應(yīng)用及其所有依賴打包獨(dú)立的容器中,確保應(yīng)用在不同環(huán)境中一致運(yùn)行。Docker提供快速部署、隔
    的頭像 發(fā)表于 04-02 16:33 ?1623次閱讀
    【技術(shù)案例】Android in <b class='flag-5'>Docker</b>

    Python入門精通背記手冊

    電子發(fā)燒友網(wǎng)站提供《Python入門精通背記手冊.pdf》資料免費(fèi)下載
    發(fā)表于 03-28 17:43 ?87次下載

    DeepSeek入門精通

    電子發(fā)燒友網(wǎng)站提供《DeepSeek入門精通.pdf》資料免費(fèi)下載
    發(fā)表于 03-04 15:43 ?69次下載

    液晶屏維修入門精通

    資料介紹了如何液晶屏入門提高全部內(nèi)容
    發(fā)表于 02-24 16:46 ?10次下載

    清華大學(xué)發(fā)布:DeepSeek入門精通

    《DeepSeek:入門精通》是由清華大學(xué)新聞與傳播學(xué)院新媒體研究中心元宇宙文化實驗室的余夢瓏博士后團(tuán)隊精心撰寫的一份專業(yè)文檔。該文檔篇幅長達(dá)104頁,文檔的核心內(nèi)容圍繞DeepSeek的技術(shù)
    的頭像 發(fā)表于 02-14 09:49 ?1.2w次閱讀
    清華大學(xué)發(fā)布:DeepSeek<b class='flag-5'>從</b><b class='flag-5'>入門</b><b class='flag-5'>到</b>精通

    DeepSeek:入門精通

    DeepSeek:入門精通
    發(fā)表于 02-08 18:00 ?134次下載