从零开始使用docker部署Go Web App

docker的基本使用

如何在ubuntu 16.04上安装docker,以及docker的基本使用可以参考我的上一篇博客 服务计算之玩转 Docker

dockerfile的编写

要在docker上部署应用一定绕不开编写dockerfile,下面简单的总结一下dockerfile的编写规则

指令 作用 其他
FROM 镜像使用的基础镜像 我们创建的镜像都是从一个基础镜像中生成,如果在指定时没有加入tag选项,系统会默认使用latest镜像
MAINTAINER 镜像的作者 可以省略
RUN 镜像在编译时运行的脚本 RUN指令设置编译镜像时执行的脚本,镜像编译完成后,RUN指令的生命周期结束
CMD 容器的启动命令
LABEL 镜像的标签
EXPOSE 镜像暴露的端口 EXPOSE只设置暴露端口并不导出端口,只有启动容器时使用-P/-p才导出端口,这个时候才能通过外部访问容器提供的服务
ENV 容器的环境变量
ADD 编译时会被复制到镜像中的文件 使用语法为ADD < src> < dest> 当src为文件或目录时,Docker Daemon会从编译目录寻找这些文件或目录,而dest为镜像中的绝对路径或者相对于WORKDIR的路径
COPY 同ADD
ENTRYPOINT 容器的入口程序 入口程序是容器启动时执行的程序,docker run中最后的命令将作为参数传递给入口程序
VOLUME 容器的挂载点 启动容器时,Docker Daemon会新建挂载点,并用镜像中的数据初始化挂载点,可以将主机目录或数据卷容器挂载到这些挂载点
USER 用户名 USER可以设置RUN CMD ENTRYPOINT的用户名或UID
WORKDIR 镜像运行的工作目录 设置RUN CMD ENTRYPOINT ADD COPY指令的工作目录,如果工作目录不存在,则Docker Daemon会自动创建
ARG 编译镜像时加入的参数
STOPSIGNAL 容器的退出信号

如何应用这些规则来编写Dockerfile可以向下看Go Web App 的容器化的第三步

Go Web App 的容器化

编写一个简单的Go Web App

在go工作目录下新建一个main.go文件,写入如下代码,实现一个简单的监听8080端口的服务器

package main
import (
    "net/http"
    "fmt"
)
func main() {
    http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
        fmt.Fprint(writer, "Hello World")
    })
    http.ListenAndServe(":8080",nil)
}

编译main.go文件

在当前目录下打开终端,输入 go build -o main编译写好的main.go
此时目录下出现了生成的二进制文件main
从零开始使用docker部署Go Web App_第1张图片

编写 dockerfile

首先新建文件。在当前文件夹下执行指令 touch Dockerfile,注意将DockerfileD大写
现在文件夹下就出现了dockerfile
从零开始使用docker部署Go Web App_第2张图片
打开新建的Dockerfile

FROM golang:latest 
WORKDIR /
ADD main /
EXPOSE 8080
ENTRYPOINT ["./main"]
  • FROM golang:latest: docker 镜像选择从golang:latest构建
  • WORKDIR /: 设置工作路径为当前目录,容器启动时执行的命令会在当前目录下执行
  • ADD main /: 将当前路径的main文件添加进docker容器里面
  • EXPOSE 8080: 设置暴露的端口为8080
  • ENTRYPOINT ["./main"]: 设置容器启动时执行的程序为当前目录的main程序

构建镜像

使用下面的指令构建镜像
docker build -t web .
其中 -t 参数后的 web 制定了镜像名
从零开始使用docker部署Go Web App_第3张图片
执行docker images查看创建的镜像
在这里插入图片描述
可以看到我们刚刚创建的镜像web

运行容器

在终端执行下面的指令使用创建好的 web 镜像启动一个容器
docker run --rm -it -d -p 8080:8080 web
在这里插入图片描述

  • docker run 命令用于指定镜像上上启动一个容器,这里指定为web镜像
  • -it 表示以交互的方式启动容器
  • –rm 表示在容器关闭后将会将其清除
  • -p 8080:8080 标签允许通过8080端口访问该容器
  • -d 后台运行

测试 Go Web App

在浏览器中输入网址 localhost:8080
可以看到网页上成功输出了“hello world”,说明容器化应用成功!
从零开始使用docker部署Go Web App_第4张图片

你可能感兴趣的:(服务计算)