• jxlwqq
    2021-09-13
    自荐一个dockerfile的写法: ```Dockerfile # 多阶段构建:提升构建速度,减少镜像大小 # 从官方仓库中获取 1.17 的 Go 基础镜像 FROM golang:1.17-alpine AS builder # 设置工作目录 WORKDIR /workspace # 安装项目依赖 COPY go.mod go.mod COPY go.sum go.sum RUN go mod download # 复制项目文件,这一步按需复制 COPY . . # 构建名为"app"的二进制文件 RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -o app main.go # 获取 Distroless 镜像,只有 650 kB 的大小,是常用的 alpine:latest 的 1/4 FROM gcr.io/distroless/static:nonroot # 设置工作目录 WORKDIR / # 将上一阶段构建好的二进制文件复制到本阶段中 COPY --from=builder /workspace/app . # 设置监听端口 EXPOSE 8080 # 配置启动命令 ENTRYPOINT ["/app"] ```
    展开

    作者回复: 6666

    
    27
  • 随风而过
    2021-09-12
    官方文档中最佳实践有介绍,RUN, COPY, ADD 三个指令会创建层,其他指令会创建一个中间镜像,并且不会影响镜像大小。这样我们说的指令合并也就是以这三个指令为主。当然了docker history查看构建历史与镜像大小,更为易读和简约

    作者回复: 666

    
    7
  • 静心
    2021-11-04
    感觉介绍IAM项目本身的相关内容少了点,像Docker相关的知识,其实给大家推荐一下资料就可以了。

    作者回复: 主要考虑到有些读者基础比较薄弱,需要一些基本的docker知识。如果推荐一些资料,读者要从中找出跟iam相关的内容学习,并且这些资料,大而全,读完再来学习专栏周期会比较久。 我直接列出了一些核心知识,整理后供读者学习,能节省读者不少时间。

    
    2
  • 冷峰
    2022-11-06 来自广东
    go get 依赖 git 的吧, 不装 git , go get 能运行吗?

    作者回复: 不安装git,go get基本不能运行。课程一开始就带着你们安装了git

    
    
  • wei 丶
    2021-10-16
    老师想确认下,第二阶段的FROM busybox是会覆盖掉第一阶段的FROM是嘛,只是用第一阶段进行编译而已,然后用第二阶段的镜像去运行app

    作者回复: 你说的是对的。 第一阶段只是用来编译第二阶段需要的文件。docker后面运行的镜像是由第二阶段来构建的。

    
    
  • yandongxiao
    2021-12-05
    总结: 容器镜像的构建主要是通过Dockerfile来完成,构建过程如下: 1. 创建一个临时目录,将Context中的文件解压到该目录; 2. 执行Dockfile中的命令,一般是顺序执行,如果是多阶段构建,也会并行执行指令。 3. Docker Daemon 会为每条指令创建一个临时容器,执行该指令,生成镜像层,并缓存该镜像层。 4. 最终,将所有镜像层进行合并,生成最后的容器镜像。 最佳实践: Dockerfile指令大写;From 选择官方容器镜像,指定镜像的tag; 使用尽量少地层:构建时将相同指令的内容放到一层;不要在Dockerfile中修改文件权限;采用多阶段构建,大幅减少容器镜像的体积。 充分利用缓存:不易修改的指令放在前面。 推荐使用COPY而非ADD;ENTRYPOINT和CMD结合使用。
    
    