Docker
什么是docker?https://www.docker.com/
Docker - An open platform for distributed applications for developers and sysadmins.
Docker 对于开发人员
之前的麻烦
1. 软件安装麻烦
2. 可移植性差
3. 隔离性差
4. 虚拟机笨重
现在
1. Docker是轻量的 (接近原生app的性能)
2. 建立app很简单 (就是简单的pull image)
3. 不同的app之间完全隔离
4. 标准化(os, 到语言)
实作
中文分词
例子
package main
import (
"fmt"
"github.com/raquelken/gommseg"
"strings"
)
func main() {
text := "枯藤老树昏鸦 小桥流水人家 古道西风瘦马 夕阳西下 断肠人在天涯"
texts := strings.Split(text, " ")
for _, t := range texts {
words := gommseg.Ana.Cut(t)
for _, word := range words {
fmt.Println(word)
}
}
}
/*
枯
藤
老树
昏
鸦
小桥流水
人家
古道
西风
瘦马
夕阳西下
断肠
人在天涯
*/
编写完整的docker应用
中文分词API
package main
import (
"encoding/json"
"fmt"
"github.com/raquelken/gommseg"
"log"
"net/http"
)
func tokenizeHandler(w http.ResponseWriter, r *http.Request) {
text := r.URL.Query().Get("t")
words := gommseg.Ana.Cut(text)
b, err := json.Marshal(words)
if err != nil {
log.Fatal(err)
}
w.Header().Set("Content-type", "application/json; charset=utf-8")
fmt.Fprintf(w, string(b))
}
func main() {
http.HandleFunc("/tokenize", tokenizeHandler)
http.ListenAndServe(":8080", nil)
}
/*
go run app.go
curl http://localhost:8080/tokenize?t=菱形图案圆领针织衫
["菱形","图案","圆领","针织衫"]
*/
Dockerfile
From google/golang
# go get all of the dependancies
RUN go get github.com/raquelken/gommseg
COPY app.go /
#RUN go build app.go
EXPOSE 8080
CMD go run app.go
build docker image
docker build -t="mmseg_app" .
run app
docker run -i -t -c 1024 -p 40080:8080 mmseg_app
curl http://localhost:40080/tokenize?t=菱形图案圆领针织衫
// ["菱形","图案","圆领","针织衫"]
帮助
docker COMMAND --help
docker run --help
有用的命令
docker ps -l // check docker proccess
docker rm container // rm container
docker rmi image // rm image
docker images // check images
docker stop $(docker ps -a -q) // stop all containers
docker rm $(docker ps -a -q) // rm all containers