偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Docker上開(kāi)發(fā)nodejs

開(kāi)發(fā) 前端
Docker 是一個(gè)開(kāi)源項(xiàng)目,誕生于 2013 年初,最初是 dotCloud 公司內(nèi)部的一個(gè)業(yè)余項(xiàng)目。它基于 Google 公司推出的 Go 語(yǔ)言實(shí)現(xiàn)。 項(xiàng)目后來(lái)加入了 Linux 基金會(huì),遵從了 Apache 2.0 協(xié)議,項(xiàng)目代碼在 GitHub上進(jìn)行維護(hù)。

Docker介紹

Docker 是一個(gè)開(kāi)源項(xiàng)目,誕生于 2013 年初,最初是 dotCloud 公司內(nèi)部的一個(gè)業(yè)余項(xiàng)目。它基于 Google 公司推出的 Go 語(yǔ)言實(shí)現(xiàn)。 項(xiàng)目后來(lái)加入了 Linux 基金會(huì),遵從了 Apache 2.0 協(xié)議,項(xiàng)目代碼在 GitHub上進(jìn)行維護(hù)。

Docker 項(xiàng)目的目標(biāo)是實(shí)現(xiàn)輕量級(jí)的操作系統(tǒng)虛擬化解決方案。 Docker 的基礎(chǔ)是 Linux 容器(LXC)等技術(shù)。

在 LXC 的基礎(chǔ)上 Docker 進(jìn)行了進(jìn)一步的封裝,讓用戶不需要去關(guān)心容器的管理,使得操作更為簡(jiǎn)便。用戶操作 Docker 的容器就像操作一個(gè)快速輕量級(jí)的虛擬機(jī)一樣簡(jiǎn)單。

下面的圖片比較了 Docker 和傳統(tǒng)虛擬化方式的不同之處,可見(jiàn)容器是在操作系統(tǒng)層面上實(shí)現(xiàn)虛擬化,直接復(fù)用本地主機(jī)的操作系統(tǒng),而傳統(tǒng)方式則是在硬件層面實(shí)現(xiàn)。 

 

 

Docker的優(yōu)勢(shì)

作為一種新興的虛擬化方式,Docker 跟傳統(tǒng)的虛擬化方式相比具有眾多的優(yōu)勢(shì)。

首先,Docker 容器的啟動(dòng)可以在秒級(jí)實(shí)現(xiàn),這相比傳統(tǒng)的虛擬機(jī)方式要快得多。 其次,Docker 對(duì)系統(tǒng)資源的利用率很高,一臺(tái)主機(jī)上可以同時(shí)運(yùn)行數(shù)千個(gè) Docker 容器。

容器除了運(yùn)行其中應(yīng)用外,基本不消耗額外的系統(tǒng)資源,使得應(yīng)用的性能很高,同時(shí)系統(tǒng)的開(kāi)銷盡量小。傳統(tǒng)虛擬機(jī)方式運(yùn)行 10 個(gè)不同的應(yīng)用就要起 10 個(gè)虛擬機(jī),而Docker 只需要啟動(dòng) 10 個(gè)隔離的應(yīng)用即可。

我理解的Docker

目前,我在使用docker的過(guò)程中基本上是本地開(kāi)發(fā)好項(xiàng)目之后,生成dist文件目錄,遷移到docker當(dāng)中,相當(dāng)于只在生產(chǎn)環(huán)境開(kāi)發(fā)使用docker,原因主要有以下幾點(diǎn):

在開(kāi)發(fā)環(huán)境使用docker感覺(jué)還是不是很舒服,每次修改都要重新build,以及run,比較麻煩,本地開(kāi)發(fā)更加舒服;

docker實(shí)際上可以看做是一個(gè)封閉的盒子,想做一些查看和操作還是有點(diǎn)麻煩的的,交互性不是很好,感覺(jué)比較適合生產(chǎn)環(huán)境。

Docker hub介紹

目前 Docker 官方維護(hù)了一個(gè)公共倉(cāng)庫(kù) Docker Hub,其中已經(jīng)包括了超過(guò) 15,000 的鏡像,大部分需求,都可以通過(guò)在 Docker Hub 中直接下載鏡像來(lái)實(shí)現(xiàn)。

登陸

可以通過(guò)執(zhí)行 docker login 命令來(lái)輸入用戶名、密碼和郵箱來(lái)完成注冊(cè)和登錄。 注冊(cè)成功后,本地用戶目錄的 .dockercfg 中將保存用戶的認(rèn)證信息。

  1. docker login --username=username --email=email@gmail.com 

下載

根據(jù)是否是官方提供,可將鏡像資源分為兩類。 一種是類似 centos 這樣的基礎(chǔ)鏡像,被稱為基礎(chǔ)或根鏡像。這些基礎(chǔ)鏡像是由 Docker 公司創(chuàng)建、驗(yàn)證、支持、提供。這樣的鏡像往往使用單個(gè)單詞作為名字。 還有一種類型,比如 tianon/centos 鏡像,它是由 Docker 的用戶創(chuàng)建并維護(hù)的,往往帶有用戶名稱前綴??梢酝ㄟ^(guò)前綴 user_name/ 來(lái)指定使用某個(gè)用戶提供的鏡像,比如 tianon 用戶。

  1. docker pull apline 
  2.  
  3. // or 
  4.  
  5. docker pull mhart/alpine-node-auto  

提交

修改當(dāng)前鏡像之后需要提交修改后的鏡像,修改一次鏡像包括提交的過(guò)程如下:

先使用下載的鏡像啟動(dòng)容器。

  1. docker run -t -i training/sinatra /bin/bash 
  2.  
  3. root@0b2616b0e5a8:/#  

注意:記住容器的 ID,稍后還會(huì)用到。在容器中添加 json package(一個(gè) ruby gem)。

  1. root@0b2616b0e5a8:/# gem install json 

當(dāng)結(jié)束后,我們使用 exit 來(lái)退出,現(xiàn)在我們的容器已經(jīng)被我們改變了,使用 docker commit 命令來(lái)提交更新后的副本。

  1. docker commit -m "Added json gem" -a "Docker Newbee" 0b2616b0e5a8 ouruser/sinatra:v2 
  2.  
  3. 4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c  

其中,-m 來(lái)指定提交的說(shuō)明信息,跟我們使用的版本控制工具一樣;-a 可以指定更新的用戶信息;之后是用來(lái)創(chuàng)建鏡像的容器的 ID;***指定目標(biāo)鏡像的倉(cāng)庫(kù)名和 tag 信息。創(chuàng)建成功后會(huì)返回這個(gè)鏡像的 ID 信息。

使用 docker images 來(lái)查看新創(chuàng)建的鏡像。

之后,可以使用新的鏡像來(lái)啟動(dòng)容器

  1. $ docker run -t -i ouruser/sinatra:v2 /bin/bash 
  2.  
  3. root@78e82f680994:/#  

上傳

用戶可以通過(guò) docker push 命令,把自己創(chuàng)建的鏡像上傳到倉(cāng)庫(kù)中來(lái)共享。例如,用戶在 Docker Hub 上完成注冊(cè)后,可以推送自己的鏡像到倉(cāng)庫(kù)中。

  1. $ docker push ouruser/sinatra 
  2.  
  3. The push refers to a repository [ouruser/sinatra] (len: 1) 
  4.  
  5. Sending image list 
  6.  
  7. Pushing repository ouruser/sinatra (3 tags)  

修改鏡像的標(biāo)簽

用 docker tag 命令來(lái)修改鏡像的標(biāo)簽。

  1. $ sudo docker tag 5db5f8471261 ouruser/sinatra:devel 
  2.  
  3. $ sudo docker images ouruser/sinatra 
  4.  
  5. REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE 
  6.  
  7. ouruser/sinatra latest 5db5f8471261 11 hours ago 446.7 MB 
  8.  
  9. ouruser/sinatra devel 5db5f8471261 11 hours ago 446.7 MB 
  10.  
  11. ouruser/sinatra v2 5db5f8471261 11 hours ago 446.7 MB  

利用 Dockerfile 來(lái)創(chuàng)建鏡像

使用 docker commit 來(lái)擴(kuò)展一個(gè)鏡像比較簡(jiǎn)單,但是不方便在一個(gè)團(tuán)隊(duì)中分享。我們可以使用 docker build 來(lái)創(chuàng)建一個(gè)新的鏡像。為此,首先需要?jiǎng)?chuàng)建一個(gè) Dockerfile,包含一些如何創(chuàng)建鏡像的指令。

Dockerfile 中每一條指令都創(chuàng)建鏡像的一層,例如:

  1. # Dockerfile.alpine 
  2.  
  3. FROM mhart/alpine-node:latest 
  4.  
  5. MAINTAINER zhanfang "fzhanxd@gmail.com" 
  6.  
  7. # If you have native dependencies, you'll need extra tools 
  8.  
  9. # RUN apk add --no-cache make gcc g++ python 
  10.  
  11. Create app directory 
  12.  
  13. RUN mkdir -p /usr/src/app 
  14.  
  15. WORKDIR /usr/src/app 
  16.  
  17. # If your project depends on many package, you can use cnpm instead of npm 
  18.  
  19. # RUN npm install cnpm -g --registry=https://registry.npm.taobao.org 
  20.  
  21. # Install app dependencies 
  22.  
  23. COPY package.json /usr/src/app/ 
  24.  
  25. RUN npm install --registry=https://registry.npm.taobao.org 
  26.  
  27. # Bundle app source 
  28.  
  29. COPY . /usr/src/app 
  30.  
  31. # Expose port 
  32.  
  33. EXPOSE 3000 
  34.  
  35. CMD [ "npm""start" ]  

編寫(xiě)完成 Dockerfile 后可以使用 docker build 來(lái)生成鏡像。

  1. docker build -t alpine-koa2-startkit . 

其中 -t 標(biāo)記來(lái)添加 tag,指定新的鏡像的用戶信息。 “.” 是 Dockerfile 所在的路徑(當(dāng)前目錄),也可以替換為一個(gè)具體的 Dockerfile 的路徑。

Dockfile 中的指令被一條一條的執(zhí)行。每一步都創(chuàng)建了一個(gè)新的容器,在容器中執(zhí)行指令并提交修改(就跟之前介紹過(guò)的 docker commit 一樣)。當(dāng)所有的指令都執(zhí)行完畢之后,返回了最終的鏡像 id。所有的中間步驟所產(chǎn)生的容器都被刪除和清理了。

注意一個(gè)鏡像不能超過(guò) 127 層

完成一次鏡像的下載、修改和上傳

以alpine-node-auto鏡像為基礎(chǔ)

1. 下載基礎(chǔ)鏡像

  1. docker pull mhart/alpine-node-auto 

2. 編寫(xiě)dockerfile

  1. # Dockerfile.alpine 
  2.  
  3. FROM mhart/alpine-node:latest 
  4.  
  5. MAINTAINER zhanfang "fzhanxd@gmail.com" 
  6.  
  7. # If you have native dependencies, you'll need extra tools 
  8.  
  9. # RUN apk add --no-cache make gcc g++ python 
  10.  
  11. Create app directory 
  12.  
  13. RUN mkdir -p /usr/src/app 
  14.  
  15. WORKDIR /usr/src/app 
  16.  
  17. # If your project depends on many package, you can use cnpm instead of npm 
  18.  
  19. # RUN npm install cnpm -g --registry=https://registry.npm.taobao.org 
  20.  
  21. # Install app dependencies 
  22.  
  23. COPY package.json /usr/src/app/ 
  24.  
  25. RUN npm install --registry=https://registry.npm.taobao.org 
  26.  
  27. # Bundle app source 
  28.  
  29. COPY . /usr/src/app 
  30.  
  31. # Expose port 
  32.  
  33. EXPOSE 3000 
  34.  
  35. CMD [ "npm""start" ]  

3. 創(chuàng)建新的鏡像

  1. docker build -t=zhanfang/alpine-koa2-startkit:v1" . 

打上 alpine-koa2-startkit:v1 的 tag

4. 運(yùn)行一個(gè)容器實(shí)例

  1. docker run -t -i --name alpine-koa2-application zhanfang/alpine-koa2-startkit:v2 

5. 上傳鏡像(如果沒(méi)有登錄請(qǐng)登陸,使用login命令) 

  1. docker push zhanfang/alpine-koa2-startkit 

 

責(zé)任編輯:龐桂玉 來(lái)源: segmentfault
相關(guān)推薦

2014-07-29 10:35:21

DockerNodeJS

2014-08-25 12:14:02

Docker協(xié)助開(kāi)發(fā)

2014-04-18 10:04:15

NodeJS前后端分離

2016-12-28 11:18:10

NodeJSJava開(kāi)發(fā)者

2015-02-06 11:04:10

DockerAWS移動(dòng)應(yīng)用開(kāi)發(fā)測(cè)試

2011-06-15 18:38:17

Linux Qt Symbian

2016-08-04 13:44:20

CentOS6.xNodejs解決方案

2024-10-06 13:47:43

后端開(kāi)發(fā)者項(xiàng)目

2022-06-28 15:04:32

容器Docker

2016-09-20 21:32:16

DockerLinux Names

2023-11-09 16:13:53

2020-07-20 18:30:44

Fedora 32DockerLinux

2024-01-04 11:50:00

UbuntuDocker

2012-04-28 08:43:12

CentOS

2013-09-03 10:10:00

人人網(wǎng)移動(dòng)開(kāi)發(fā)架構(gòu)

2017-03-01 09:20:30

2014-12-01 11:27:54

CentOS 7Docker

2016-11-08 09:02:07

UbuntuGrafanaDocker

2018-02-26 08:14:20

LinuxDocker容器

2017-02-16 10:15:43

Windows7docker變量
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)