【docker】Docker實戰
Docker實戰系列文章,是自己在開發golang過程中對docker的業務應用的一個提煉和記錄。關於docker詳細原理的本系列文章將不會過多講述,本系列著重在實際應用上,並在操作過程中會講解部分難點。旨在讓讀者邊看邊操作,能在實現功能和解決問題中學會docker。
本人第一次寫系列文章,如果講解不正確和不清晰的地方歡迎指出。 – Razil
文章配套資源地址: https://github.com/DennisMao/docker
目標功能
- 使用go語言實現基本http服務
訪問 localhost:8080 時能夠返回 “hellodocker” - 將工程部署到docker,並在後臺啟動
環境介紹
docker:
golang:
host(宿主機環境):
Mac os 10.12
重點難點
- dockerfile結構
- docker網路結構
操作步驟
Go工程
1 在本機新建go工程,目錄名為hellodocker
package main
import (
"fmt"
"net/http"
)
func indexHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "hello docker")
}
func main() {
http .HandleFunc("/", indexHandler)
http.ListenAndServe(":8080", nil)
}
2 編譯和執行
3 開啟瀏覽器輸入 localhost:8080
當螢幕出現 “hellodocker”說明程式正常
製作docker映象
1 在工程目錄hellodocker下,新建dockerfile檔案
FROM golang:latest
MAINTAINER Razil "raymond_2008@yahoo.com"
WORKDIR $GOPATH/src/hellodocker
ADD . $GOPATH/src/hellodocker
RUN go build .
EXPOSE 8080
ENTRYPOINT ["./hellodocker"]
FROM -> 母映象
MAINTAINER -> 維護者資訊
WORKDIR -> 工作目錄
ADD -> 將檔案複製到映象中
RUN -> 執行操作(就跟在終端執行語句一樣)
EXPOSE -> 暴露埠
ENTRYPOINT -> 程式入口
2 開啟終端輸入
docker build -t hellodocker .
語句的意思是
docker build ->構建映象
hellodocker -> 名字為hellodocker
. (點號) -> dockerfile目錄為當前目錄
如果未使用映象伺服器,比如Daccloud,阿里雲等,構建速度會需要較長時間
出現Successfully build …
說明構成成功。
3 檢視docker映象
在終端中輸入
docker images
裡面顯示了本機所有docker的映象與其基本資訊
4 開啟docker(前臺方式)
在終端輸入
docker run -p 8080:8080 hellodocker
語句意思:
docker run -> 執行docker映象
-p 8080:8080 -> 將宿主機(也就是本機)的8080埠對映到容器的8080埠,此 處需要先確認本機的8080埠並未被佔用,否則將無法開啟
hellodocker -> 映象名(也支援id)
5 開啟docker(後臺方式)
當在前臺開啟時候,終端無法進行其他操作,docker支援讓容器在後臺執行。
在終端輸入
docker run -p 8080:8080 -d hellodocker
出現
說明開啟成功。
我們可以檢視本機當前後臺正在開啟的容器有哪些
在終端輸入
docker ps
可以看到當前本機開啟了 hellodocker和redis容器
6 停止docker
停止和退出docker有兩種方法,一個是kill另一個是stop
兩種的區別是
stop :系統先發送停止訊號,有充分的時間(預設10s)完成清理後再發送kill訊號讓容器退出
kill : 系統直接傳送退出訊號,讓容器強制退出
具體操作:
我們在上一步 docker ps 中看到後臺容器的執行情況,裡面每個容器都有其獨立的container id。
複製需要關閉的容器id
當前hellodocker的id是
83f1e6dffbc2
在終端輸入
docker stop 83f1e6dffbc2
或
docker kill 83f1e6dffbc2
即可