使用docker在Ubuntu上安装最新版本的Mono

时间:2014-08-06 14:03:40

标签: ubuntu mono docker

到目前为止,这真的很痛苦!我只是想将最近的Mono版本放到我的Ubuntu docker容器中!似乎Ubuntu发行版已经过时了,我需要获得最近的构建,以便我可以从中运行ServiceStack API。

这是我的泊坞文件:

#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"]

我没有尝试从源代码构建,而是尝试过:

#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"]

哪个也行不通!

有没有人设法做到这一点?当然它应该比这更容易吗?

1 个答案:

答案 0 :(得分:2)

这里有一些东西似乎有点"奇怪"对我来说。

首先,您RUN一个sudo bash(要更改用户,您应该使用USER指令)。从容器的开头,您将具有root访问权限,因此您无需执行此操作。

在每个RUN命令中,您将为该图层生成一个新容器,我建议您将所有apt-get命令设置为一行(尽管这不太重要):

RUN apt-get -y install git autoconf libtool g++ gettext make mono-complete

(当您从非交互式环境中运行apt-get install时,我建议您也设置ENV DEBIAN_FRONTEND noninteractive,这样您就不会收到任何提示。)

使用您的Ubuntu版本时,apt源可能会过时。为了确保您可以正确下载所有包,我建议您在执行此操作之前在apt-get install之前运行更新。

RUN apt-get update

如上所述,每个"层" Dockerfile创建了一个新容器,因此在cd中使用RUN将无法正常工作。您应该使用WORKDIR指令代替:

WORKDIR /home/mono

运行docker build时,每个步骤都可能产生错误。你应该在构建时检查输出。

考虑到这一切,我已经设法从Git构建单声道,它似乎执行。到达这一点的Dockerfile如下(我已经取出了ADDCMD,请务必添加它们。我建议您查看https://docs.docker.com/reference/builder/上的Dockerfile参考。

一旦构建了容器,就可以通过运行docker run -t -i <IMAGE ID> /bin/bash进入bash(至少使用Ubuntu基础)。图像ID将显示为Successfully built <ID HERE>。从这里你可以调试你的图像无法正常工作的原因。

最后,可能需要构建FROM已安装Mono的现有映像。例如,如果你想从https://registry.hub.docker.com/u/thaiphan/mono/进行构建,那就

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