优雅的使用Docker部署Restful Server

2017-10-10  本文已影响0人  iccccing

Use Docker Deploy WebServer

本文解决如下问题

通过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

创建简单的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

上一篇下一篇

猜你喜欢

热点阅读