环境筹备
- Docker装置:参考我的上一篇文章Docker入门教程101:用处,架构,装置和应用。
- 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:latestWORKDIR /app/demoCOPY . .RUN go build main.goEXPOSE 8080ENTRYPOINT ["./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
能够查看到REPOSITORY
为go-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# lsDockerfile 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 varbin 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/...