LoginSignup
4
3

More than 5 years have passed since last update.

用docker和golang做一个中文分词应用

Last updated at Posted at 2015-01-05

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

有用的docker文档

4
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3