1. 程式人生 > >【docker】Docker實戰

【docker】Docker實戰

Docker實戰系列文章,是自己在開發golang過程中對docker的業務應用的一個提煉和記錄。關於docker詳細原理的本系列文章將不會過多講述,本系列著重在實際應用上,並在操作過程中會講解部分難點。旨在讓讀者邊看邊操作,能在實現功能和解決問題中學會docker。
本人第一次寫系列文章,如果講解不正確和不清晰的地方歡迎指出。 – Razil
文章配套資源地址: https://github.com/DennisMao/docker

目標功能

  • 使用go語言實現基本http服務
    訪問 localhost:8080 時能夠返回 “hellodocker”
  • 將工程部署到docker,並在後臺啟動

環境介紹

docker:
dockerversion
golang:
goversion
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,阿里雲等,構建速度會需要較長時間

dockerbuild
出現Successfully build …
說明構成成功。

3 檢視docker映象
終端中輸入

docker images

dockerimages
裡面顯示了本機所有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

出現
dockerrun-detach
說明開啟成功。

我們可以檢視本機當前後臺正在開啟的容器有哪些
終端輸入

docker ps

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

即可

參考文章