日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
寫給前端工程師的Docker入門

為什么我們要用 docker ?

創(chuàng)新互聯(lián)一直通過網(wǎng)站建設(shè)和網(wǎng)站營銷幫助企業(yè)獲得更多客戶資源。 以"深度挖掘,量身打造,注重實效"的一站式服務(wù),以網(wǎng)站制作、成都做網(wǎng)站、移動互聯(lián)產(chǎn)品、營銷型網(wǎng)站建設(shè)服務(wù)為核心業(yè)務(wù)。10多年網(wǎng)站制作的經(jīng)驗,使用新網(wǎng)站建設(shè)技術(shù),全新開發(fā)出的標(biāo)準(zhǔn)網(wǎng)站,不但價格便宜而且實用、靈活,特別適合中小公司網(wǎng)站制作。網(wǎng)站管理系統(tǒng)簡單易用,維護(hù)方便,您可以完全操作網(wǎng)站資料,是中小公司快速網(wǎng)站建設(shè)的選擇。

過去的我們,當(dāng)業(yè)務(wù)發(fā)展需要部署新的應(yīng)用時,DevOps 小伙伴通常會去買一臺服務(wù)器,但是卻不知道這個新應(yīng)用具體需要多高的配置,往往都會造成資源浪費。

當(dāng)虛擬機(jī)出現(xiàn)后,它可以讓我們在一臺服務(wù)器上運行多個應(yīng)用,但是卻有一個缺陷。每個 VM 需要運行一整個的操作系統(tǒng)。每個 OS 又需要 CPU、RAM 等等,需要打補丁、安裝證書,這些反過來又增加了成本和彈性。

Google 在很久之前就開始使用容器模型來解決 VM 模式的弊端。簡單來說容器模型允許我們在同一臺主機(jī)上運行多個容器,而且共用主機(jī)的 CPU、RAM 等資源。

那么它對開發(fā)者來說意味著是么呢?

它可以保證對所有的開發(fā)者和服務(wù)器來說,我們的工作環(huán)境都是一致的。比如: 生產(chǎn)環(huán)境、仿真環(huán)境、測試環(huán)境。

任何人都可以分分鐘配置好項目,無需亂搞配置、安裝庫和設(shè)置依賴。

簡單來說,docker 是一個平臺,它允許我們使用容器來開發(fā)、部署、運行應(yīng)用程序。

讓我們退一步來看,容器系統(tǒng)在物理上是什么樣子的,以及與 VM 有什么區(qū)別。

可以看出來,宿主機(jī)的資源在容器化的使用后是共享的,但是在 VM 中卻被分割開了。

接下來,我們來深入一些。

如何使用 docker ?

為此我們需要先熟悉一些術(shù)語。

Docker image: 它是一個可執(zhí)行文件,包含了運行一個應(yīng)用程序的操作系統(tǒng)配置和所有的庫。它有多個層疊在一起,并表示為單個對象。docker image 是通過 docker file 來創(chuàng)建的,我們稍后再講。

Docker Container: 它是 docker image 的一個運行實例。同一個 docker image 可以有多個運行的 container。

容器化 Node.js 應(yīng)用

我們來嘗試容器化一個簡單的 node.js 應(yīng)用,然后創(chuàng)建一個 image:

你的 Node.js 應(yīng)用

先創(chuàng)建一個 my-node-app 文件夾, 

 
 
 
 
  1. mkdir my-node-app  
  2. cd my-node-app 

然后創(chuàng)建一個 index.js 來啟動一個 node server: 

 
 
 
 
  1. // 我們用 require 引入 express  
  2. var express = require('express')  
  3. var app = express()  
  4. // 對根 URL 做一個響應(yīng)  
  5. app.get('/', function (req, res) {    
  6.  res.send('Hello World!')   
  7. })  
  8. // 讓服務(wù)器監(jiān)聽 8081 端口  
  9. app.listen(8081, function () {    
  10.   console.log('app listening on port 8081!')  
  11. }) 

然后我們創(chuàng)建一個 package.json 文件,可以通過 npm init -y 來快速生成: 

 
 
 
 
  1. {  
  2.    "name": "helloworld",    
  3.    "version": "1.0.0",    
  4.    "description": "Dockerized node.js app",    
  5.    "main": "index.js",    
  6.    "author": "",    
  7.    "license": "ISC",    
  8.    "dependencies": {    
  9.      "express": "^4.16.4"    
  10.    }  

到這一步我們甚至不需要 express 或者 npm 安裝在自己的機(jī)器,因為 dockerfile 可以為我們配置和安裝這些依賴。

DockerFile

讓我們創(chuàng)建一個 dockerfile,然后保存到 my-node-app 文件夾。這個文件沒有擴(kuò)展名,它的名字就叫作 Dockerfile,這是里面的內(nèi)容: 

 
 
 
 
  1. # Dockerfile  
  2. FROM node:8  
  3. WORKDIR /app  
  4. COPY package.json /app  
  5. RUN npm install  
  6. COPY . /app  
  7. EXPOSE 8081  
  8. CMD node index.js 

下面解釋一下里面的命令:

FROM node:8 -- 從 docker hub 拉取 node.js docker 鏡像,可以在這里找到 node 的鏡像:https://hub.docker.com/_/node/

WORKDIR /app -- 設(shè)置鏡像中的工作目錄,可以與下面的命令一起使用: COPY,RUN 和 CMD

COPY package.json /app -- 將 package.json 從宿主機(jī)的 my-node-app 目錄復(fù)制到了鏡像中的 /app 目錄

RUN npm install -- 在鏡像中運行此命令來安裝 node 包

COPY . /app -- 復(fù)制 my-node-app 目錄中的所有文件到鏡像中的 /app 目錄

EXPOSE 8081 -- 這條命令告訴 container 要暴露一個端口號,這個端口號正是我們在 index.js 中寫的那個。默認(rèn)情況下,容器會忽略對它所有的請求。

構(gòu)建 Docker 鏡像

注意看啦~ 打開控制臺,到 my-node-app 目錄下,執(zhí)行以下命令: 

 
 
 
 
  1. # Build a image docker build -t    
  2.  docker build -t hello-world . 

這條命令在我們宿主機(jī)創(chuàng)建了一個 hello-world 鏡像

-t 用來為我們的鏡像指定一個名字,這里就是 hello-world

. 是用來指明 docker file 的路徑,由于我們已經(jīng)在 my-node-app 中,所以路徑用 . 就可以了

你可以在控制臺看到類似于以下的輸出: 

 
 
 
 
  1. Sending build context to Docker daemon  4.096kB    
  2. Step 1/7 : FROM node:8    
  3.  ---> 4f01e5319662    
  4. Step 2/7 : WORKDIR /app    
  5.  ---> Using cache    
  6.  ---> 5c173b2c7b76    
  7. Step 3/7 : COPY package.json /app    
  8.  ---> Using cache    
  9.  ---> ceb27a57f18e    
  10. Step 4/7 : RUN npm install    
  11.  ---> Using cache    
  12.  ---> c1baaf16812a    
  13. Step 5/7 : COPY . /app    
  14.  ---> 4a770927e8e8    
  15. Step 6/7 : EXPOSE 8081    
  16.  ---> Running in 2b3f11daff5e   
  17. Removing intermediate container 2b3f11daff5e    
  18.  ---> 81a7ce14340a    
  19. Step 7/7 : CMD node index.js    
  20.  ---> Running in 3791dd7f5149    
  21. Removing intermediate container 3791dd7f5149    
  22.  ---> c80301fa07b2    
  23. Successfully built c80301fa07b2    
  24. Successfully tagged hello-world:latest 

可以看到,它根據(jù) docker file 中的命令依次運行,然后輸出了一個 docker 鏡像。當(dāng)你第一次運行的時候可能會需要一些時間,下次就可以使用緩存來加快速度了。現(xiàn)在我們來看下剛才 build 的鏡像: 

 
 
 
 
  1. # Get a list of images on your host   
  2.  docker images 

這個命令會顯示在你電腦上存在的 docker 鏡像。其中會有一條: 

 
 
 
 
  1. REPOSITORY    TAG      IMAGE ID      CREATED         SIZE    
  2. hello-world   latest   c80301fa07b2  22 minutes ago  896MB 

運行 Docker 容器

既然我們已經(jīng)創(chuàng)建了鏡像,下面我們就從這個鏡像運行一個 docker 容器: 

 
 
 
 
  1. # Default command for this is docker container run     
  2.  docker container run -p 4000:8081 hello-world 

這條命令用來創(chuàng)建和運行一個 docker 容器

-p 4000:8081 -- 是一個發(fā)布(publish)標(biāo)識,它將本機(jī)的 4000 端口映射到了容器中的 8081 端口?,F(xiàn)在所有對本機(jī) 4000 端口的訪問,都會被容器中的 8081 端口監(jiān)聽。

hello-world -- 這個名字就是剛才用 docker build 命令時指定的鏡像名稱。

你將會得到以下輸出: 

 
 
 
 
  1. app listening on port 8081! 

如果你需要進(jìn)入容器并且掛載一個 bash 終端,可以運行: 

 
 
 
 
  1. # Enter the container  
  2. docker exec -ti  /bin/bash 

為了檢查我們的容器是否運行,打開另一個命令行,然后輸入: 

 
 
 
 
  1. docker ps 

可以看到以下輸出: 

 
 
 
 
  1. CONTAINER ID    IMAGE        COMMAND                  CREATED      
  2. ``  hello-world  "/bin/sh -c 'node in…"   11 seconds ago  
  3. STATUS              PORTS                    NAMES    
  4. Up 11 seconds       0.0.0.0:4000->8081/tcp   some-random-name 

這里可以看我們從 hello-world 鏡像創(chuàng)建的容器,以及它的 ,它正在運行,并且監(jiān)聽了 8081 端口號。

現(xiàn)在我們這個簡單的 Node.js 應(yīng)用就已經(jīng)完全容器化了。你可以在瀏覽器訪問 http://localhost:4000 ,應(yīng)該可以看到以下畫面: 


本文題目:寫給前端工程師的Docker入門
標(biāo)題來源:http://www.5511xx.com/article/djgssdh.html