代码之家  ›  专栏  ›  技术社区  ›  4ntoine

我可以在构建Docker映像的同时装载卷吗?

  •  0
  • 4ntoine  · 技术社区  · 7 年前

    我在研究铬叉造船厂的形象。我希望为构建缓存装载一些卷。有可能吗? 建筑物 图像的( docker build -t mychromiumfork_builder . )?

    FROM ubuntu:16.04
    
    # Adjust env
    ENV SRC="/mychromiumfork/src" OUT="/mychromiumfork/out" GOOGLE_PLAY_AGREE_LICENSE="1" LC_CTYPE="en_US.UTF-8" CHROME_DEVEL_SANDBOX="1"
     # here i'd like to add `ENV CACHE="/mychromiumfork/cache"`
    
    # Install Chromium build dependencies.
    RUN echo "deb http://archive.ubuntu.com/ubuntu trusty multiverse" >> /etc/apt/sources.list # && dpkg --add-architecture i386
    RUN apt-get update && apt-get install -qy \
        git \
        build-essential \
        clang \
        curl \
        lsb-core \
        sudo \
        --no-install-recommends
    
    RUN mkdir -p ${SRC}
    
    # gclient sync prerequisites
    COPY .gclient /mychromiumfork
    RUN touch /mychromiumfork/.gclient_entries
    
    # Copy sources
    COPY src ${SRC}
    
    # required to skip modal dialog with user confirmation (button click required)
    RUN echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections
    RUN chmod +x ${SRC}/build/*.sh
    RUN ${SRC}/build/install-build-deps-android.sh --no-prompt \
        && apt-get clean \
        && apt-get autoremove -y
    
    # Install Chromium's depot_tools.
    ENV DEPOT_TOOLS /home/developer/depot_tools
    RUN git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git $DEPOT_TOOLS
    ENV PATH $PATH:$DEPOT_TOOLS
    RUN echo -e "\n# Add Chromium's depot_tools to the PATH." >> .bashrc
    RUN echo "export PATH=\"\$PATH:$DEPOT_TOOLS\"" >> .bashrc
    
    VOLUME ${OUT}
    # here i'd like to add `VOLUME ${CACHE}`
    
    RUN cd /mychromiumfork && gclient sync # here i'd like to add `--cache-dir ${CACHE}`
    WORKDIR ${SRC}
    
    #RUN gn gen --args='target_os="android" is_debug=true proprietary_codecs=true ffmpeg_branding="Chrome"' ${OUT}/Debug
    #CMD ninja -C ${OUT}/Debug chrome_public_apk
    

    使用方法如下:

    docker build -t mychromiumfork_builder . # i'd like to pass -v ${PWD}/cache:/mychromiumfork/cache
    docker create -v ${PWD}/out:/mychromiumfork/out --name mychromiumfork mychromiumfork_builder /bin/true
    docker run -it --volumes-from=mychromiumfork mychromiumfork_builder
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   yamenk    7 年前

    目前还没有。当前卷只能装载到正在运行的容器上,而不能装载到映像上。

    检查这个 open issue 更多信息。

        2
  •  0
  •   Dan    7 年前

    如果要缓存频繁重复的操作以使构建更快,建议的方法是将最不频繁更改的命令推到Docker文件的顶部,将更频繁更改的文件推到文件的末尾。

    你可以通过自己构建dockerfile的顶部来划分和征服它,让我们把它标记为“我的缓存构建:最新”,然后再拆分第二个dockerfile

    FROM my_cache_build:latest
    ..
    

    这样,您就可以缓存Docker构建的一部分,这样在您重复经常更改的部分时就不需要花费时间。

    https://docs.docker.com/v17.09/engine/userguide/eng-image/dockerfile_best-practices/#run

    How to build Docker images quciker