我从github克隆了FreeCAD的副本,我正在尝试创建一个docker文件,以便我可以在我的机器上本地开发它。
目标是:
这是我的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以实现上述目标(在我的问题开头说明)?
答案 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调用的脚本中克隆克隆,但是你必须以某种方式将构建暴露给你的主机(一些已安装的卷)。