如何编写dockerfile来部署go项目?

3,599 阅读2分钟

安装docker

Windows安装docker: docs.docker.com/docker-for-…

mac安装docker:docs.docker.com/docker-for-…

linux安装docker:yum install docker

在Linux安装完成后要记得打开docker:

systemctl start docker //开启docker

systemctl enable docker //设置开机自启动

编写dockerfile

这里先写一个go web的demo


import (
   "fmt"
   "net/http"
)

func main() {
   fmt.Println("service start")

   http.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
      fmt.Fprint(writer,"Hello Docker")
   })
   http.ListenAndServe(":8888",nil)

}

编写此demo的dockerfile,记住文件的名字要起为Dockerfile。


FROM golang:latest    

RUN mkdir /app     //创建一个文件夹
 
WORKDIR /app       //移动到指定的目录

ADD . /app         //将当前的目录的文件都拷贝到/app目录

RUN go build -o main ./main.go //构建go二进制文件

EXPOSE 8888        //输出的端口号

CMD /app/main      //执行,有点像shell
 

在命令行执行下面文件生成docker image:

docker docker build . -t my_docker_test

. 表示当前目录, -t 后面加自己想取名字

运行docker image ls来查看你当前生成或者是已经拉取的image

下面是最后一步,启动docker:

docker run -p 8888:8888 my_docker_test

然后我们就可以在在浏览器上输入: localhost:8888/

下面来总结几个docker常用的命令

docker container ls //当前运行的container
docker container ls -a //当前创建的container
docker image ls    //当前的image
docker run xxx    // 此处的xxx为image

container是什么?

  • “一个运行中的docker image”
  • 实质是复制image并在image最上层加上一层 read-write 的层 (称之为 container layer ,容器层)
  • 基于同一个image可以创建多个container

image是什么?

  • Docker image是一个 read-only 文件
  • 这个文件包含文件系统,源码,库文件,依赖,工具等一些运行application所需要的文件
  • 可以理解成一个模板
  • docker image具有分层的概念

这里建议大家可以去找一些资料去了解image和container的区别。