• 使用dockerfile创建镜像遇到的问题


    1、在dockerfile里面使用本地镜像

    假设本地有golang:1.16镜像,你想使用,你可能回这么写

    FROM golang:1.16

    但是这样的话,docker会去docker.io拉取golang:1.16而不是使用本地的镜像

    那应该怎么办呢,其实很简单。修改下tag,改成docker.io上的镜像tag,如docker.io/golang:1.16。即前面加上仓库地址,可以是docker.io也可以是个人私有仓库

    这样的话docker就会使用本地的镜像了。所以在dockerfile里面使用镜像要记得加上仓库地址哦

    2、调试busybox、distroless等镜像

    busybox和distroless是linux的阉割版,不包含bash的。所以

    docker run -ti xxx /bin/bash是不管用的。那怎么办呢

    如果用distroless可以通过debug标签,下载debug版本的

    然后使用/busybox/sh 就可以了

    distroless镜像很小,但是里面有/busybox这个目录下有常用的一些命令,可以通过如/busybox/sh -c "mkdir xxx"来执行创建目录的操作。

    busybox类似。不多说

    3、使用distroless镜像来运行golang应用

    单单使用distroless镜像是无法完成golang程序的编译的,我们需要借助下其他镜像。如官方提供的golang

    FROM xxx/golang:1.16 as builder
    COPY XXX/ XXX/
    拷贝其他文件
    RUN GOOS=linux等其他环境信息 go build -a -o xxx main.go
    FROM xxx/distroless:nonroot
    COPY --from=builder 从上面将编译好的二进制文件拷贝过来
    ENTRYPOINT [./xxx]

    这样做之后会发现编好的镜像很小。而且不用担心有什么linux的漏洞,因为distroless镜像阉割了很多功能,所以更安全。

    其他之后遇到补充

  • 相关阅读:
    转:IOCP在网络应用中常见错误分析
    Ext.Button的禁用
    Excel连接字符串
    从表单为实体对象赋值
    根据指定类型创建数组
    Ext.GridPanel数据显示不正确
    vue 记事本
    杂谈(一)
    推荐《程序设计的 Top 10 做与不做》和《关于编程,鲜为人知的真相》
    (转)黄鸣博客:警惕29岁现象
  • 原文地址:https://www.cnblogs.com/lgh344902118/p/15235803.html
Copyright © 2020-2023  润新知