摘要:中每一條指令都創(chuàng)建鏡像的一層,例如編寫完成后可以使用來生成鏡像。注意一個鏡像不能超過層完成一次鏡像的下載修改和上傳以鏡像為基礎(chǔ)下載基礎(chǔ)鏡像編寫創(chuàng)建新的鏡像打上的運(yùn)行一個容器實例上傳鏡像如果沒有登錄請登陸,使用命令
Docker介紹參考 https://yeasy.gitbooks.io/doc...
Docker 是一個開源項目,誕生于 2013 年初,最初是 dotCloud 公司內(nèi)部的一個業(yè)余項目。它基于 Google 公司推出的 Go 語言實現(xiàn)。 項目后來加入了 Linux 基金會,遵從了 Apache 2.0 協(xié)議,項目代碼在 GitHub上進(jìn)行維護(hù)。
Docker 項目的目標(biāo)是實現(xiàn)輕量級的操作系統(tǒng)虛擬化解決方案。 Docker 的基礎(chǔ)是 Linux 容器(LXC)等技術(shù)。
在 LXC 的基礎(chǔ)上 Docker 進(jìn)行了進(jìn)一步的封裝,讓用戶不需要去關(guān)心容器的管理,使得操作更為簡便。用戶操作 Docker 的容器就像操作一個快速輕量級的虛擬機(jī)一樣簡單。
下面的圖片比較了 Docker 和傳統(tǒng)虛擬化方式的不同之處,可見容器是在操作系統(tǒng)層面上實現(xiàn)虛擬化,直接復(fù)用本地主機(jī)的操作系統(tǒng),而傳統(tǒng)方式則是在硬件層面實現(xiàn)。
作為一種新興的虛擬化方式,Docker 跟傳統(tǒng)的虛擬化方式相比具有眾多的優(yōu)勢。
首先,Docker 容器的啟動可以在秒級實現(xiàn),這相比傳統(tǒng)的虛擬機(jī)方式要快得多。 其次,Docker 對系統(tǒng)資源的利用率很高,一臺主機(jī)上可以同時運(yùn)行數(shù)千個 Docker 容器。
容器除了運(yùn)行其中應(yīng)用外,基本不消耗額外的系統(tǒng)資源,使得應(yīng)用的性能很高,同時系統(tǒng)的開銷盡量小。傳統(tǒng)虛擬機(jī)方式運(yùn)行 10 個不同的應(yīng)用就要起 10 個虛擬機(jī),而Docker 只需要啟動 10 個隔離的應(yīng)用即可。
我理解的Docker目前,我在使用docker的過程中基本上是本地開發(fā)好項目之后,生成dist文件目錄,遷移到docker當(dāng)中,相當(dāng)于只在生產(chǎn)環(huán)境開發(fā)使用docker,原因主要有以下幾點(diǎn):
在開發(fā)環(huán)境使用docker感覺還是不是很舒服,每次修改都要重新build,以及run,比較麻煩,本地開發(fā)更加舒服;
docker實際上可以看做是一個封閉的盒子,想做一些查看和操作還是有點(diǎn)麻煩的的,交互性不是很好,感覺比較適合生產(chǎn)環(huán)境。
Docker hub介紹登陸目前 Docker 官方維護(hù)了一個公共倉庫 Docker Hub,其中已經(jīng)包括了超過 15,000 的鏡像,大部分需求,都可以通過在 Docker Hub 中直接下載鏡像來實現(xiàn)。
可以通過執(zhí)行 docker login 命令來輸入用戶名、密碼和郵箱來完成注冊和登錄。 注冊成功后,本地用戶目錄的 .dockercfg 中將保存用戶的認(rèn)證信息。
docker login --username=username [email protected]下載
根據(jù)是否是官方提供,可將鏡像資源分為兩類。 一種是類似 centos 這樣的基礎(chǔ)鏡像,被稱為基礎(chǔ)或根鏡像。這些基礎(chǔ)鏡像是由 Docker 公司創(chuàng)建、驗證、支持、提供。這樣的鏡像往往使用單個單詞作為名字。 還有一種類型,比如 tianon/centos 鏡像,它是由 Docker 的用戶創(chuàng)建并維護(hù)的,往往帶有用戶名稱前綴。可以通過前綴 user_name/ 來指定使用某個用戶提供的鏡像,比如 tianon 用戶。
docker pull apline // or docker pull mhart/alpine-node-auto提交
修改當(dāng)前鏡像之后需要提交修改后的鏡像,修改一次鏡像包括提交的過程如下:
先使用下載的鏡像啟動容器。
docker run -t -i training/sinatra /bin/bash root@0b2616b0e5a8:/#
注意:記住容器的 ID,稍后還會用到。
在容器中添加 json package(一個 ruby gem)。
root@0b2616b0e5a8:/# gem install json
當(dāng)結(jié)束后,我們使用 exit 來退出,現(xiàn)在我們的容器已經(jīng)被我們改變了,使用 docker commit 命令來提交更新后的副本。
docker commit -m "Added json gem" -a "Docker Newbee" 0b2616b0e5a8 ouruser/sinatra:v2 4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c
其中,-m 來指定提交的說明信息,跟我們使用的版本控制工具一樣;-a 可以指定更新的用戶信息;之后是用來創(chuàng)建鏡像的容器的 ID;最后指定目標(biāo)鏡像的倉庫名和 tag 信息。創(chuàng)建成功后會返回這個鏡像的 ID 信息。
使用 docker images 來查看新創(chuàng)建的鏡像。
之后,可以使用新的鏡像來啟動容器
$ docker run -t -i ouruser/sinatra:v2 /bin/bash root@78e82f680994:/#上傳
用戶可以通過 docker push 命令,把自己創(chuàng)建的鏡像上傳到倉庫中來共享。例如,用戶在 Docker Hub 上完成注冊后,可以推送自己的鏡像到倉庫中。
$ docker push ouruser/sinatra The push refers to a repository [ouruser/sinatra] (len: 1) Sending image list Pushing repository ouruser/sinatra (3 tags)修改鏡像的標(biāo)簽
用 docker tag 命令來修改鏡像的標(biāo)簽。
$ sudo docker tag 5db5f8471261 ouruser/sinatra:devel $ sudo docker images ouruser/sinatra REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ouruser/sinatra latest 5db5f8471261 11 hours ago 446.7 MB ouruser/sinatra devel 5db5f8471261 11 hours ago 446.7 MB ouruser/sinatra v2 5db5f8471261 11 hours ago 446.7 MB利用 Dockerfile 來創(chuàng)建鏡像
使用 docker commit 來擴(kuò)展一個鏡像比較簡單,但是不方便在一個團(tuán)隊中分享。我們可以使用 docker build 來創(chuàng)建一個新的鏡像。為此,首先需要創(chuàng)建一個 Dockerfile,包含一些如何創(chuàng)建鏡像的指令。
Dockerfile 中每一條指令都創(chuàng)建鏡像的一層,例如:
# Dockerfile.alpine FROM mhart/alpine-node:latest MAINTAINER zhanfang "[email protected]" # If you have native dependencies, you"ll need extra tools # RUN apk add --no-cache make gcc g++ python # Create app directory RUN mkdir -p /usr/src/app WORKDIR /usr/src/app # If your project depends on many package, you can use cnpm instead of npm # RUN npm install cnpm -g --registry=https://registry.npm.taobao.org # Install app dependencies COPY package.json /usr/src/app/ RUN npm install --registry=https://registry.npm.taobao.org # Bundle app source COPY . /usr/src/app # Expose port EXPOSE 3000 CMD [ "npm", "start" ]
編寫完成 Dockerfile 后可以使用 docker build 來生成鏡像。
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ǔ)
下載基礎(chǔ)鏡像
docker pull mhart/alpine-node-auto
編寫dockerfile
# Dockerfile.alpine FROM mhart/alpine-node:latest MAINTAINER zhanfang "[email protected]" # If you have native dependencies, you"ll need extra tools # RUN apk add --no-cache make gcc g++ python # Create app directory RUN mkdir -p /usr/src/app WORKDIR /usr/src/app # If your project depends on many package, you can use cnpm instead of npm # RUN npm install cnpm -g --registry=https://registry.npm.taobao.org # Install app dependencies COPY package.json /usr/src/app/ RUN npm install --registry=https://registry.npm.taobao.org # Bundle app source COPY . /usr/src/app # Expose port EXPOSE 3000 CMD [ "npm", "start" ]
創(chuàng)建新的鏡像
docker build -t=zhanfang/alpine-koa2-startkit:v1" .
打上 alpine-koa2-startkit:v1 的 tag
運(yùn)行一個容器實例
docker run -t -i --name alpine-koa2-application zhanfang/alpine-koa2-startkit:v2
上傳鏡像(如果沒有登錄請登陸,使用login命令)
docker push zhanfang/alpine-koa2-startkit
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/26739.html
摘要:開始在下部署開發(fā)環(huán)境著實遍地坑,每遇到一個問題都要去原因再試圖解決。該鏡像就是已經(jīng)安裝了環(huán)境的鏡像命名為。在下,期望運(yùn)行應(yīng)用的容器中,同樣可以執(zhí)行該命令。 開始 在windows下部署nodejs開發(fā)環(huán)境著實遍地坑,每遇到一個問題都要去google原因再試圖解決。而且如果你想把你寫好的應(yīng)用交給別人跑跑看,他可能同樣需要折騰很久才能真正在他的環(huán)境下運(yùn)行起來。被坑了好些時日最終還是放棄,轉(zhuǎn)...
摘要:開始在下部署開發(fā)環(huán)境著實遍地坑,每遇到一個問題都要去原因再試圖解決。該鏡像就是已經(jīng)安裝了環(huán)境的鏡像命名為。在下,期望運(yùn)行應(yīng)用的容器中,同樣可以執(zhí)行該命令。 開始 在windows下部署nodejs開發(fā)環(huán)境著實遍地坑,每遇到一個問題都要去google原因再試圖解決。而且如果你想把你寫好的應(yīng)用交給別人跑跑看,他可能同樣需要折騰很久才能真正在他的環(huán)境下運(yùn)行起來。被坑了好些時日最終還是放棄,轉(zhuǎn)...
摘要:在十二贊的深度應(yīng)用我們是十二贊,一個致力于幫助電商賣家進(jìn)入小程序的小團(tuán)隊,我們的主頁是。我們的整個業(yè)務(wù)構(gòu)建于阿里云之上,有臺每一對都有獨(dú)立的外網(wǎng)同時也在同一個內(nèi)網(wǎng)之中。,我們把所有的文件都挪到阿里云的服務(wù)上。當(dāng)然,也是可執(zhí)行文件發(fā)布的。 Golang 在十二贊的深度應(yīng)用 我們是十二贊,一個致力于幫助電商賣家進(jìn)入小程序的小團(tuán)隊,我們的主頁是http://www.12zan.cn/。在實際...
摘要:接下來我們將逐步的減少這個鏡像的體積。優(yōu)化生產(chǎn)環(huán)境鏡像使用鏡像大幅減小鏡像體積的最簡單和最快的方法是選擇一個小得多的基本鏡像。使用多階段構(gòu)建可以充分利用鏡像的緩存,大大減少最終部署到生產(chǎn)環(huán)境的時間。 關(guān)注作者github每日一道面試題詳解 你討厭部署你的應(yīng)用程序花費(fèi)很長時間嗎? 對于單個容器來說,超過gb并不是最佳實踐。每次部署新版本時都要處理數(shù)十億字節(jié),這對我們來說并不太合適。 本文...
閱讀 3372·2021-11-04 16:10
閱讀 3871·2021-09-29 09:43
閱讀 2707·2021-09-24 10:24
閱讀 3371·2021-09-01 10:46
閱讀 2519·2019-08-30 15:54
閱讀 602·2019-08-30 13:19
閱讀 3245·2019-08-29 17:19
閱讀 1066·2019-08-29 16:40