一个“小白”眼中的容器
容器的誕生改變了部署和托管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容器中執行。過程如下:
\\\\這是我第一次學會如何在現實生活中使用容器。我個人認為,這種能夠在云端擁有按需構建和部署的服務器的想法是非常強大的,而且我覺得沒有什么理由不將它應用于所有的云部署。對我來說,這種方法的主要優點如下:
\\雖然我只提到了Atlassian的管道,但還有其他產品可選擇,例如Jenkins或GitLab CI。Bitbucket的入門級賬戶是免費的,但如果因為某些原因你不喜歡Atlassian,可以嘗試競爭對手的產品,但我相信這些產品都大同小異。
\\將容器作為開發工作區
\\大多數開發人員的機器上都安裝了很多開發工具。有時候我們甚至會忘了之前已經裝過同樣的工具,直到再次安裝時被告知要安裝的版本與已安裝的版本產生沖突。更糟糕的是,當我們升級或更換機器后,需要再次安裝所有的工具。大多數情況下,我們不停在尋找需要用到的工具、庫和插件,而且有時候我們會陷入試錯的泥潭。比如:“裝上這個,裝上那個,看看可不可以成功構建項目。哦,不行!還缺了什么?啊,為什么我不干脆包塊偏遠的瓜田做個農民?!”
\\當公司不斷有新開發人員加入時,這將變成一個更大的問題。他們都要經歷這個繁瑣的過程,實在是太浪費時間了。如果我們能夠在彈指揮手間快速配置和分發封裝好的開發工作區,一切都會變得更加容易。使用容器就可以搞定這一切。但是,一篇博文不足以完整地涵蓋這個主題,所以請參看YouTube視頻:https://youtu.be/vE1iDPx6-Ok。它差不多兩個小時,但完全值得一看。
\\我給這個過程畫了一張有意思的插圖。
\\\\當然,這個概念并不適合所有人。你可能需要在將哪些東西保留在機器上和使用容器運行哪些東西之間找到折衷。但不要忘了,軟件開發就是要不斷地尋找折衷方案!
\\將容器作為“隔離的工作區模塊”
\\我必須承認,盡管我計劃實現一個類似于視頻中描述的解決方案,但還沒有這么去做。一方面是因為我有點懶,一方面是因為沒有新開發人員需要我這么去做。不過沒關系,最重要的是,它已經成為我靈感的源泉。
\\我現在仍然沒有一個包含了所有工具和基礎設施的Docker鏡像。不過,我還是創建了一系列包含AWS CLI、無服務器等內容的鏡像,因為我不想將這些東西直接安裝到我的機器上。我還將我的應用程序依賴的各種服務器都放進容器中,例如PostrgreSQL、Redis、ES等。
\\盡管這種方式不如上一節中提到的完全自動化解決方案那樣高效,但它仍然有一些明顯的好處:
\\我不得不說,我很遺憾沒有及早學習有關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
\\感謝張嬋對本文的審校。
總結
以上是生活随笔為你收集整理的一个“小白”眼中的容器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Err Welcoe to emerge
- 下一篇: 浅谈前端实现页面加载进度条以及 npro