V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dzdh
V2EX  ›  Docker

docker 多阶段构建怎么能应用本地缓存路径

  •  
  •   dzdh · 2023-01-09 13:29:22 +08:00 · 1308 次点击
    这是一个创建于 718 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如 java 项目构建过程中的 maven 缓存。

    from maven as step1
    workdir /src
    copy . .
    run mvn package <--这里会有本地缓存
    
    from jre-runtime-only
    copy --from=step1 /src/xxx.jar /opt/xxx.jar
    
    cmd ["java","-jar","/opt/xxx.jar"]
    
    

    run 的时候可以指定-v。build 的时候呢?包括像 php 的 composer 、go 的 mod 。咋能用上本地物理机的缓存呢?

    第 1 条附言  ·  2023-01-16 09:22:57 +08:00

    podman build命令支持 -v

    5 条回复    2023-01-09 17:22:11 +08:00
    Trim21
        1
    Trim21  
       2023-01-09 13:33:54 +08:00
    可以用主机的 cache

    https://docs.docker.com/build/cache/
    iPumpkin
        2
    iPumpkin  
       2023-01-09 13:43:33 +08:00   ❤️ 1
    RUN --mount=type=cache,target=/root/.m2 mvn clean package
    sujin190
        3
    sujin190  
       2023-01-09 13:50:04 +08:00
    既然如此,为啥第一步编译打包 jar 要放在 docker build 里呢,用 docker run 来运行 mvn package 就是了呗,把项目目录和 maven 缓存都-v 映射进去就是了呗,编译完了 jar 文件就在宿主机目录里了,然后再 docker build 就是了
    novolunt
        4
    novolunt  
       2023-01-09 16:15:42 +08:00
    maven package:
    stage: package
    cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
    - target/
    script:
    - mvn -s $setting_xml package -DskipTests



    这个 cache 字段的作用是设置 job 的缓存规则。GitLab CI/CD 的缓存功能可以帮助加速构建和测试流程,避免重复下载和编译依赖包。

    在上面的例子中,缓存的 key 是 ${CI_COMMIT_REF_SLUG},这个变量会被替换成当前代码的分支名(如 main 、release 等)。缓存的路径列表是 target/,意思是只缓存 target/ 这个目录下的文件。

    所以,当这个 job 运行时,它会先检查是否有与当前分支名相同的缓存。如果有,它会将 target/ 目录下的文件复制到当前目录,然后继续执行后面的脚本。如果没有,它会直接执行后面的脚本,并在结束后将 target/ 目录下的文件缓存起来。
    novolunt
        5
    novolunt  
       2023-01-09 17:22:11 +08:00   ❤️ 1
    最早用的是这个方案,但只能是当前目录下,后面使用上面 gitlab ci 自带缓存功能。
    RUN --mount=type=bind,source=./.m2,target=/root/.m2,rw,bind-propagation=shared mvn package
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2788 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 11:33 · PVG 19:33 · LAX 03:33 · JFK 06:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.