㈠ 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程序。
㈡ docker在web開發中得使用流程是怎樣的
設想一個如下場景:
我們需要一個webapp,其功能是用戶注冊並將注冊信息插入到資料庫,環境為Ubuntu+Tomcat+Mysql,怎麼做?
不使用Docker的話,我們通常會這樣做,以Ubuntu為操作系統,然後安裝Tomcat和MySQL,最後把app部署上就可以了。那麼使用Docker會怎麼做呢,在這個場景下,可以有兩種方式:
1.仍然以Ubuntu為操作系統,然後構建一個安裝有MySQL和Tomcat的Docker鏡像,並把app部署到其中,最後啟動Docker鏡像就可以了。看起來好像和不使用Docker基本相同,甚至還要麻煩一些,是這樣嗎?別著急,繼續往下看。
2.第二種方式則體現了Docker的"每個容器只做一件事情"的思想,我們構建兩個鏡像,一個僅安裝Tomcat並部署我們的app,另一個僅安裝MySQL,然後啟動這兩個鏡像,得到兩個容器,再利用Docker的容器互聯技術將二者連接(Docker的容器是通過http連接的)。
㈢ 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——你需要知道的Docker進階知識五
Dockerfile 是一個文本文件,其中包含了構建 Docker 鏡像需要執行的命令序列。使用    docker build   命令從 Dockerfile 中讀取指令來構建鏡像。 
  
   構建鏡像時,該過程的第一件事是將    Dockerfile   文件所在目錄下的所有內容發送給 Docker 守護進程。所以大多數情況下,最好創建一個新的目錄,在其中保存   Dockerfile  ,以及構建鏡像所需的其它文件。Dockerfile 文件所在目錄也被稱為構建上下文(context)。 
  
   使用 FROM 指令指定一個基礎鏡像,後續指令將在此鏡像基礎上運行:  
  
   在 Dockerfile 中可以指定一個用戶,後續的    RUN  ,   CMD   以及   ENTRYPOINT   指令都會使用該用戶身份去執行,該用戶必須已存在。 
  
   除了指定用戶之外,還可以使用    WORKDIR   指定當前工作目錄(CWD),   RUN  ,   CMD  ,   COPY  ,   ADD   指令將在指定的工作目錄中執行。 
  
   RUN 指令用於執行命令,該指令有兩種形式:  
  
   例如我們執行更新命令:  
  
   CMD 的使用方式跟 RUN 類似,不過在一個 Dockerfile 文件中只能有一個 CMD 指令,如果有多個,則只有最後一個會生效。該指令指定了啟動容器時要執行的命令,例如:  
  
   可以在    docker run   時指定命令來覆蓋默認的 CMD 命令,比如   docker run image echo"hello shiyanlou"  。 
  
   CMD 指令還有一種特殊用法。在 Dockerfile 中,如果使用 ENTRYPOINT 指令指定了入口命令,則 CMD 指令的內容會作為 ENTRYPOINT 指令的參數:  
  
   ENTRYPOINT 指令會覆蓋 CMD 指令作為容器運行時的默認指令,並且該指令不會被    docker run   時指定的指令覆蓋,如下示例: 
  
   上述文件構建出來的鏡像,使用    docker run image   等同於   docker run image ls-a-l  。使用   docker run image-i-s   等同於   docker run image ls-a-i-s  。即 CMD 指令的值會被當作 ENTRYPOINT 指令的參數附加到 ENTRYPOINT 指令的後面,只有 CMD 指令可以被覆蓋。 
  
   COPY 和 ADD 都用於將構建上下文中的文件,目錄等復制到鏡像中。使用方式如下:  
  
   `` 可以指定多個,但是其路徑不能超出構建上下文范圍,即必須在 Dockerfile 同級或子目錄中。  
  
    不需要預先存在,不存在時會自動創建,如果使用相對路徑,則   為相對於工作目錄的路徑。塌陪 
  
   COPY 和 ADD 的不同之處在於,ADD 可伏衫或以添加遠程文件,並且 `` 可以是 gzip 或 tar 等格式的壓縮文件,添加時會自動進行解壓。  
  
   ENV 指令用於設置環境變數:  
  
   VOLUME 指令指定要創建的掛載路徑,在容器運行時,將為每個掛載路徑創建一個匿名卷並掛載上去:  
  
   上述指令將會在容器運行時,創建兩個匿名卷,並分別掛載到容器中的 /data1 和 /data2 路徑。  
    
   學習了上面這些常見的 Dockerfile 指令之後,可以使用這些指令來構建一個鏡像。如下所示,構建一個提供 ssh 服務的鏡像:  
  
   構建鏡像  
  
   查看鏡像  
  
   啟動容器  
  
   查看已經啟動的容器  
  
   測試遠程登錄  
  
   Compose 是運行由多個容器組成的    Docker   應用的工具,使用 Compose 可以一次啟動一組有關聯的服務,每個服務由來自同一鏡像的單個或多個容器組成。 
  
   在復雜應用中,應用一般由多個服務(service)組成,例如一個網站後台通常包含 Web 服務、資料庫服務、緩存缺伍服務、消息隊列服務等。  
  
   使用 Compose 的步驟如下:  
  
   目前有三種版本的 Compose 文件格式:  
  
   下載    docker-compose-Linux-x86_64   
  
   下載成功後,為了方便使用,可以將其添加到 PATH 路徑下  
  
   執行完成後,就能夠在終端下直接使用    docker-compose   命令了: 
  
   接下來我們將創建一個 Web 應用,該應用包含兩個容器:  
  
   項目目錄結構如下:  
  
   首先編輯    app/web/web.py   文件,寫入下面的內容: 
  
   上述代碼創建了一個簡單的 Web 應用。該應用會連接    redis   服務,在訪問   /   頁面時,自動將變數   number   加 1。 
  
   編輯    app/web/requirements.txt   文件,輸入如下內容: 
  
    requirements.txt   文件存放了 Web 應用依賴的第三方庫包的名稱和版本信息。 
  
   編輯    app/web/Dockerfile   文件,添加如下內容 
  
   上述    Dockerfile   定義了 Web 應用鏡像,該鏡像基於   python:2.7   基礎鏡像,在其基礎上安裝了應用依賴的庫包,並通過   CMD   指令指定了應用的啟動命令。 
  
   編輯    app/docker-compose.yml   文件: 
  
   該    docker-compose.yml   文件定義了兩個服務,分別為   web   和   redis   服務,並且配置了   web   服務的埠映射和掛載目錄。  depends_on   定義了依賴關系,被依賴的服會先啟動。 
  
   進入    app   目錄,執行   docker-compose up   命令來啟動應用: 
  
   啟動成功後,就可以打開網址    127.0.0.1:8001   來訪問 Web 應用了。 
  
   另外一些命令:
㈤ 如何使用Docker部署Go 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" 
}
