美文网首页
优雅的使用Docker部署Restful Server

优雅的使用Docker部署Restful Server

作者: iccccing | 来源:发表于2017-10-10 07:48 被阅读0次

    Use Docker Deploy WebServer

    本文解决如下问题

    • 问题1,如何通过docker启动命令直接运行容器里的webserver
    • 问题2,对于问题1,如何后台运行
    • 问题3,运行后如何查看终端输出的日志

    通过docker启动命令直接运行容器里的webserver

    首先看看docker run的帮助文档

    $ docker run --help
    
    Usage:  docker run [OPTIONS] IMAGE COMMAND [ARG...]
    

    这里有一个参数是COMMAND,是在启动容器的时候要执行的命令,这个命令是在容器里运行的

    这个COMMAND参数也可以不在命令行里写,可以直接写在Dockerfile里

    # 如下内容写到Dockerfile的最后一行
    CMD ["sh", "/root/app/start.sh"]
    

    使用如下docker命令直接运行容器里的webserver

    $ docker run -it -name=CONTAINER_NAME -v /YOUR_DIR/:/root/app/ -p 8602:7602 IMAGE_NAME
    

    实战示例

    这里分别采用了Golang, Python, 实现一个简单的Webserver,并实现通过docker的run命令直接运行容器里的webserver。

    Go 语言示例

    由于Golang是编译型语言,运行环境无需安装Golang的开发环境,直接将交叉编译好的二进制文件挂载到容器运行就可以了,这里我们选择Docker镜像中较小的镜像Alpine Linux(中文名:阿尔卑斯Linux),Dockerfile 如下:

    Dockerfile

    # 基于最新版的alpine
    FROM alpine
    
    # 设置工作目录
    RUN mkdir -p /root/app
    WORKDIR /root/app
    
    # 生成默认start文件
    RUN echo "echo \"please load you start script on /root/app/start.sh \n \
    content example: \n \
    python manager.py\"" > /root/app/start.sh
    
    # 设置启动容器时启动的命令
    CMD ["sh", "/root/app/start.sh"]
    

    编译Dockerfile

    • 创建工作目录及Dockerfile

      $ mkdir -p $HOME/Desktop/golang_base
      $ cd $HOME/Desktop/golang_base
      $ vi Dockerfile
      
    • 编写Dockerfile并保存

    • 编译Dockerfile

      $ docker build -t golang_base .
      
    • 查看编译结果

      $ docker images | grep golang_base
      golang_base           latest       30a109c26c58        About an hour ago   3.97MB
      

      可以看到我这里编译好的镜像仅有3.97MB

    创建简单的Golang webserver

    helloGoServe.go

    package main
    
    import (
        "fmt"
        "net/http"
    )
    
    func main() {
        //第一个参数是接口名,第二个参数 http handle func
        http.HandleFunc("/", helloWorld)
        fmt.Println("Server is Started, URL is http://127.0.0.1:8081")
        //服务器要监听的主机地址和端口号
        http.ListenAndServe("0.0.0.0:8081", nil)
    
    }
    
    // http handle func
    func helloWorld(rw http.ResponseWriter, req *http.Request) {
        // 返回字符串 "Hello world"
        fmt.Fprint(rw, "Hello world\n")
        fmt.Println(req)
    }
    
    

    交叉编译为linux-amd64

    $ GOOS="linux" GOARCH="amd64" go build -x
    

    其中GOOS="linux"设置程序构建环境的目标操作系统为linux, GOARCH="amd64"设置程序构建环境的目标计算架构为amd64,go build -x 为编译当前路径下的*.go文件, -x 是显示编译过程。编译成功后就可以看到当前目录下多了一个helloGoServe文件,约5MB左右。可以直接下载我编译好的helloGoServe

    编写start.sh文件

    $ vi start.sh
    

    输入如下内容:

    sh -c /root/app/helloGoServe
    

    启动docker容器

    使用如下命令启动docker容器

    $ docker run -it --name=golang_server_8081 -v $HOME/Desktop/golang_base/:/root/app/ -p 8081:8081 golang_base
    Server is Started, URL is http://127.0.0.1:8081
    

    出现Server is Started, URL is http://127.0.0.1:8081证明容器已经启动成功,并可以在前台显示请求的logs

    Python Flask 示例

    docker命令后台运行webserver

    docker 容器-d后台运行后日志文件查看

    1 。docker logs 容器ID

    2 。docker inspect 容器ID

    找到logpath 可以看到log的位置

    我的log位置命名如下:

    /mnt/sda1/var/lib/docker/containers/容器完整64位ID/容器完整64位ID-json.log

    docker run -d --name=auto_run -v /Users/itaa/Documents/MYCode/jarvis-data_svn/tags/DOCKER_TEST/:/jarvis/app/ -p 8602:7602 auto_run

    相关文章

      网友评论

          本文标题:优雅的使用Docker部署Restful Server

          本文链接:https://www.haomeiwen.com/subject/uhgmyxtx.html