使用docker在Ubuntu上安装Mono的最新版本
这到目前为止真的很痛苦! 我只想把最近的Mono版本join到我的Ubuntu docker容器中! 看来Ubuntu的发行版是可笑的过时了,我需要得到一个最近的构build,以便我可以从它运行一个ServiceStack API。
这是我的docker文件:
#DOCKER-VERSION 0.9.1 FROM ubuntu:14.04 ADD . /src RUN cd src RUN sudo bash RUN apt-get -y install git RUN apt-get -y install autoconf RUN apt-get -y install libtool RUN apt-get -y install g++ RUN apt-get -y install gettext RUN apt-get -y install make RUN apt-get -y install mono-complete RUN git clone git://github.com/mono/mono.git /home/mono RUN cd /home/mono RUN ./autogen.sh --prefix=/usr/local RUN make RUN make install CMD ["mono", "/build/Web.Api.exe"]
我没有从源头上build立,我也尝试过:
#DOCKER-VERSION 0.9.1 FROM ubuntu:14.04 MAINTAINER wayneo ADD . /src RUN sudo bash RUN apt-get update RUN apt-get -f install RUN apt-get -y -q install wget RUN wget -q http://download.opensuse.org/repositories/home:/tpokorra:/mono/xUbuntu_14.04/Release.key -O- | apt-key add - RUN apt-get remove -y --auto-remove wget RUN sh -c "echo 'deb http://download.opensuse.org/repositories/home:/tpokorra:/mono/xUbuntu_14.04/ /' >> /etc/apt/sources.list.d/mono-opt.list" RUN apt-get -q update RUN apt-get -y -q install mono-opt CMD ["/opt/mono/bin/mono", "/src/build/Web.Api.exe"]
哪个也行不通!
有没有人设法做到这一点? 当然应该比这更容易?
这里有几件事对我来说似乎有点“奇怪”。
首先,你RUN
一个sudo bash
(改变用户你应该使用USER
指令)。 从你的容器开始,你将拥有root权限,所以你不需要这样做。
在每一个RUN
命令中,你都会为这一层产生一个新的容器,我build议你把所有的apt-get
命令做成这样(尽pipe这不是太重要):
RUN apt-get -y install git autoconf libtool g++ gettext make mono-complete
(因为您正在从非交互式环境中运行apt-get install
,所以我build议您也设置ENV DEBIAN_FRONTEND noninteractive
以免出现任何提示。)
很可能你的Ubuntu版本的apt源将会过时。 为了确保你可以正确地下载你所有的软件包,我build议你在执行apt-get install
之前运行更新。
RUN apt-get update
如上所述,Dockerfile的每个“层”都会创build一个新的容器,所以在RUN
使用cd
无法工作。 您应该使用WORKDIR
指令来代替:
WORKDIR /home/mono
运行docker build
时,每个步骤都可能产生错误。 你应该在构build时检查输出。
考虑到这一切,我设法从Git构build单声道,似乎执行。 Dockerfile得到这一点是(我已经拿出你的ADD
和CMD
,一定要添加它们)。 我build议你查看https://docs.docker.com/reference/builder/上的Dockerfile参考。
一旦你build立了容器,你可以通过运行docker run -t -i <IMAGE ID> /bin/bash
进入bash(至less在Ubuntu的基础上)。 图像ID将显示为Successfully built <ID HERE>
。 从这里你可以debugging你的图像无法正常工作的原因。
最后,build立一个已安装了Mono的现有图像可能是值得的。 如果你想从https://registry.hub.docker.com/u/thaiphan/mono/构build,例如,你会做
FROM thaiphan/mono
而不是ubuntu
。 您也可以ADD
自己的文件并添加自己的CMD
。
我使用Mono制作的Dockerfile:
FROM ubuntu:14.04 ENV DEBIAN_FRONTEND noninteractive RUN apt-get update RUN apt-get -y install git autoconf libtool g++ gettext make mono-complete RUN git clone git://github.com/mono/mono.git /home/mono WORKDIR /home/mono RUN ./autogen.sh --prefix=/usr/local RUN make && make install