Docker 部署 Gin+MySQL+Redis 项目(二)

729 阅读1分钟

「这是我参与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测试一下

在这里插入图片描述 有响应即可!