• 云计算_Dockerfile与代理


    Dockerfile

    01. 文件 Dockerfile
    02.在Dockerfile文件所在目录 执行构建-- docker build .	
      the current directory (.) as build context 
    
    命令解释
     docker build command builds an image from a Dockerfile
        RUN  CMD  ENTRYPOINT
    	ARG  ENV
        ADD  COPY
    	VOLUME
    	WORKDIR  USER
    	LABEL
    	EXPOSE   :  docker run -p port:port 命令时任然可以指定容器占用的端口。
    	STOPSIGNAL ONBUILD
    
    镜像标签。一个镜像可以有多个标签。打标签时要在LABEL值中包含空格  tag
    ENV VAR=1与ENV VAR 1
      可以使用空格或等号将变量名称与值分开。	
    ENTRYPOINT (Default Command to Execute at Runtime)
        ENTRYPOINT指令优先级更高 Docker  run的优先级更高
    	可以在docker run命令中通过 --entrypoint  覆盖dockerfile文件中的ENTRYPOINT设置
    	--entrypoint \ 可以覆盖默认启动
    	--创建容器后,通过 dokcer ps查看容器信息时,COMMOND列会显示最终生效的启动命令。
            
        -w 的workdir
    

    取消设置变量”可能意味着两件事:

      将其从环境中删除,  -- 环境中不存在的变量
      或将变量设置为空值。-- 环境中存在但设置为空值的变量
      当您想通过将变量设置为空值来“取消设置”变量时,您必须使用等号语法,否则在构建时会出现错误。
       ENV NOT_SENSITIVE=
       或者 
       ENV NOT_SENSITIVE ""  
     从技术上讲,这是两种不同的操作	
     unset NOT_SENSITIVE作为一个 shell 命令执行除了在这个 shell 中执行的内容之外不会影响其他任何事情
     
     要防止变量出现在 Docker 生成的层中。
       使用docker build --secret=和RUN --mount=type=secret...。
    

    方式

    在映像构建期间需要 env vars 但它们不应该持续存在
    # set proxy
    ARG http_proxy
    ARG https_proxy
    ENV http_proxy=$http_proxy
    ENV https_proxy=$http_proxy 
    	
    	
    # unset proxy
    ENV http_proxy=
    ENV https_proxy=
    
    编译文件
    docker build -t the-image \
        --build-arg http_proxy="$http_proxy" \
        --build-arg https_proxy="$http_proxy" \
        --build-arg no_proxy="$no_proxy" \
        --no-cache \
        .
    
    说明
    dockerfile  ARG 多次相同参数名--下一次没有传递出来
    ARG http_proxy
     ARG https_proxy
    
    ARG http_prox
    ARG https_prox
    
    ARG http_pro
    ARG https_pro
    

    Docker 镜像体积优化

    有效精简docker镜像,从而提高自动化运维过程中的CI/CD效率,缩短交付时间
    方向: 
      基础镜像小
      层级尽量少
      去除不必要
      复用镜像层
      分阶段构建
    
     1. 基础镜像源的选择
     2. .dockerignore
      .dockerignore文件和.gitrignore文件,也就是制作镜像时排除在外的文件
      创建一个名为.dockerignore的文件,把它放在当前的目录下即可,它的写法跟.gitignore文件很相似--即和Dockerfile相同目录下
       using ADD or COPY 命令时
     3.Dockerfile
         命令: 可以利用 ​​&​​ 来合并多个操作,减少层数	 
    	 RUN、COPY、ADD指令会创建层,其他指令会创建临时的中间镜像,不会直接增加构建的镜像大小
     4.分阶段构建
     Multi-stage 构建镜像
      
     5.自动化的镜像瘦身工具docker-slim
       压缩镜像层级  docker-squash  : 压缩的原理是将镜像导出,然后删除所有中间层,将镜像的当前状态保存为单一层,达到压缩层级的效果
    

    本地环境

    console中执行
     使用代理执行:
     export http_proxy=http://127.0.0.1:80
     export https_proxy=http://127.0.0.1:80
     取消代理执行:
     export -n http_proxy
     export -n https_proxy
    (针对当前窗口生效)
    

    01.Dockerfile文件中使用本地代理(访问宿主机)

    ENV http_proxy http://127.0.0.1:3001
    ENV https_proxy https://127.0.0.1:3001
    
    gpg: keyserver receive failed: Connection timed out	  
    The command '/bin/sh -c apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys654' 
    returned a non-zero code: 2
    
    gpg和apt-key 代理的情况
     gpg和apt-key使不会直接读取终端中设置的代理,需要单独设置
     gpg --keyserver-options http-proxy=test.com:8080/" --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys SOMEKEY
     apt-key adv --keyserver-options http-proxy=test.com:8080/" --keyserver hkp://keyserver.ubuntu.com --recv-keys AKEYXXX
     
     Git设置代理
      # 使用代理
      && git config --global http.proxy "http://127.0.0.1:80" \
      && git config --global https.proxy "http://127.0.0.1:80" \
      # 下载
        git clone https://github.com/gperftools/gperftools.git -b gperftools --single-branch \
     #   取消代理
      && git config --global --unset http.proxy \
      && git config --global --unset https.proxy \
    

    02.Docker-run

    启动容器时,通过设置–env的flag,将环境变量传入容器
     –env HTTP_PROXY="http://127.0.0.1:3001"
     –env HTTPS_PROXY="https://127.0.0.1:3001"
    

    Dockerfile的命令

    01.不同点: 功能不同,运行的时间点不同,作用的有效范围不同,
     docker中arg和env的区别是:
      arg是在build的时候存在的,可以在Dockerfile中当做变量来使用,临时使用一下的变量没必要存环境变量的值就很适合使用 ARG
      而env是容器构建好之后的环境变量,不能在Dockerfile中当参数使用
      02.看	  
         Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"/entrypoint.sh\": permission denied": unknown
        entrypoint.sh  要具有可执行权限  
     03.总结:
     01.相同文件--执行不了--看是否权限不一样
     02.下载文件--下载不了--看本地是否有权限
     03.文件下载到Windows 下,再上传到unix ,非压缩文件会出现 :set ff
      :sef ff=unix
    

    查看镜像的Dockerfile

      docker history [OPTIONS] IMAGE  该命令用于显示镜像的历史,查看镜像的历史变化
        docker history   --no-trunc a6038faa42f1
    	
    docker inspect [OPTIONS] NAME|ID [NAME|ID...] 该命令用于检查容器或镜像的详细信息。
         docker inspect    a6037faa22f1  
    

    参考

    Debian/Ubuntu 对gpg和apt-key使用代理--报错解决:gpg: keyserver receive failed: Connection timed out https://blog.csdn.net/zhangpeterx/article/details/94870949
    【dockerfile】 docker build 设置代理 https://blog.csdn.net/erhaiou2008/article/details/107837344
     如何在dockerfile中取消设置“ ENV”? https://qa.1r1g.com/sf/ask/3905258661/
      How to unset "ENV" in dockerfile?  https://stackoverflow.com/questions/55789409/how-to-unset-env-in-dockerfile
      https://docs.docker.com/engine/reference/builder/
  • 相关阅读:
    OSPF协议原理
    TCPDUMP抓包方法
    latex:画图
    FrankWolf算法
    Three20 Navigation 迁移到TTTableViewController一直显示加载中的解决办法
    ipa在iTunes中没有图标
    iPhone应用提交AppStore时Application failed codesign verification问题的解决
    XCode4.5 iOS6 SDK 提交AppStore Validate各种错误的解决
    1.forEach():遍历数组,并为每个元素调用传入的函数; 举例:
    CSS实现单行、多行文本溢出显示省略号(…)
  • 原文地址:https://www.cnblogs.com/ytwang/p/16266552.html
Copyright © 2020-2023  润新知