Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。本文主要介绍Docker 安装及配置C#编译环境。

1、安装Docker

参考文档:

安装Docker

Docker 入门教程

2、C#的Docker镜像

镜像是基于Alpine Linux映像的,本身的镜像只有5MB。C#的编译环境是基于Mono安装配置的。获取Mono的docker镜像,有两种方式,一种是通过docker pull命令获取,另一种是通过Dockerfile文件创建,具体如下,

1)使用docker pull命令

使用docker pull命令获取https://hub.docker.com/中存储公共镜像,如下,

docker pull frolvlad/alpine-mono

注意:使用docker run命令时,如果镜像本地不存在会自动调用docker pull获取镜像。

2)使用Dockerfile文件创建

Dockerfile文件:

FROM alpine:3.14
RUN apk add --no-cache mono --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing && \
    apk add --no-cache --virtual=.build-dependencies ca-certificates && \
    cert-sync /etc/ssl/certs/ca-certificates.crt && \
    apk del .build-dependencies

生成本地镜像:

docker build -t cjavapy/alpine-mono .

3、C#的Docker容器

创建容器可以使用https://hub.docker.com/上的frolvlad/alpine-mono镜像,也可以使用上面我们通过Dockerfile文件创建的本地镜像。

1)使用frolvlad/alpine-mono镜像

$ echo 'using System; class MainClass { public static void Main (string[] args) { Console.WriteLine ("Hello World"); } }' > sample.mono
$ docker run --rm -v "$(pwd)":/mnt frolvlad/alpine-mono sh -c "mcs -out:/mnt/sample.exe /mnt/sample.mono && mono /mnt/sample.exe"

2)使用cjavapy/alpine-mono镜像

$ echo 'using System; class MainClass { public static void Main (string[] args) { Console.WriteLine ("Hello World"); } }' > sample.mono
$ docker run --rm -v "$(pwd)":/mnt cjavapy/alpine-mono sh -c "mcs -out:/mnt/sample.exe /mnt/sample.mono && mono /mnt/sample.exe"

相关文档:

Docker 构建自定义镜像和Dockerfile文件

Docker 容器使用的命令

推荐文档