ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-01-05 22:59:08  阅读:143  来源: 互联网

标签:容器 demo 入门教程 go Go Docker main Dockerfile docker


环境准备

  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文件语法指引:Dockerfile reference | Docker Documentation

构建镜像

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/disributed-system-notes

公众号:coding进阶

个人网站:Jincheng9's blog

References

标签:容器,demo,入门教程,go,Go,Docker,main,Dockerfile,docker
来源: https://blog.csdn.net/perfumekristy/article/details/122334061

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有