关于golang:Docker入门教程101-基于Docker部署Go项目

47次阅读

共计 1852 个字符,预计需要花费 5 分钟才能阅读完成。

环境筹备

  1. Docker 装置:参考我的上一篇文章 Docker 入门教程 101:用处,架构,装置和应用。
  2. Go 我的项目代码筹备

​ 基于 golang 最风行的 Web 框架 Gin,搭建一个最简略的 Web 服务,大家能够下载 zip 包,或者应用 git 下载源码:

$ git clone git@github.com:jincheng9/disributed-system-notes.git

​ 下载后,用 VSCode,Goland 或其它 IDE 关上 disributed-system-notes/docker/02/go-docker-demo 目录。

​ 在该目录下执行如下 2 条命令,服务失常启动后,会监听 8080 端口

$ go build main.go
$ ./main

​ 在浏览器上输出 http://localhost:8080/hello,如果有输入如下后果,就示意所有准备就绪了。

{"msg": "world"}

创立 Dockerfile

go-docker-demo 目录下,创立文件Dockerfile,文件名全称就叫Dockerfile,没有后缀。

Dockerfile文件内容为:

FROM golang:latest

WORKDIR /app/demo
COPY . .

RUN go build main.go

EXPOSE 8080
ENTRYPOINT ["./main"]

FROM: 指定根底镜像。咱们的我的项目须要用到 Go,所以指定 golang 的最新版本为根底镜像

WORKDIR:指定本我的项目在容器里的工作目录或者说存储地位。设置了 WORKDIR 后,Dockerfile里后续的指令如果要应用容器里的门路,就能够依据 WORKDIR 来应用相对路径了。

COPY:把执行 docker build 指定的目录下的某些文件或目录拷贝到容器的指定门路下。例子里的第一个 . 示意 docker build 指定的当前目录,第二个 . 示意容器的当前工作目录 WORKDIR,该指令示意把docker build 指定的目录下的所有内容 (包含子目录下的文件) 全副拷贝到容器的 /app/demo 目录下。

RUN:在指定的容器工作目录执行命令。例子示意在 WORKDIR 下执行 go build main.go,会生成main 二进制文件。

EXPOSE:申明容器要应用的端口。

ENTRYPOINT:指定容器的启动程序和参数。

Dockerfile 文件语法指引:https://docs.docker.com/engin…

构建镜像

go-docker-demo 目录下,执行如下命令来构建镜像:

$ docker build -t go-docker-demo .

执行实现后,应用 docker image ls 能够查看到 REPOSITORYgo-docker-demo的镜像文件。

运行容器

执行如下命令,启动容器:

$ docker run -d -p 8080:8080 go-docker-demo

胜利执行后,该命令会返回相似 2b7a47d1e24265e638a2b931561a303f97463fac9d9f5fa5a9f9b77b2212fa24 这样的字符串,这个是运行的容器的 ID,也叫 container id。

在浏览器上输出 http://localhost:8080/hello,如果有输入如下后果,就示意功败垂成了。

{"msg": "world"}

容器长啥样

通过 Docker Desktop 里的 Containers/Apps 这个 Tab 页找到运行的容器go-docker-demo,点击左边第 2 个 CLI 图标,就能够进去到容器里了。

别离执行 pwd, ls 命令,就能以容器的视角看到以后容器里的文件目录构造。

# pwd
/app/demo
# ls
Dockerfile  go.mod  go.sum  main  main.go
# curl http://127.0.0.1:8080/hello            
{"msg":"world"}
# ls /
app  boot  etc    home  lib64  mnt  proc    run   srv  tmp    var
bin  dev   go    lib   media  opt  root    sbin  sys  usr

容器是被隔离的过程,有本人的文件系统、网络和过程树。

开源地址

文章和示例代码开源地址在 GitHub: https://github.com/jincheng9/…

公众号:coding 进阶

集体网站:https://jincheng9.github.io/

References

  • https://docs.docker.com/engin…
  • https://eddycjy.com/posts/go/…

正文完
 0