自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Docker上開發(fā)nodejs

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

Docker介紹

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

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

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

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

 

 

Docker的優(yōu)勢

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

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

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

我理解的Docker

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

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

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

Docker hub介紹

目前 Docker 官方維護了一個公共倉庫 Docker Hub,其中已經(jīng)包括了超過 15,000 的鏡像,大部分需求,都可以通過在 Docker Hub 中直接下載鏡像來實現(xiàn)。

登陸

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

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

下載

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

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

提交

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

先使用下載的鏡像啟動容器。

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

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

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

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

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

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

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

之后,可以使用新的鏡像來啟動容器

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

上傳

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

  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 命令來修改鏡像的標(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 來創(chuàng)建鏡像

使用 docker commit 來擴展一個鏡像比較簡單,但是不方便在一個團隊中分享。我們可以使用 docker build 來創(chuàng)建一個新的鏡像。為此,首先需要創(chuàng)建一個 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" ]  

編寫完成 Dockerfile 后可以使用 docker build 來生成鏡像。

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

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

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

注意一個鏡像不能超過 127 層

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

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

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

  1. docker pull mhart/alpine-node-auto 

2. 編寫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. 運行一個容器實例

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

5. 上傳鏡像(如果沒有登錄請登陸,使用login命令) 

  1. docker push zhanfang/alpine-koa2-startkit 

 

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

2014-07-29 10:35:21

DockerNodeJS

2014-08-25 12:14:02

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

2014-04-18 10:04:15

NodeJS前后端分離

2016-12-28 11:18:10

NodeJSJava開發(fā)者

2015-02-06 11:04:10

DockerAWS移動應(yīng)用開發(fā)測試

2016-08-04 13:44:20

CentOS6.xNodejs解決方案

2024-10-06 13:47:43

后端開發(fā)者項目

2011-06-15 18:38:17

Linux Qt Symbian

2020-07-20 18:30:44

Fedora 32DockerLinux

2024-01-04 11:50:00

UbuntuDocker

2016-09-20 21:32:16

DockerLinux Names

2022-06-28 15:04:32

容器Docker

2023-11-09 16:13:53

2017-03-01 09:20:30

2018-02-26 08:14:20

LinuxDocker容器

2017-02-16 10:15:43

Windows7docker變量

2016-11-08 09:02:07

UbuntuGrafanaDocker

2014-12-01 11:27:54

CentOS 7Docker

2012-04-28 08:43:12

CentOS

2013-09-03 10:10:00

人人網(wǎng)移動開發(fā)架構(gòu)
點贊
收藏

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