docker 技巧

docker 使用技巧

  1. docker镜像配置了entrypoint.sh脚本,无法直接进入容器

    覆盖entrypoint启动容器,如:

    1
    
    docker run -ti --entrypoint "" hekai/centos7.9-slurm22 bash
    

    https://blog.csdn.net/qq_38250124/article/details/85075768

  2. 将多个RUN指令合并为一个,能不能减少镜像体积

    如果在一个 RUN 指令里进行了文件下载,另一个RUN里删除了文件,那么,镜像体积是会变大的 如:

    1
    2
    
    RUN curl -O https://test.com/file
    RUN rm -rf file
    

    如果在一个RUN里进行文件下载和删除,那么镜像体积是不变的 如:

    1
    
    RUN curl -O https://test.com/file && rm -rf file
    

    shell中的&&用法:https://blog.csdn.net/u011630575/article/details/97613695

  3. 精简镜像体积

    1. 在同一个RUN指令中下载文件后,然后删除不用的文件
    2. 删除缓存,如 rm -rf /var/log/* /var/cache/* /tmp/*
    3. 删除不需要的软件包,如 yum autoremove -y
    4. 使用多阶段构建镜像
  4. 使用echo将脚本写入到文件

    https://blog.csdn.net/xukai871105/article/details/35834703 https://zhuanlan.zhihu.com/p/451994783

    1
    2
    
    hekai@00bafcjc-dUrwEMo9N5:~/Videos$ echo -e "#!/bin/bash\nexport JAVA_HOME=/usr/local/jdk\n" > a
    bash: !/bin/bash\nexport: event not found
    

    是由于 H - histexpand 模式打开了导致。 命令行下,双引号里面用了 ! 的话,Shell 会以为要执行历史展开,从而导致报错。

    解决方法,将双引号替换为单引号

    1
    
    echo -e '#!/bin/bash\nexport JAVA_HOME=/usr/local/jdk\n' > a
    

    https://blog.csdn.net/h952520296/article/details/112625995

Built with Hugo
主题 StackJimmy 设计