日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

一个“小白”眼中的容器

發布時間:2024/1/17 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一个“小白”眼中的容器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

容器的誕生改變了部署和托管Web應用程序的方式。在開始閱讀Docker入門指南之前,我就已知曉,但除此之外,我一無所知。直到開始使用容器之后,我才意識到這個容器的潛力所在,它遠比使用虛擬機來托管REST API要強大得多。讓我們來談談容器如何讓你的生活變得更美好,即使你已經發誓永遠不會將你寶貴的寵物應用程序部署在除裸機之外的任何環境中。以下是我在過去六個月中發現的一些不那么正統的容器使用方法。

\\

將容器作為構建/部署服務器

\\

我的容器之旅就是從這里開始的。

\\

我喜歡DevOps。在我職業生涯的某個階段,我遇見了TeamCity和Octopus Deploy,這個充滿活力的組合讓我感受到了CI/CD的閃亮魔力。我是我們團隊中唯一一個愿意花時間寫腳本、維護開發服務器和搭建新環境的人,這些工作對我來說非常有趣。唯一讓我抓狂的是我們的基礎設施是一堆物理服務器和Azure VM,而我通常沒有它們的訪問權限。

\\

不久前,我參與了一個100%的云原生新項目。我們達成的第一個共識是采用基礎設施即代碼模式,并盡可能實現CI/CD的最佳實踐。我們都不想被公司內部網絡的界限所束縛,于是決定所有的Ops技術也應該是基于云的“XX即服務”,這樣我們就可以隨時隨訪問Docker、Git和NPM存儲庫。于是我卷起袖子,開始尋找構建服務器的最佳方案,這個時候我的腦子里冒出了一個惱人的想法:“我該如何在沒有服務器的情況下構建出一個構建服務器”?我最擔心的是,如果無法在線創建理想的環境,我將無法控制局面,構建、交付和審核工件的方式也將受到限制。有那么一刻,我陷入了黑暗之中。

\\

但我并沒有驚慌失措。首先,我知道我們需要一個基于云的版本控制系統,盡管我對GitLab青睞有加,但經過討論,我們還是決定使用Atlassian的Bitbucket(出于技術之外的一些原因)。我知道GitLab和GitHub都提供了CI/CD方面的產品,于是我看了一下Bitbucket,然后發現了一個叫作Bitbucket管道的東西。

\\

管道的概念是這樣的:你提供一系列命令以及說明為什么以及何時運行這些命令的規則——這些就是所謂的管道。一個管道可能包含從構建和運行單元測試到生產環境部署和驗證部署的一系列操作。管道中包含的是bash shell命令,這些命令將在Docker容器中執行。過程如下:

\\

\\

這是我第一次學會如何在現實生活中使用容器。我個人認為,這種能夠在云端擁有按需構建和部署的服務器的想法是非常強大的,而且我覺得沒有什么理由不將它應用于所有的云部署。對我來說,這種方法的主要優點如下:

\\
  • 如果你使用Dockerfile創建鏡像,就可以輕松跟蹤CI/CD基礎設施的變更。由于已經采用基礎設施即代碼,你可以將它們提交到版本控制系統中,這樣就可以更容易地找到錯誤,精確定位改進的部分,并將知識分享給團隊成員。\\t
  • 修改Dockerfile文件比修改虛擬機要容易得多。\\t
  • 不需要維護物理基礎設施,我想這是一個很明顯的優勢。\\t
  • 成本效益。在Bitbucket高級訂閱和工件存儲上花些錢是合情合理的,因為這樣就不需要花錢在硬件、許可費用上,Dev/Ops也不需要花時間將這些東西連接起來,并在發生故障時修復故障。\
  • 雖然我只提到了Atlassian的管道,但還有其他產品可選擇,例如Jenkins或GitLab CI。Bitbucket的入門級賬戶是免費的,但如果因為某些原因你不喜歡Atlassian,可以嘗試競爭對手的產品,但我相信這些產品都大同小異。

    \\

    將容器作為開發工作區

    \\

    大多數開發人員的機器上都安裝了很多開發工具。有時候我們甚至會忘了之前已經裝過同樣的工具,直到再次安裝時被告知要安裝的版本與已安裝的版本產生沖突。更糟糕的是,當我們升級或更換機器后,需要再次安裝所有的工具。大多數情況下,我們不停在尋找需要用到的工具、庫和插件,而且有時候我們會陷入試錯的泥潭。比如:“裝上這個,裝上那個,看看可不可以成功構建項目。哦,不行!還缺了什么?啊,為什么我不干脆包塊偏遠的瓜田做個農民?!”

    \\

    當公司不斷有新開發人員加入時,這將變成一個更大的問題。他們都要經歷這個繁瑣的過程,實在是太浪費時間了。如果我們能夠在彈指揮手間快速配置和分發封裝好的開發工作區,一切都會變得更加容易。使用容器就可以搞定這一切。但是,一篇博文不足以完整地涵蓋這個主題,所以請參看YouTube視頻:https://youtu.be/vE1iDPx6-Ok。它差不多兩個小時,但完全值得一看。

    \\

    我給這個過程畫了一張有意思的插圖。

    \\

    \\

    當然,這個概念并不適合所有人。你可能需要在將哪些東西保留在機器上和使用容器運行哪些東西之間找到折衷。但不要忘了,軟件開發就是要不斷地尋找折衷方案!

    \\

    將容器作為“隔離的工作區模塊”

    \\

    我必須承認,盡管我計劃實現一個類似于視頻中描述的解決方案,但還沒有這么去做。一方面是因為我有點懶,一方面是因為沒有新開發人員需要我這么去做。不過沒關系,最重要的是,它已經成為我靈感的源泉。

    \\

    我現在仍然沒有一個包含了所有工具和基礎設施的Docker鏡像。不過,我還是創建了一系列包含AWS CLI、無服務器等內容的鏡像,因為我不想將這些東西直接安裝到我的機器上。我還將我的應用程序依賴的各種服務器都放進容器中,例如PostrgreSQL、Redis、ES等。

    \\

    盡管這種方式不如上一節中提到的完全自動化解決方案那樣高效,但它仍然有一些明顯的好處:

    \\
  • 更干凈的系統——容器中的應用程序都被隔離在當前容器內,不會給宿主系統帶來任何副作用。\\t
  • 因為我的容器使用相同的命令運行,可以運行在帶有Linux/Unix shell的任何機器上,所以還是具備了一定的可移植性。\\t
  • 自動化的潛力。我可以創建一些shell腳本將不同的容器捆綁在一起。例如,只用一個命令就可以啟動和停止Redis服務器、MySql服務器和Koa應用程序。\\t
  • 使用管道鏡像在本地構建項目,這樣就可以確保在本地和在“構建服務器”上構建工件的方式是完全相同的。我還可以為Docker鏡像添加標簽,并對它們進行版本化,以確保每次構建代碼的某個版本時都能獲得相同的結果。\\t
  • 能夠測試新的東西或有風險的東西。關于IT衛生(hygiene),有兩則有意思的軼事。首先是一個關于俄羅斯系統管理員的故事。這個管理員非常偏執,一定要在一個特殊的虛擬機中打開所有的電子郵件附件。另一個是兩年前我看到的一個推文。一位博主(也是一名安全研究員)發布了一個shell腳本,并聲稱這個腳本可以播放一些令人咂舌的ASCII動畫,但實際上是將僵尸網絡客戶端下載到受害者的機器上。在幾天的時間內,這個人就擁有了數萬個僵尸網絡客戶端。好在這只是一次練習,旨在向人們展示來自網絡的隨機代碼有多危險。所以我的觀點是,雖然我們可能不像那個俄羅斯系統管理員那樣偏執和謹慎,但仍然可以使用隔離容器來試驗新事物——無論它們帶有多大的潛在風險。\
  • 我不得不說,我很遺憾沒有及早學習有關Docker的基礎知識,而是直接開始以這種方式使用容器——比如我的宿主系統中的獨立工作區。但這絕對可以幫我更好地組織我的工作區,最重要的是,它幫我節省了很多時間。

    \\

    下面是我用來構建包含無服務器框架、Newman、localstack和AWS CLI的鏡像的Dockerfile文件示例,我用它在本地運行無服務器項目。最后一行是shell命令,用于在交互模式下運行這個鏡像的容器實例(假設鏡像叫作“my-dev-image-yo”)。

    \\\FROM amazonlinux:latest\ \RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash\RUN export NVM_DIR=\"$HOME/.nvm\" \u0026amp;\u0026amp; [ -s \"$NVM_DIR/nvm.sh\" ] \\\ \u0026amp;\u0026amp; \\. \"$NVM_DIR/nvm.sh\" \u0026amp;\u0026amp; [ -s \"$NVM_DIR/bash_completion\" ] \u0026amp;\u0026amp; \\. \"$NVM_DIR/bash_completion\" \\\ \u0026amp;\u0026amp; nvm install v6.10.0 \\\ \u0026amp;\u0026amp; npm install serverless -g \\\ \u0026amp;\u0026amp; npm install newman -g \\\ \u0026amp;\u0026amp; npm install serverless-localstack -g\ \# Installing pip\RUN yum install -y python-pip\RUN yum install -y python-setuptools\RUN easy_install-2.6 pip\RUN pip install awscli-local\\RUN echo \"All done\"\\# Run with docker run --rm -v /git:/git -it my-dev-image-yo\\

    結論

    \\

    如果你一直在問自己是否應該開始花費寶貴的時間來學習容器,我的答案是“是”。你絕對應該這么做。如果你的公司堅持使用COBOL和基于Teletype的系統,你掌握的Docker技能仍然能夠派上用場。

    \\

    Docker的官方入門指南是一個很好的著手點,不過也不要忘了上面提到的視頻。 Docker現在擁有龐大且不斷增長的社區,所以,如果你通過谷歌搜索“如何在Docker容器中運行XX”,搜索結果一定不會讓你失望。

    \\

    英文原文:https://itnext.io/containers-as-i-didnt-know-them-67cd4eaf3739

    \\

    感謝張嬋對本文的審校。

    總結

    以上是生活随笔為你收集整理的一个“小白”眼中的容器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。