邢台做移动网站的地方红豆影视传媒有限公司

当前位置: 首页 > news >正文

邢台做移动网站的地方,红豆影视传媒有限公司,做部队网站技术,正宗营销型网站建设本文主要介绍如何将go项目打包成镜像#xff0c;首先介绍Dockerfile常用命令介绍#xff0c;然后介绍使用工具goctl用于生成Dockerfile#xff0c;还可以根据需求自定义指令内容#xff0c;最后讲解如何将go-blog项目打包成镜像#xff0c;以及如何运行等 文章目录 前言Do… 本文主要介绍如何将go项目打包成镜像首先介绍Dockerfile常用命令介绍然后介绍使用工具goctl用于生成Dockerfile还可以根据需求自定义指令内容最后讲解如何将go-blog项目打包成镜像以及如何运行等 文章目录 前言Dockerfile介绍goctl工具生成Dockerfile安装工具命令行输入Dockerfile 构造镜像查看镜像启动镜像 前言 参考文档 docker日常使用编写dockerfile等dockerfile编写 开发完项目之后可以通过dockerfile将项目打包成镜像 Dockerfile介绍 Dockerfile 是用于构建 Docker 镜像的文本文件其中包含一系列指令命令。这些指令按照顺序执行用于定义镜像的构建过程。下面是常用的 Dockerfile 命令及其详细解释 FROM指定基础镜像用于构建当前镜像的基础。例如FROM ubuntu:latest。LABEL为镜像添加元数据可以包含任意键值对。例如LABEL maintaineryournameexample.com。RUN在镜像中执行命令并创建新的镜像层。例如RUN apt-get update apt-get install -y curl。CMD指定容器启动时要执行的命令该命令只能有一个。例如CMD [nginx, -g, daemon off;]。EXPOSE声明容器运行时监听的端口。例如EXPOSE 8080。ENV设置环境变量。例如ENV MYSQL_VERSION 5.7。ADD将文件、目录或远程 URL 的内容复制到镜像中。例如ADD app.jar /app/。COPY将文件或目录复制到镜像中。例如COPY ./src /app/src。WORKDIR设置工作目录后续命令将在该目录下执行。例如WORKDIR /app。VOLUME声明持久化目录用于在容器和主机之间共享数据。例如VOLUME /dataENTRYPOINT指定容器启动时要执行的命令与 CMD 不同的是ENTRYPOINT 不会被Dockerfile 中的指令覆盖。例如ENTRYPOINT [java, -jar, app.jar]。USER设置运行后续命令的用户名或 UID。例如USER myuser。ARG定义构建参数可以在构建镜像时通过 –build-arg 传递。例如ARG VERSIONlatest。ONBUILD指定触发器命令在当前镜像被继承时执行。例如ONBUILD ADD . /app。 下面是一个简单的示例演示了如何编写一个用于构建基本 Go 应用程序的 Dockerfile。

使用官方的 Golang 镜像作为基础镜像

FROM golang:1.16# 在容器内创建一个目录来存放我们的应用代码 RUN mkdir /app# 将工作目录切换到 /app WORKDIR /app# 将当前目录下的所有文件拷贝到 /app 目录 COPY . .# 编译 Go 应用程序 RUN go build -o myapp .# 暴露 8080 端口 EXPOSE 8080# 运行应用程序 CMD [./myapp] 当然还有更简便的方式使用goctl工具生成Dockerfile解放了生成力~ goctl工具生成Dockerfile 安装工具 go install github.com/zeromicro/go-zero/tools/goctllatest命令行输入 (base) yangmiaoym-mac gin-blog % goctl docker –help Generate DockerfileUsage:goctl docker [flags]Flags:–base string The base image to build the docker image, default scratch (default scratch)–branch string The branch of the remote repo, it does work with –remote–exe string The executable name in the built image–go string The file that contains main function-h, –help help for docker–home string The goctl home path of the template, –home and –remote cannot be set at the same time, if they are, –remote has higher priority–port int The port to expose, default none–remote string The remote git repo of the template, –home and –remote cannot be set at the same time, if they are, –remote has higher priorityThe git repo directory must be consistent with the https://github.com/zeromicro/go-zero-template directory structure–tz string The timezone of the container (default Asia/Shanghai)–version string The goctl builder golang image version 在执行该命令后Goctl 会自动生成一个名为 Dockerfile 的文件包含适当的环境配置和基础镜像信息。 goctl docker –go main.go 生成的Dockerfile文件如下所示 Dockerfile 多阶段构建 第一个 FROM 开始的部分是构建一个 builder 镜像目的是在其中编译出可执行文件 main第二个 From 开始的部分是从第一个镜像里 copy 出来可执行文件 main并且用了基础镜像 scratch 以保障最终镜像尽可能小 FROM golang:alpine AS builderLABEL stagegobuilderENV CGO_ENABLED 0 ENV GOPROXY https://goproxy.cn,direct RUN sed -i s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g /etc/apk/repositoriesRUN apk update –no-cache apk add –no-cache tzdataWORKDIR /buildADD go.mod . ADD go.sum . RUN go mod download COPY . . RUN go build -ldflags-s -w -o /app/main main.goFROM scratchCOPY –frombuilder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt COPY –frombuilder /usr/share/zoneinfo/Asia/Shanghai /usr/share/zoneinfo/Asia/Shanghai ENV TZ Asia/ShanghaiWORKDIR /app COPY –frombuilder /app/main /app/mainCMD [./main]默认禁用了 cgo启用了 GOPROXY 加速 go mod download去掉了调试信息 -ldflags“-s -w” 以减小镜像尺寸安装了 ca-certificates这样使用 TLS证书就没问题了tzdata 在 builder 镜像安装并在最终镜像只拷贝了需要的时区自动设置了本地时区 构造镜像 至于docker如何使用可以参考Docker-常用命令介绍看这一篇就够了 在项目根目录下执行docker build用于生成镜像生成镜像后就可以查看和启动了~ docker build -t go-blog:v1 .(base) yangmiaoym-mac gin-blog % docker build -t go-blog:v1 . ERROR: Cannot connect to the Docker daemon at tcp://localhost:2375. Is the docker daemon running? (base) yangmiaoym-mac gin-blog % sudo docker build -t go-blog:v1 . Password: [] Building 515.7s (1818) FINISHED [internal] load build definition from Dockerfile 0.1s transferring dockerfile: 694B 0.0s [internal] load .dockerignore 0.1s transferring context: 2B 0.0s [internal] load metadata for docker.io/library/golang:alpine 308.4s [internal] load build context 10.3s transferring context: 215.37MB 10.1s [builder 19] FROM docker.io/library/golang:alpinesha256:70afe55365a265f0762257550bc38440e0d6d6b97020d3f8c85328f00200dd8e 156.9s resolve docker.io/library/golang:alpinesha256:70afe55365a265f0762257550bc38440e0d6d6b97020d3f8c85328f00200dd8e 0.0s sha256:86a63ed24dc22a348b35d99b5ec9dc67ff66563b539875e5c8ab2d870b3991ac 286.31kB / 286.31kB 75.8s sha256:ae48e6158ebb1a353f7d7b0676b0bd55a09a448a440b65135db378ffb0040919 64.09MB / 64.09MB 153.7s sha256:70afe55365a265f0762257550bc38440e0d6d6b97020d3f8c85328f00200dd8e 1.65kB / 1.65kB 0.0s sha256:635bf83d6a1993bf40e3c575d7b522d41950af4f1a5c1c7cd01c81d93b76f4bf 1.16kB / 1.16kB 0.0s sha256:1ddcbcaf7f02eab589ea6e5727ede30fe040922e4674737894898cddeaba40e0 6.34kB / 6.34kB 0.0s sha256:2c03dbb20264f09924f9eab176da44e5421e74a78b09531d3c63448a7baa7c59 3.33MB / 3.33MB 76.8s sha256:edabe92b0de78c4b662f63a4b2884d0821795e38a90c7ec070ccfa98f8aa236c 156B / 156B 151.3s extracting sha256:2c03dbb20264f09924f9eab176da44e5421e74a78b09531d3c63448a7baa7c59 0.8s extracting sha256:86a63ed24dc22a348b35d99b5ec9dc67ff66563b539875e5c8ab2d870b3991ac 0.1s extracting sha256:ae48e6158ebb1a353f7d7b0676b0bd55a09a448a440b65135db378ffb0040919 2.6s extracting sha256:edabe92b0de78c4b662f63a4b2884d0821795e38a90c7ec070ccfa98f8aa236c 0.0s [builder 29] RUN sed -i s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g /etc/apk/repositories 1.0s [builder 39] RUN apk update –no-cache apk add –no-cache tzdata 2.7s [builder 49] WORKDIR /build 0.0s [builder 59] ADD go.mod . 0.0s [builder 69] ADD go.sum . 0.0s [builder 79] RUN go mod download 14.2s [builder 89] COPY . . 7.4s [builder 99] RUN go build -ldflags-s -w -o /app/main main.go 24.5s [stage-1 14] COPY –frombuilder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt 0.0s [stage-1 24] COPY –frombuilder /usr/share/zoneinfo/Asia/Shanghai /usr/share/zoneinfo/Asia/Shanghai 0.0s [stage-1 34] WORKDIR /app 0.0s [stage-1 44] COPY –frombuilder /app/main /app/main 0.1s exporting to image 0.1s exporting layers 0.1s writing image sha256:556e5362b86a63c8d1325549b595d987c8c79ad749524875c9d018c44cbf3ad5 0.0s naming to docker.io/library/go-blog:v1 0.0s查看镜像 sudo docker images | grep go-blog启动镜像 sudo docker run -it go-blog:v1