❶ docker專項(六)利用docker Api提供web操作docker服務
在自動化部署的過程中,我們如果一直人為的輸入docker命令效率不高而且不好管理。那麼,我們可以使用docker提供的api來操作docker。
我們加入
docker對外的api就出來了
我們可以直接以web形式訪問
但是很明顯這樣子是不安全的,因為沒有許可權認證機制,我們可以通過常用的web框架間接操作docker
舉個例子
我們用goframe寫一個操作docker api的web服務
路由
goframe 控制器
操作docker服務類
跑起這個服務
訪問地址
❷ 如何使用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中部署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成功顯示測試頁如圖:
❺ 使用 OpenResty Docker 鏡像快速搭建 Web 伺服器
在日常工作中經常需要搭建 Web 伺服器和反向代理伺服器,用於測試和生產的情況都有。雖然用於測試的場景有很多便捷的方法,但是在向生產環境遷移時會導致有些工作不能復用。綜合看起來,還是用 Nginx 最為方便。本文嘗試提供一些配置模板。
需要提前了解的內容:
選擇 OpenResty 的原因:
OpenResty 默認安裝位置:
安裝目錄中 Nginx 相關文件:
默認服務指向 Web 文件夾 :
映射關系:
默認 配置文件 位置(後續的配置會覆蓋這里的內容):
在絕大多數情況,覆蓋上面的配置文件就可以了。
但是,這些配置文件的內容,只能是包含在 http 段內的配置,並不能作為完整的配置文件使用。
比如:
可以包含: upstream 、 server
不能包含: tcp
完整配置文件位置:
配置文件相關信息:
https://github.com/openresty/docker-openresty/blob/master/README.md#nginx-config-files
鏡像默認配置為到 /etc/nginx/conf.d/ 讀取配置,所以要把配置文件放到這里。其餘的掛載或埠映射根據需要進行。
假設需要建立如下服務:
(1)通過 http://localhost:20000/shared1/ 訪問 /tmp/webroot/shared1
(2)通過 http://localhost:20000/shared2/ 訪問 /tmp/webroot/myshare
(3)通過 http://localhost:20000// 訪問 http://www..com
配置文件:
啟動命令行:
詳情參考: docker-openresty - Docker tooling for OpenResty - Nginx Config Files
模擬為應用提供多級反向代理,查看訪問鏈路。簡單分為三部分:
使用 Docker Compose 來配置並串聯各容器,文件較多,訪問 GitHub 查看。
(完)
❻ Docker是什麼
Docker是世界領先的軟體容器平台。Docker使用Google公司推出的Go語言進行開發實現,基於Linux內核的cgroup,namespace,以及AUFS類的UnionFS等技術,對進程進行封裝隔離,屬於操作系統層面的虛擬化技術。 由於隔離的進程獨立於宿主和其它的隔離的進程,因此也稱其為容器,但docker本身並不是容器,它是創建容器的工具,是應用容器引擎。
Docke最初實現是基於LXC。LXC為Linux Container的簡寫。可以提供輕量級的虛擬化,以便隔離進程和資源,而且不需要提供指令解釋機制以及全虛擬化的其他復雜性。相當於C++中的NameSpace。容器有效地將由單個操作系統管理的資源劃分到孤立的組中,以更好地在孤立的組之間平衡有沖突的資源使用需求。
docker並不是LXC替代品,docker底層使用了LXC來實現,LXC將linux進程沙盒化,使得進程之間相互隔離,並且能夠課哦內閣制各進程的資源分配。在LXC的基礎之上,docker提供了一系列更強大的功能。
Docker能夠自動執行重復性任務,例如搭建和配置開發環境,從而解放了開發人員以便他們專注在真正重要的事情上:構建傑出的軟體。
用戶可以方便地創建和使用容器,把自己的應用放入容器。容器還可以進行版本管理、復制、分享、修改,就像管理普通的代碼一樣。
docker的三個概念:
鏡像(Image):類似於虛擬機中的鏡像,是一個包含有文件系統的面向Docker引擎的只讀模板。任何應用程序運行都需要環境,而鏡像就是用來提供這種運行環境的。例如一個Ubuntu鏡像就是一個包含Ubuntu操作系統環境的模板,同理在該鏡像上裝上Apache軟體,就可以稱為Apache鏡像。
容器(Container):類似於一個輕量級的沙盒,可以將其看作一個極簡的Linux系統環境(包括root許可權、進程空間、用戶空間和網路空間等),以及運行在其中的應用程序。Docker引擎利用容器來運行、隔離各個應用。容器是鏡像創建的應用實例,可以創建、啟動、停止、刪除容器,各個容器之間是是相互隔離的,互不影響。注意:鏡像本身是只讀的,容器從鏡像啟動時,Docker在鏡像的上層創建一個可寫層,鏡像本身不變。
倉庫(Repository):類似於代碼倉庫,這里是鏡像倉庫,是Docker用來集中存放鏡像文件的地方。注意與注冊伺服器(Registry)的區別:注冊伺服器是存放倉庫的地方,一般會有多個倉庫;而倉庫是存放鏡像的地方,一般每個倉庫存放一類鏡像,每個鏡像利用tag進行區分,比如Ubuntu倉庫存放有多個版本(12.04、14.04等)的Ubuntu鏡像。
docker的用途:
官方給的是bulid ship run,就是編譯、裝載、運行。就是實現了應用的封裝、部署、運行的生命周期管理只要在glibc的環境下,都可以運行。
諧雲自主研發的容器雲平台,是基於Docker和Kubernetes技術構建的一套完整IT標准化和自動化框架,以「面向終態、優化IT資源」為目標的新一代PaaS平台,能夠提高企業的IT管理能力,在降低運營成本和風險的同時,獲得更高的運維效率,保障業務穩定運行和高效迭代。
❼ docker在web開發中得使用流程是怎樣的
docker在web開發中得使用流程概述:
1、創建java鏡像:
把所有的文件都放置在docker目錄下,分別為不同的功能創建不同的目錄。
$ sudo mkdir docker/java
$ sudo cd docker/java
接下來在該目錄下創建一個jdk的Dockerfile文件,具體內容如下:
# openjdk 6
# version 1.0
FROM ubuntu:14.04
MAINTAINER mhy "[email protected]"
RUN apt-get update
RUN apt-get install -y -q openjdk-7-jdk
WORKDIR /
ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64
CMD ["/bin/bash"]
創建完Dockerfile之後來生成一個jdk的鏡像
$ sudo docker build -t pobaby/java .
以上已經實現了一個簡單的基於Docker容器運行的Java Web程序。