内容简介:之前我写过文/谦益这篇文章可能不太适合对go和
之前我写过 如何部署Golang程序到服务器 ,这次咱们来写写怎么利用 Docker 来部署我的Golang,当然如果要部署到 Docker 里面, Docker 是必须安装的,可以 点击这里 查看安装步骤。
文/谦益
这篇文章可能不太适合对 go 和 Docker 零基础人士阅读,需要有一定的基础知识。
依赖知识
- Go交叉编译基础
- Docker基础
- Dockerfile自定义镜像基础
- docker-compose编排文件编写基础
当然,一点也不会也可以按照这个步骤部署完成,不过可能中间如果出点小问题,会不知道怎么解决,当然你也可以留言。
我是在mac环境上开发测试的,如果你是在windows上可能有一点出入,但应该不会有啥大问题。
一、依赖环境
- Docker
二、编写一个GoLang web程序
我这里就写一个最简单的hello world程序吧,监听端口是80端口。
新建一个 main.go 文件,内容如下:
package main
import (
"fmt"
"log"
"net/http"
)
func sayHello(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "hello world")
}
func main() {
http.HandleFunc("/", sayHello)//注册URI路径与相应的处理函数
log.Println("【默认项目】服务启动成功 监听端口 80")
er := http.ListenAndServe("0.0.0.0:80", nil)
if er != nil {
log.Fatal("ListenAndServe: ", er)
}
}
三、编译成 linux 下的程序包
我是在mac上开发的,需要用到go的交叉编译,如果对交叉编译不熟悉的,可以查下文档,或者直接复制我下面的命令进行编译。
我们是要跑在 Docker 里面,基础 golang 这个镜像跑的,所以需要把他编译成兼容 i386 处理器的程序。
sudo env GOOS=linux GOARCH=386 go build main.go
这个编译完成后,本地会多出一个 main 程序,暂时不用管它备用就行。
四、使用 Dockerfile 定制我们go程序的镜像
新建一个文件夹,里面新建一个 Dockerfile 文件,再在里面新建 app , script 两个文件。把上一步的 main 程序放到 app 文件夹里面,在 script 里面新建一个 build.sh 脚本文件,文件内容先不管,等下会说。
具体的文件结构是这样。
.
├── Dockerfile
├── app
│ └── main
└── script
└── build.sh
下面就是编写 Dockerfile 文件内容了,内容我先上代码:
FROM golang MAINTAINER 谦益 WORKDIR /go/src/ COPY . . EXPOSE 80 CMD ["/bin/bash", "/go/src/script/build.sh"]
这里解释下:
-
FROM是集成自哪个镜像,我们是go程序官方提供了一个golang这样的镜像,我们可以直接使用。 -
MAINTAINER是维护这名字。 -
WORKDIR工作目录。 -
COPY这是一个复制命令,把本地的所有文件复制到工作目录下。 -
EXPOSE这是对方开发的端口,我默认是开放80端口,这里可根据实际情况修改 -
CMD执行一个带参数的命令,我这样写,是为了让镜像启动时去执行script/build.sh的脚本,这个脚本里面是写的启动go程序的命令。
这里我把内容粘贴出来:
#!/usr/bin/env bash cd /go/src/app/ && ./main
就这两行。
五、编译我们自己的镜像
这属于 Docker 的知识了,我把命令粘贴出来。
docker build -t go-web .
- 这个命令执行,如果本地没有
golang这个镜像的话,他会自己先去官方镜像库拉取这个镜像再编译,我们静静的等他就行。 -
go-web这个参数是你最后编译后的镜像名字,可以随意修改,也可以加上版本号比如:go-web:v1。
看到上面这个输出,就说明编译成功了,在你的本地镜像里面就有了一个名为 go-web 的镜像。可以使用 docker images 进行查询:
六、编写 docker-compose.yml 文件
到这里属于我们的最后一步了,如果用我们刚编译的 go-web 来运行我们的go程序:
version: '2'
networks:
basic:
services:
world:
container_name: world
image: go-web
ports:
- "8099:80"
volumes:
- ./app/go/world:/go/src/app:rw
networks:
- basic
到这里我们的编排文件已经写好了,现在只需要用 docker-compose 来启动我们的编排文件就好,启动命令如下:
docker-compose -f docker-compose.yml up -d world
如果输出下面的提示,说明启动成功了。
Creating world ... done
启动成功后你可以再用
docker ps -a
来查看下是否启动成功了,如果看到下面的这个输出说明就启动成功了。
你现在就可以访问你们 http://127.0.0.1:8099 就能访问我们的go程序了。
下一期文章主题会写怎么用 Docker + Nginx 部署 Go 应用程序,敬请期待。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Docker 部署golang程序
- 三周学会小程序(三):服务端搭建和免费部署
- golang编译程序在linux上的部署
- 将我的java程序组件部署到maven中央仓库
- [译] 教学:如何使用实际按钮将应用程序部署到生产环境
- AWS Amplify Console:赋予应用程序快速部署的能力
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Google's PageRank and Beyond
Amy N. Langville、Carl D. Meyer / Princeton University Press / 2006-7-23 / USD 57.50
Why doesn't your home page appear on the first page of search results, even when you query your own name? How do other web pages always appear at the top? What creates these powerful rankings? And how......一起来看看 《Google's PageRank and Beyond》 这本书的介绍吧!
MD5 加密
MD5 加密工具
UNIX 时间戳转换
UNIX 时间戳转换