欢迎来到本网站

全国统一咨询热线:158-2196-7367

新闻中心

新闻中心News Center

联系方式

联系方式Contact infoemation

电话:158-2196-7367

邮箱:amy@hanett.com

地址:中国·上海市金山区朱泾镇南横街4号4幢1296室H座

当前位置:明翔网络 > 行业新闻 > 五分钟用Docker快速搭建Go开发环境

五分钟用Docker快速搭建Go开发环境

文章出处:http://www.ucunicom.com/a/1007.html 阅读量:14 发表时间:03-13 11:45
行业新闻

挺早以前在我写过一篇用 Docker搭建LNMP开发环境的文章:用Docker搭建Laravel开发环境,里面详细介绍了将 nginxmysqlphp三个容器用 docker-compose编排成 LNMP开发环境的步骤,今天来说说怎么用 Docker快速搭建 Go语言项目的开发环境。

因为靠Go 本身自带的标准库就能实现高性能的 HTTP服务器,不熟悉的同学买它,呃说错了,看它:深入学习用Go编写HTTP服务器。所以用 Docker 构建 Go的开发环境比构建 LNMP 开发环境要简单很多,如果没有太多定制化要求甚至都不用写 Dockerfile自己构建镜像,直接使用官方的 golang镜像即可。

获取Docker镜像

我们使用官方最新稳定版的镜像 golang:latest, 获取镜像前先得确保你电脑上运行了 Docker 客户端,没有的去官网下载一下吧这里就不多说了。

下载dockerHub上的镜像直接使用命令:

docker pull golang

下载完镜像后用镜像运行一个容器:

docker run --rm -it --name go-http-demo golang bash

上面这个命令用镜像 golang创建了一个名为 go-http-demo的容器,在容器中创建了一个 Bash会话。--rm选项指定容器退出后自动移除容器。

运行完上面的命令后我们就进入了运行的容器中,运行 go version 查看以下 go的版本:

root@965425c5bdcf:/go# go versiongo version go1.13.6 linux/amd64root@965425c5bdcf:/go#

你可以根据自己的需要在https://hub.docker.com/_/golang 中查找自己需要的版本的 golang镜像运行容器。

在容器中运行Go项目

我们使用《深入学习用Go编写HTTP服务器》中最后写的支持优雅关停服务的 HTTPServer的源码,将它放到 Docker容器里伺服宿主机的请求。HTTP Server的源码如下,想探究代码具体怎么实现的看链接里的文章就好了。

  1. package main


  2. import (

  3.    "context"

  4.    "fmt"

  5.    "log"

  6.    "net/http"

  7.    "os"

  8.    "os/signal"

  9.    "syscall"

  10. )


  11. func main() {

  12.    mux := http.NewServeMux()

  13.    mux.Handle("/", &helloHandler{})


  14.    server := &http.Server{

  15.        Addr:    ":8080",

  16.        Handler: mux,

  17.    }


  18.    // 创建系统信号接收器

  19.    done := make(chan os.Signal)

  20.    signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)

  21.    go func() {

  22.        <-done


  23.        if err := server.Shutdown(context.Background()); err != nil {

  24.            log.Fatal("Shutdown server:", err)

  25.        }

  26.    }()


  27.    log.Println("Starting HTTP server...")

  28.    err := server.ListenAndServe()

  29.    if err != nil {

  30.        if err == http.ErrServerClosed {

  31.            log.Print("Server closed under request")

  32.        } else <span style="line-height: 20px;font-size: 13px !important;white-space: inherit !impor

全国咨询热线:158-2196-7367

二维码

地址:中国·上海市金山区朱泾镇南横街4号4幢1296室H座

版权所有 © 1999-2017 Copyright © 1999-2017 All Rights Reserved

no cache
Processed in 1.561952 Second.