用golang官方Docker镜像运行项目

简介: 如果当前电脑没有配置go环境,通过Docker也可以编译、构建、运行go程序,接下来一起实战试试

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码): https://github.com/zq2599/blog_demos

本篇概览

  • 如果当前电脑没有配置go环境,通过Docker也可以运行go程序,一起实战试试;

环境信息

  • 本次实战的环境如下:
  1. 操作系统:macOS Mojave(10.14.3)
  2. Docker:18.09.2
  3. go镜像:1.11.5

go工程简介

  • 本次实战要运行的go程序,一共有两个package:
  • 名为service的文件夹下有个名为tools.go的文件,内容如下:
package service

import (
  "fmt"
)

func Log(str string){
  fmt.Println(str)
}
  • 名为hello的文件夹下有个名为helloworld.go的文件,内容如下:
package main

import "service"

func main() {
  service.Log("abc")
}
  • 以上就是本次实战的代码,功能很简单:一个package中的main调用另一个package提供的api,最终在控制台打印abc,接下来借助Docker来编译构建运行上述代码;

两个命令运行hellowrold.go

  • 假设文件夹service和hello都在目录/Users/will/temp/201902/24下;
  • 命令行进入目录/Users/will/temp/201902/24,执行以下命令,即可创建一个Dockerfile文件,用于稍后的镜像制作:
rm -f ./Dockerfile \
&& tee ./Dockerfile <<-'EOF'
FROM golang:1.11.5
WORKDIR /go/src
COPY . .
RUN go get -d -v ./...
RUN go install -v ./...
EOF
  • 从Dockerfile内容可见,该镜像做的事很简单:先将当前目录下的go源文件夹复制到镜像内,再执行go install命令编译构建,生成可执行文件;
  • 执行以下命令,先构建镜像再创建一次性容器,该容器启动后立即运行镜像中构件好的可执行文件:
docker build -t my-golang-app . \
&& docker run -it --rm --name my-running-app my-golang-app hello
  • 输出如下:
$ docker build -t my-golang-app . \
> && docker run -it --rm --name my-running-app my-golang-app hello
Sending build context to Docker daemon   5.12kB
Step 1/5 : FROM golang:1.11.5
 ---> 901414995ecd
Step 2/5 : WORKDIR /go/src
 ---> Using cache
 ---> 2aa585932b40
Step 3/5 : COPY . .
 ---> Using cache
 ---> cfc695390f08
Step 4/5 : RUN go get -d -v ./...
 ---> Using cache
 ---> 4c71f0716bac
Step 5/5 : RUN go install -v ./...
 ---> Using cache
 ---> 5d950c32c83f
Successfully built 5d950c32c83f
Successfully tagged my-golang-app:latest
abc
  • 可见go程序已经正常运行;
  • 以上就是在Docker运行golang程序的快捷方式,如果不想配置go环境,可以用此方式快速运行程序;

欢迎关注阿里云开发者社区博客:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...
相关文章
|
3月前
|
Docker 容器 Perl
云效flow构建docker镜像更换apt源为阿里镜像源
在 Dockerfile 中添加命令以更换 Debian 源为阿里云镜像,加速容器内软件包下载。核心命令通过 `sed` 实现源地址替换,并更新 apt 软件源。其中 `cat` 命令用于验证替换是否成功,实际使用中可删除该行。
578 32
|
2月前
|
缓存 Shell 网络安全
将应用程序打包成Docker镜像时可能遇到哪些问题?
将应用程序打包成Docker镜像时可能遇到哪些问题?
227 77
|
2月前
|
Shell 应用服务中间件 nginx
docker 镜像的部分常用命令
docker镜像常用命令
99 16
|
2月前
|
关系型数据库 MySQL Docker
|
10月前
|
Go
Golang语言之管道channel快速入门篇
这篇文章是关于Go语言中管道(channel)的快速入门教程,涵盖了管道的基本使用、有缓冲和无缓冲管道的区别、管道的关闭、遍历、协程和管道的协同工作、单向通道的使用以及select多路复用的详细案例和解释。
307 4
Golang语言之管道channel快速入门篇
|
10月前
|
Go
Golang语言文件操作快速入门篇
这篇文章是关于Go语言文件操作快速入门的教程,涵盖了文件的读取、写入、复制操作以及使用标准库中的ioutil、bufio、os等包进行文件操作的详细案例。
135 4
Golang语言文件操作快速入门篇
|
10月前
|
Go
Golang语言之gRPC程序设计示例
这篇文章是关于Golang语言使用gRPC进行程序设计的详细教程,涵盖了RPC协议的介绍、gRPC环境的搭建、Protocol Buffers的使用、gRPC服务的编写和通信示例。
266 3
Golang语言之gRPC程序设计示例
|
10月前
|
安全 Go
Golang语言goroutine协程并发安全及锁机制
这篇文章是关于Go语言中多协程操作同一数据问题、互斥锁Mutex和读写互斥锁RWMutex的详细介绍及使用案例,涵盖了如何使用这些同步原语来解决并发访问共享资源时的数据安全问题。
191 4
|
9月前
|
前端开发 中间件 Go
实践Golang语言N层应用架构
【10月更文挑战第2天】本文介绍了如何在Go语言中使用Gin框架实现N层体系结构,借鉴了J2EE平台的多层分布式应用程序模型。文章首先概述了N层体系结构的基本概念,接着详细列出了Go语言中对应的构件名称,包括前端框架(如Vue.js、React)、Gin的处理函数和中间件、依赖注入和配置管理、会话管理和ORM库(如gorm或ent)。最后,提供了具体的代码示例,展示了如何实现HTTP请求处理、会话管理和数据库操作。
121 1