Docker下部署Golang程序初步(一)

103 阅读2分钟

Docker好久没玩了,一方面,这个是属于运维的范畴。另一方面精力真有限。今天老婆上班去了,小孩放假不用去鸡娃,给自己一点时间研究一下Golang如何在Docker下运行

正好Windows11 预览版已发布,我就采用在Wsl里运行Ubuntu,再在Ubuntu里运行Docker。

Wsl和Ubuntu如何安装就跳过了,不再描述。wsl要为wsl2版本 : wsl -l -v

提示:Ubuntu里的源一定要换成国内的。 关闭Ubuntu防火墙:sudo ufw disable

一、Docker的安装 curlfsSLhttps://get.docker.comogetdocker.shcurl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh $ sudo service docker start

二、Golang的环境安装 比如地址为:/maque/golang 新建目录:

mkdir /maque/golang

切换到地址

cd /maque/golang

下载golang :

wget https://studygolang.com/dl/golang/go1.16.5.linux-amd64.tar.gz

如何地址被 墙了,则先下载之后,用xftp上传 (这里也涉及到ssh的一大堆问题) 解压:

 tar  -zxvf  go1.16.5.linux-amd64.tar.gz

把golang加入到 配置文件 vi /etc/profile


// 在最后一行添加
export GOROOT=/maque/golang/go
export PATH=$PATH:$GOROOT/bin

// wq保存退出后source一下

source /etc/profile

测试 看go环境是否正常

go version

go version go1.16.5 linux/amd64

把golang的代理切换成七牛或阿里


$ go env -w GO111MODULE=on
$ go env -w GOPROXY=https://goproxy.cn

三、Hello 代码编写 我这里编写一个最简单的http hello world程序 新建一个目录 ,并切换

mkdir /maque/hello

用vi 新建一个go文件 vi hello.go

package main

import (
	"fmt"
	"net/http"
 )
func main(){
  
	fmt.Println("hello")
	http.HandleFunc("/",func(w http.ResponseWriter,r *http.Request) {
		fmt.Fprintln(w,"Hello world",r.URL.Path)
	})
	http.ListenAndServe(":8081",nil)
}

进行编译 go build hello.go ,在这里可以直接运行

./hello

如果正常的情况可以在windows浏览器里输入 http://localhost:8081 可以看到 内容 了

按ctrl +c 退出hello 程序

四、Dockerfile的编写 我们开始编写 dockerfile的镜像。由于原生的golang镜像太大了,有500多M,我这里采用 alpine 作为运行的镜像源 alpine只有5.3M 这样打包出来的hello 程序也只有 17 M


FROM alpine
RUN mkdir /hello
RUN mkdir /lib64
RUN ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2
COPY ./hello /hello
COPY ./build.sh /hello
WORKDIR /hello
RUN chmod +x hello
EXPOSE 8081
CMD ["sh","/hello/build.sh"]

RUN mkdir /lib64 RUN ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2 这两行主要为了解决 alpine的代码没有相依赖包的情况 创建 程序自动运行的脚本 build.sh


#!/usr/bin/env bash
cd /hello && ./hello

五、编写镜像,并运行容器 这个时间就可以开始创建镜像了

docker build -t hello:1.1 .

最后面有一个点不要少

运行 docker images 看镜像有了没有

再创建一个容器

docker run -d -it -p 8081:8081 hello:1.1

正常情况下就可以运行了 windows浏览器打开 http://localhost:8081/ 就可以看到内容

一些其它的docker命令 查看所有容器:docker ps -a 启动容器:docker start 容器ID 停止容器:docker stop 容器ID 删除容器:docker rm 容器ID

查看所有镜像:docker images 删除镜像:docker image rm 镜像名