1.安装Docker,具体不阐述
2.安装Go,具体不阐述
3.使用go语言实现基本http服务
package main
import (
"fmt"
"net/http"
)
func IndexHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "hello world")
}
func main() {
http.HandleFunc("/", IndexHandler)
http.ListenAndServe("0.0.0.0:8001", nil)
}
4.在项目目录下创建Dockerfile 文件
#源镜像
FROM golang:latest
#作者
MAINTAINER tuzisir "tuzisir@163.com"
#设置工作目录
WORKDIR $GOPATH/src/github.com/tuzisir
#将服务器的go工程代码加入到docker容器中
ADD . $GOPATH/src/github.com/tuzisir
#go构建可执行文件
RUN go build .
#暴露端口
EXPOSE 8001
#最终运行docker的命令
ENTRYPOINT ["./tuzisir"]
5.创建镜像image
docker build ./ -t tuzisir-go
如果成功则会输出
---> Using cache
---> ea2edeaf1f5b
Successfully built ea2edeaf1f5b
查看镜像
image.png
6. 创建容器
docker run --name tuzisir-go -p 8001:8001 -d e06d9ca5a5b1
镜像的ID
7. 查看正在运行容器
![10306662-5388835e7cbc3cbd.png](https://i-blog.csdnimg.cn/blog_migrate/bf99e082c67b25c02a007db2623c9c1d.webp?x-image-process=image/format,png)
image.png
8. 进入容器
docker exec -it tuzisir-go bash
9.遇到的问题
- docker ps 不显示正在运行的容器
是因为我main.go 文件只是输出了一个hello world 并不是像现在的监听一个http端口,这个监听是持续运行的因此docker ps会显示出来。