用于构建从git

时间:2017-04-16 15:47:47

标签: github docker cmake dockerfile

我从github克隆了FreeCAD的副本,我正在尝试创建一个docker文件,以便我可以在我的机器上本地开发它。

目标是:

  1. 我的机器上的git代码的本地副本
  2. 我可以修改代码
  3. 我可以构建调试和发布图像(我是否需要创建两个单独的图像?)
  4. 可以访问我的机器上的代码,以便我可以使用git进行源代码管理
  5. 这是我的Dockerfile的内容:

    # Get base image
    FROM phusion/baseimage
    
    # Use baseimage-docker's init system.
    CMD ["/sbin/my_init"]
    
    # Get the build pre-requisites
    RUN apt-get update
    RUN apt-get install -y build-essential cmake python python-matplotlib libtool
    RUN apt-get install -y libcoin80-dev libsoqt4-dev
    RUN apt-get install -y libxerces-c-dev libboost-dev libboost-filesystem-dev
    RUN apt-get install -y libboost-regex-dev
    RUN apt-get install -y libboost-program-options-dev libboost-signals-dev 
    RUN apt-get install -y libboost-thread-dev libboost-python-dev libqt4-dev 
    RUN apt-get install -y libqt4-opengl-dev qt4-dev-tools python-dev 
    RUN apt-get install -y python-pyside pyside-tools
    RUN apt-get install -y liboce*-dev oce-draw
    RUN apt-get install -y libeigen3-dev libqtwebkit-dev libshiboken-dev 
    RUN apt-get install -y libpyside-dev libode-dev swig libzipios++-dev 
    RUN apt-get install -y libfreetype6 libfreetype6-dev
    
    # to make Coin to support additional image file formats
    RUN apt-get install -y libsimage-dev
    
    # to register your installed files into your system's package manager, so yo can easily uninstall later
    RUN apt-get install -y checkinstall
    
    # needed for the 2D Drafting module
    RUN apt-get install -y python-qt4 python-pivy
    
    #  doxygen and libcoin80-doc (if you intend to generate source code documentation)
    RUN apt-get install -y doxygen libcoin80-doc
    
    # libspnav-dev (for 3Dconnexion devices support like the Space Navigator or Space Pilot)
    RUN apt-get install -y libspnav-dev
    
    # CMAke related issue for compiling on Ubuntu Xenial: http://forum.freecadweb.org/viewtopic.php?f=4&t=16292
    RUN apt-get install -y libmedc-dev
    RUN apt-get install -y libvtk6-dev
    RUN apt-get install -y libproj-dev
    
    # Get git
    RUN apt-get install -y git
    
    RUN git clone https://github.com/FreeCAD/FreeCAD.git freecad
    
    RUN cd freecad
    RUN mkdir freecad-debug
    RUN cd freecad-debug
    # command below is just a diagnostic to let me know wth I am (output is: /)
    # RUN pwd
    RUN cmake ../ -DFREECAD_USE_EXTERNAL_PIVY=1 -DCMAKE_BUILD_TYPE=Debug .
    #cmake -DFREECAD_USE_EXTERNAL_PIVY=1 -DCMAKE_BUILD_TYPE=Release .
    RUN make
    

    我尝试使用以下命令构建图像:

    docker build -tag freeCAD-my-fork .

    一切正常,直到我进入第一次cmake调用。然后我得到以下错误:

    CMake Error: The source directory "/" does not appear to contain CMakeLists.txt.
    Specify --help for usage, or press the help button on the CMake GUI.
    The command '/bin/sh -c cmake ../ -DFREECAD_USE_EXTERNAL_PIVY=1 -DCMAKE_BUILD_TYPE=Debug .' returned a non-zero code: 1
    

    我在我的Dockerfile中放置了RUN pwd,因此我可以找到运行cmake命令的位置,我惊讶地发现它是从根目录运行的。

    我认为这个问题是由于我对亲戚的使用造成的,并且它将由绝对路径修复 - 但是在克隆等时指定/path/to/my/copy/freecad,问题仍然存在。

    如何编写我的Dockerfile以实现上述目标(在我的问题开头说明)?

2 个答案:

答案 0 :(得分:1)

docker中的默认WORKDIR是" /"。所有docker命令都将在该目录中执行。有两个选项可以更改WORKDIR(https://docs.docker.com/engine/reference/builder/#workdir)或执行一层中的所有内容(在一个RUN命令中。)我采取了第二种方法。

克隆和构建在一层docker中执行的源代码。

RUN git clone https://github.com/FreeCAD/FreeCAD.git freecad \
&& cd freecad \
&& mkdir freecad-debug \
&& cd freecad-debug \
&& cmake ../ -DFREECAD_USE_EXTERNAL_PIVY=1 -DCMAKE_BUILD_TYPE=Debug . \
&& make

答案 1 :(得分:0)

您应该像使用run一样安装所有依赖项,但是在构建映像时但在运行容器时不应该实际构建和复制源代码文件。

通过这种方式,您可以根据需要重复使用图像。

使用build命令编写脚本并将其复制到图像中。然后在dockerfile的CMD部分运行该脚本。

要与容器共享git项目,可以使用docker run -v hostpath:containerpath imagename挂载本地文件。这样,hostpath中的任何文件都将在容器路径中对容器可见,反之亦然。或者你也可以从CMD调用的脚本中克隆克隆,但是你必须以某种方式将构建暴露给你的主机(一些已安装的卷)。