「这是我参与2022首次更文挑战的第21天,活动详情查看:2022首次更文挑战」。
3. Dockerfile
- 首先以
golang1.16
为基础镜像 - 设置系统环境和代理
- 指定工作区
app
- 复制项目并且进行项目的编译
- 将编译好的 main 和 conf 复制到镜像中 (也可以进行映射)
- 再基于busybox镜像进行构建多一层终端
- 暴露3000端口
- 最后./main运行
FROM golang:1.16 as builder
ENV GO111MODULE=on \
GOPROXY=https://goproxy.cn,direct
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-w -s" -o main
RUN mkdir publish \
&& cp main publish \
&& cp -r conf publish
FROM busybox:1.28.4
WORKDIR /app
COPY --from=builder /app/publish .
# 指定运行时环境变量
ENV GIN_MODE=release
EXPOSE 3000
ENTRYPOINT ["./main"]
- 将我们的项目git下来
- 然后我们再进行项目的配置文件的编写config.ini
这里注意要填宿主机的ip地址,因为docker是进程隔离的状态,所以我们不能填127.0.0.1!并且要确保这几个端口的安全组已经开了!
然后我们就可以进行docker build了
docker build -t mall:tag .
我这里tag指定的是1.0,如果不指定的话就是latest了
检查每一个step有没有对应的序列号出来,全都有就是成功了。
我们跑一下
docker run --name mall -p 3000:3000 -d mall:1.0
发现没跑起来,所以就
docker logs NAMES
查看日志,发现mysql忘记创建数据库了
我们docker exec进入mysql中进行数据库表的创建
然后重启一下我们的容器
因为我们的mall容器的id是a开头的,所以直接a也可以代表这个容器!
全部都up起来就好了
我们postman测试一下
有响应即可!