❶ 如何使用docker部署web應用
步驟一 - 創建Dockerfile
如下的Dockerfile可以滿足以上的要求:
**FROM** golang:1.6
*# Install beego and the bee dev tool*
**RUN** go get github.com/astaxie/beego && go get github.com/beego/bee
*# Expose the application on port 8080*
**EXPOSE** 8080
*# Set the entry point of the container to the bee command that runs the*
*# application and watches for changes*
**CMD** ["bee", "run"]
第一行,
FROM golang:1.6
將Go的官方映像文件作為基礎映像。該映像文件預安裝了 Go 1.6 . 該映像已經把 $GOPATH 的值設置到了 /go 。所有安裝在 /go/src 中的包將能夠被go命令訪問。
第二行,
RUN go get github.com/astaxie/beego && go get github.com/beego/bee
安裝 beego 包和 bee 工具。 beego 包將在應用程序中使用。 bee 工具用語在開發中再現地重新載入咱們的代碼。
第三行,
EXPOSE 8080
在開發主機上利用容器為應用程序開放8080埠。
最後一行,
CMD ["bee", "run"]
使用bee命令啟動應用程序的在線重新載入。
步驟二 - 構建image
一旦創建了Docker file,運行如下的命令來創建image:
docker build -t ma-image .
執行以上的命令將創建名為ma-image的image。該image現在可以用於使用該應用程序的任何人。這將確保這個團隊能夠使用一個統一的開發環境。
為了查看自己的系統上的image列表,運行如下的命令:
docker images
這行該命令將輸出與以下類似的內容:
REPOSITORY TAG IMAGE ID CREATED SIZE
ma-image latest 8d53aa0dd0cb 31 seconds ago 784.7 MB
golang 1.6 22a6ecf1f7cc 5 days ago 743.9 MB
注意image的確切名字和編號可能不同,但是,應該至少看到列表中有 golang 和 ma-image image。
步驟三 - 運行容器
一旦 ma-image 已經完成,可以使用以下的命令啟動一個容器:
docker run -it --rm --name ma-instance -p 8080:8080 \
-v /app/MathApp:/go/src/MathApp -w /go/src/MathApp ma-image
讓咱們分析一下上面的命令來看看它做了什麼。
。docker run命令用於從一個image上啟動一個容器
。-it 標簽以交互的方式啟動容器
。--rm 標簽在容器關閉後將會將其清除
。--name ma-instance 將容器命名為ma-instance
。-p 8080:8080 標簽允許通過8080埠訪問該容器
。-v /app/MathApp:/go/src/MathApp更復雜一些。它將主機的/app/MathApp映射到容器中的/go/src/MathApp。這將使得開發文件在容器的內部和外部都可以訪問。
。ma-image 部分聲明了用於容器的image。
執行以上的命令將啟動Docker容器。該容器為自己的應用程序開發了8080埠。無論何時做了變更,它都將自動地重構自己的應用程序。自己將在console(控制台)上看到以下的輸出:
bee :1.4.1
beego :1.6.1
Go :go version go1.6 linux/amd64
2016/04/10 13:04:15 [INFO] Uses 'MathApp' as 'appname'
2016/04/10 13:04:15 [INFO] Initializing watcher...
2016/04/10 13:04:15 [TRAC] Directory(/go/src/MathApp)
2016/04/10 13:04:15 [INFO] Start building...
2016/04/10 13:04:18 [SUCC] Build was successful
2016/04/10 13:04:18 [INFO] Restarting MathApp ...
2016/04/10 13:04:18 [INFO] ./MathApp is running...
2016/04/10 13:04:18 [asm_amd64.s:1998][I] http server Running on :8080
❷ 項目為什麼用docker
回答之前,先反問一個問題:為什麼不用Docker呢?
Docker出現之前,有現在還在用的VMWare虛擬機,有Ghost,部分解決了伺服器安裝配置的瑣碎工作,但是沒有解決運行環境的問題。比如常見的環境不一致的問題:開發環境能運行,測試生產環境有bug?還有就是每次新伺服器、新環境搭建時無窮無盡的問題。
那麼Docker出現後,整個環境被打包起來,也就是將所有安裝配置代碼化自動化了,結合資源編排和雲服務,可以秒啟一個集群化的web服務系統,如果沒有容器技術是做不到的。Docker是使用最普遍的容器技術,事實上的容器技術標准。
推薦看一個Docker秒啟Web服務的視頻:https://www.ixigua.com/i6799872807397229068/
我可以舉幾個例子,就可理解為什麼要用docker?
用傳統的方式上線一個WEB項目,我們的一般做法是在線上伺服器中,安裝WEB伺服器,然後裝好資料庫,裝好其他需要的軟體最後把本地己打包好的代碼上傳至伺服器,然後重啟就好了。
如果一台伺服器上要部署多個項目,每個項目之間無論是在資源的使用,還是之間的沖突。都會讓人崩潰。更別提有不同的開發語言和開發團隊。
現在我們有docker ,可以用docker把應用直接打包封裝到一個容器中。容器之間有著進程之間的隔離,在容器中操作不會影響到其他容器的使用。
以前開發一套應用,必須開發機上安裝環境,測試機上安裝環境,然後部署的伺服器上安裝環境,而且由於使用的機器不是同樣的操作系統,所以有時會出現在本機上沒問題,測試時有出問題,甚至開發測試都沒問題,一上線就BUG滿滿。估計大家遇到過與測試之間撕B的場景。
用上docker,無論是在開發機,測試機,生產環境以容器運行,使應用在三種環境下保持一致。
對比虛擬機,docker佔用資源更小。而且可以提高伺服器的資源利用率。
Docker可以將復雜的應用程序運行環境部署打包,這樣就避免開發人員或者運維人員反復部署相同的應用程序運行環境。在如今雲計算盛行的情況下,分布式應用和管理變得簡單了。基本上雲計算服務平台都提供了現成的群集計算服務,這些群集服務無一例外都是基於docker鏡像構建的。群集應用的要求就是每個節點的應用程序版本以及環境要一致,一個docker鏡像就是一個虛擬主機,只要放到容器中即可實現單機獨立運行的效果,大大簡化了分布式群集應用的實現過程
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然後發布到任何流行的Linux或Windows 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面。
雲計算、大數據,移動技術的快速發展,加之企業業務需求的不斷變化,導致企業架構要隨時更改以適合業務需求,跟上技術更新的步伐。毫無疑問,這些重擔都將壓在企業開發人員身上;團隊之間如何高效協調,快速交付產品,快速部署應用,以及滿足企業業務需求,是開發人員亟需解決的問題。Docker技術恰好可以幫助開發人員解決這些問題。
為了解決開發人員和運維人員之間的協作關系,加快應用交付速度,越來越多的企業引入了DevOps這一概念。但是,傳統的開發過程中,開發、測試、運維是三個獨立運作的團隊,團隊之間溝通不暢,開發運維之間沖突時有發生,導致協作效率低下,產品交付延遲, 影響了企業的業務運行。Docker技術將應用以集裝箱的方式打包交付,使應用在不同的團隊中共享,通過鏡像的方式應用可以部署於任何環境中。這樣避免了各團隊之間的協作問題的出現,成為企業實現DevOps目標的重要工具。以容器方式交付的Docker技術支持不斷地開發迭代,大大提升了產品開發和交付速度。
此外,與通過Hypervisor把底層設備虛擬化的虛擬機不同,Docker直接移植於Linux內核之上,通過運行Linux進程將底層設備虛擬隔離,這樣系統性能的損耗也要比虛擬機低的多,幾乎可以忽略。同時,Docker應用容器的啟停非常高效,可以支持大規模的分布系統的水平擴展,真正給企業開發帶來福音。
Docker很大程度上解決了上述問題,提高開發和運維的工作效率,提高企業的工作效率。
任何一項新技術的出現,都需要一個發展過程,比如雲計算為企業所接受用了將近五年左右時間,OpenStack技術也經歷了兩、三年才受到人們的認可。因此,雖然Docker技術發展很快,但技術還不夠成熟,對存儲的靈活的支持、網路的開銷和兼容性方面還存在限制,這是Docker沒有被企業大范圍使用的一個主要原因。另外一個原因是企業文化是否與DevOps運動一致,只有企業支持DevOps,才能更大地發揮Docker的價值。最後一個原因就是安全性問題,Docker對於Linux這一層的安全的隔離還有待改進,才能進一步得到企業的認可。
當伺服器運行多個應用程序時,為了防止應用程序之間所需的環境依賴產生沖突或誤操作影響,所以需要做好隔離,最大限度利用伺服器資源環境,docker就把它變成了一個個沙盒。沙盒與沙盒之間互不影響
這是一個容器,為了防止一個項目的程序運行異常影響其他項目程序的正常運行,可以理解為隔離不同項目的程序,簡單來說類似於一個虛擬的盒子或系統,裡面運行獨立的項目程序,共享系統底層資源。
docker跟項目有什麼關系,運維玩就行了
❸ 如何使用Docker快速部署go-web應用程序
大部分Go應用程序可以編譯為一個單一的二進制文件。都是對於Web應用程序來說,可能還有自己的模板和配置文件。如果在一個項目中包含大量的文件,可能會因為文件的不同步而導致出錯或造成更嚴重的錯誤。
本文將通過beego應用程序在docker中的快速部署,來介紹如何使用docker簡化go-web應用程序的部署。通過該文章您可以了解如何使用Docker部署Go Web應用程序,以及Docker如何幫您改善開發工作流和部署過程
❹ 如何使用 Docker 部署容器
設想,為了推出一個網站,您不必從裸機安裝一個完整的伺服器。 而不是安裝操作系統,然後安裝伺服器軟體,然後部署精心設計的應用程序或站點,您可以簡單地在一個獨立的包中開發所有內容,並使用單個命令將其推出。
這是使用容器的眾多好處之一。它們使開發和部署周期變得異常高效。但是你如何部署這些容器?我想在這里指導你完成這個過程。我們將專注於在Ubuntu Server 18.04上部署基本的NGINX Web伺服器作為容器。所有這一切都將在Docker的幫助下完成。
為了成功將NGINX部署為容器,您需要具備以下條件:
- 一個安裝了Docker的Ubuntu Server 18.04的運行實例。
- 一個docker 用戶組的成員用戶
是的,有了這兩部分,你就准備好了。
您部署的每個容器都將基於從DockerHub中提取的鏡像。 您可以下拉單個鏡像並根據需要隨時使用。 DockerHub上還有許多鏡像用於單個應用程序或平台。 以NGINX為例。 如果你在DockerHub上搜索NGINX,你會得到大約56,172個條目。 這並不意味著每個條目都是您可以使用的可用圖像。
圖像命名如下:
例如,對於NGINX,您可能會找到一個名字為的鏡像:
或許你可能找到:
您也看到了,有幾乎所有需要的鏡像。
在使用圖像之前,必須將其保存在本地驅動器上。 有兩種方法可以做到這一點:
- 直接使用pull命令
- 間接地,在容器部署過程中。
要從DockerHub中拉取圖像,您將打開一個終端窗口並發出命令:
如果你想拉取Ingress圖像,該命令是:
當你拉取你需要的圖像之後,你可以使用命令確認是否存在:
上面的命令將列出你拉取的所有鏡像(圖A)。
拉取隨意圖像時要謹慎。 為什麼? 因為你永遠不知道創造它們的原因。 容器可能包含惡意代碼,可能會對您的網路或數據造成嚴重破壞。 因此,最好只使用官方圖像(例如NGINX圖像)。
現在該部署容器了, 如果您尚未拉取鏡像,則在部署階段將下拉所需要的鏡像。 由於我們拉取官方NGINX圖像,我們將使用它。
要部署容器,請使用docker命令,如下所示:
備註:
- NAME等於您要為容器提供的名稱(這可以是任何內容,例如nginx-webserver)。
- PORTS您要使用的埠(以NETWORK PORT:CONTAINER PORT形式)。
- IMAGE用於容器的圖像(例如nginx)。
因此,部署NGINX容器的基本命令是:
容器將要部署,NGINX Web伺服器將在埠80上可用於本地網路。但是,如果已在伺服器上使用埠80來部署容器,該怎麼辦? 您可以將其部署在網路埠8080上,如下所示:
此時,您可能會看到下一個問題。 運行上述命令之一後,不返回bash提示符(圖B)。
你如何運行一個容器,並獲得你的bash提示? 為此,您必須以分離模式運行容器。 在此之前,您必須使用鍵盤組合[Ctrl] +終止當前容器。 該組合將返回提示並殺死容器。
要確定容器是否運行,使用命令:
將列出所有容器及其狀態(圖C)。
如果容器仍在運行,我們必須在同一埠部署另一個容器之前將其終止(否則埠會發生沖突,從而阻止容器部署)。 要殺死正在運行的容器,首先需要Container ID(隨機字元串)。 發出docker ps -a命令時會顯示此字元串。 要終止正在運行的容器,使用命令:
其中CONTAINER_ID是相關容器的ID。
然後,您可以使用以下命令刪除容器:
其中CONTAINER_ID是相關容器的ID。
請注意,您不必輸入完整的Container ID,字元串的前四個字元就足夠了。
現在,要以分離模式部署容器,命令是:
這次你不僅會得到你的提示,而且Docker會為你顯示容器ID(圖D)。
如果你想在正在運行的容器上工作怎麼辦? 假設您想對NGINX進行更改甚至開始開發它將顯示的網站? 因此,您必須訪問容器。 因此,您需要Container ID。 使用ID,發出命令:
其中CONTAINER_ID是容器的ID。
您現在應該處於運行容器提示符(圖E)中,您可以在其中開始處理NGINX伺服器。
要退出容器,只需鍵入命令exit。
七、比你想像的容易
希望到現在為止,您看到容器部署並不像您想像的那樣具有挑戰性。 在Docker的幫助下,您可以在幾分鍾內推出專業版的應用和服務。
原文鏈接:
❺ 用eclipse開發web項目如何打包docker的tar部署給linux伺服器
這個需要了解一下dockerfile的製作,製作自己的鏡像,並不是直接使用工具之類的進行打包,需要編寫構建。在dockerfile構建好之後,再編寫docker-compose的yaml文件,前提還是得有自己的鏡像倉庫。
將自己做好的docker鏡像push到私有鏡像倉庫(確保鏡像是正確且可用的),在新的環境里,只需要搭建一下docker環境,直接使用docker-compose up docker-compose的yaml文件,即可直接搭建好你的項目。
再向上延伸一點的話,就可以了解了解K8S。
❻ 如何在docker中部署web應用
需要在當前目錄下建立如下三個文件。
1).gitignore
node_moles/*
2)package.json
{
"name": "docker-centos-hello",
"private": true,
"version": "0.0.1",
"description": "Node.js Hello world app on CentOS using docker",
"author": "Daniel Gasienica <[email protected]>",
"dependencies": {
"express": "3.2.4"
}
}
3)server.js
var express = require('express'),
app = express(),
redis = require('redis'),
RedisStore = require('connect-redis')(express),
server = require('http').createServer(app);
app.configure(function() {
app.use(express.cookieParser('keyboard-cat'));
app.use(express.session({
store: new RedisStore({
host: process.env.REDIS_HOST || 'localhost',
port: process.env.REDIS_PORT || 6379,
db: process.env.REDIS_DB || 0
}),
cookie: {
expires: false,
maxAge: 30 * 24 * 60 * 60 * 1000
}
}));
});
app.get('/', function(req, res) {
res.json({
status: "ok"
});
});
var port = process.env.HTTP_PORT || 3000;
server.listen(port);
console.log('Listening on port ' + port);
配置Dockerfile
我們需要通過Dockerfile來配置我們的docker鏡像。
FROM ubuntu:14.04
MAINTAINER zengjinlong <[email protected]>
RUN apt-get update
#Install Redis
RUN apt-get -y -qq install python redis-server
RUN apt-get -y -qq install wget
#Install Node
RUN cd /opt && \
wget http://nodejs.org/dist/v0.10.33/node-v0.10.33-linux-x64.tar.gz && \
tar -xzf node-v0.10.33-linux-x64.tar.gz && \
mv node-v0.10.33-linux-x64 node && \
cd /usr/local/bin && \
ln -s /opt/node/bin/* . && \
rm -f /opt/node-v0.10.33-linux-x64.tar.gz
#Set the working directory
WORKDIR /src
j
CMD ["/bin/bash"]
有了Dockerfile之後,就可以通過docker build來建立我們的鏡像。
docker build -t minimicall/node_web:0.1 .
這里需要說明的是,你需要靈活的根據你的ubuntu真實的環境來變化中間的指令。例如,當我們第一次執行的時候,告訴我找不到python redis-server,我想應該是我的apt 源太out了,所以,我加了RUN apt-get update.就解決了這個問題。
當我wget的時候,說沒有這個指令,那麼我就得安裝wget.而nodejs的地址,也是我去從nodejs的官網查找的。所以碰到問題,具體問題具體分析。
查看我們建立的鏡像。
micall@micall-ThinkPad:~/docker/nodejs_web_app$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
minimicall/node_web 0.1 730770dff17f 6 minutes ago 268.7 MB
centos centos6 70441cac1ed5 2 weeks ago 215.8 MB
ubuntu 14.04 5506de2b643b 4 weeks ago 199.3 MB
啟動我們的鏡像:
sudo docker run -i -t --rm \
> -p 3000:3000 \
> -v `pwd`:/src \
> minimicall/node_web:0.1
這時候我們已經進入到了這個鏡像啟動的容器裡面了。
root@d80a2ed6b4c0:/src#
執行下列命令
root@d80a2ed6b4c0:/src# npm install --quiet > /dev/null
npm WARN engine [email protected]: wanted: {"node":"<0.9.0"} (current: {"node":"0.10.33","npm":"1.4.28"})
root@d80a2ed6b4c0:/src# npm install -g nodemon --quiet > /dev/null
root@d80a2ed6b4c0:/src# ls
Dockerfile Dockerfile~ index.js~ package.json server.js src
Dockerfile.centos index.js node_moles package.json~ server.js~
root@d80a2ed6b4c0:/src# nodemon server.js
22 Nov 14:37:31 - [nodemon] v1.2.1
22 Nov 14:37:31 - [nodemon] to restart at any time, enter `rs`
22 Nov 14:37:31 - [nodemon] watching: *.*
22 Nov 14:37:31 - [nodemon] starting `node server.js`
Listening on port 3000
這個時候用瀏覽器打開:http://localhost:3000/,會的到如下結果。
{
"status": "ok"
}
❼ Docker部署WEB 應用
1、環境:阿里雲伺服器
2、CentOS7系統
3、Docker成功部署
這里前提docker 已經成功部署啦,現有有一個簡單的測試案例,在docker上部署一個應用從而訪問web。
接下來讓我們嘗試使用 docker 構建一個 web 應用程序。
我們將在docker容器中運行一個 Python Flask 應用來運行一個web應用。
通過 -p 參數來設置一樣的埠:
docker ps 查看正在運行的容器
容器內部的 5000 埠映射到我們本地主機的 5000 埠上。
這時我們可以通過瀏覽器訪問WEB應用
發現 訪問失敗
指定外網埠為5000,
1. 本地測試能否打開測試頁
本地沒有問題。
2. 瀏覽器中訪問
在任意一台電腦上輸入公網IP+埠號 (此埠號為運行WEB應用時指定的埠號5000) 如我的阿里雲公網IP為123.11.11.11 此時在任意一台有網路的瀏覽器地址欄輸入公網IP:http://123.11.11.11:5000 應該會出現測試頁
但現在出現如下圖所示:
顯示打不開
查啦大量資料,以前曾經也解決過,一定弄明白自已購買的地區後,再去設置安全組的配置規則。
***1. 登錄阿里雲管理控制台****
2.找到雲伺服器ECS-概覽
5. 手動添加埠5000
6. 最後保存,再從瀏覽器地址欄輸入公網IP加埠號5000成功顯示測試頁如圖:
❽ 部署 Docker Registry WebUI
私服安裝成功後就可以使用 docker 命令行工具對 registry 做各種操作了。然而不太方便的地方是不能直觀的查看 registry 中的資源情況。如果可以使用 UI 工具管理鏡像就更好了。這里介紹兩個 Docker Registry WebUI 工具
兩個工具的功能和界面都差不多,我們以 docker-registry-fontend 為例講解
我們使用 docker-compose 來安裝和運行, docker-compose.yml 配置如下:
運行成功後在瀏覽器訪問:http://192.168.75.133:5000