mono | Cell 1 | | Search

This Dockerfile builds two types of images: one based on Mono for running a.NET application, and another based on ASP.NET Core 1.1 for running an ASP.NET Core application. The images install necessary dependencies, copy files, set the working directory, and define entry points to run the applications using respective runtimes.

Cell 2

#FROM
mono:latest

#RUN
mono--
version
#RUN
ls - la
#ADD.
/subscription.services /
home / src
#ADD.
/act.subscription.management.sln /
home / src
#WORKDIR / home / src
#RUN
msbuild.
/subscription.services/
Subscription.Services.EloquaImport / Subscription.Services.EloquaImport.csproj
#RUN
mono
Subscription.Services.EloquaImport.exe

#FROM
microsoft / aspnetcore
:
1.1
FROM
microsoft / aspnetcore - build
:
1.0 - 1.1
ARG
source
EXPOSE
80
WORKDIR / app / src
ADD.
/*.sln /app/src/
ADD ./subscription.services/Subscription.Services.EloquaImport/*.csproj /app/src/subscription.services/Subscription.Services.EloquaImport/
ADD ./subscription.services/Subscription.Services.ZuoraExport/*.csproj /app/src/subscription.services/Subscription.Services.ZuoraExport/
ADD ./*.dcproj /app/src/

RUN /bin/bash -c "dotnet restore ./act.subscription.management.sln"

ADD . /app/src 
RUN /bin/bash -c "dotnet restore ./act.subscription.management.sln && dotnet publish ./act.subscription.management.sln -c Release -o ./obj/Docker/publish"

RUN cp -R ${source:-subscription.services/Subscription.Services.EloquaImport/obj/Docker/publish} /app

WORKDIR /app/publish
EXPOSE 80
ENTRYPOINT ["/usr/bin/dotnet", "/app/publish/Subscription.Services.EloquaImport.dll"]

What the code could have been:

# Use official Mono image as base
FROM mono:latest AS build

# Print Mono version
RUN mono --version

# List files in the current directory
RUN ls -la

# Copy subscription services and act subscription management solution files
ADD /subscription.services /home/src
ADD /act.subscription.management.sln /home/src

# Switch to the build directory
WORKDIR /home/src

# Build subscription services project
RUN msbuild./subscription.services/Subscription.Services.EloquaImport/Subscription.Services.EloquaImport.csproj

# Run the subscription services application
RUN mono./Subscription.Services.EloquaImport.exe

# Use official ASP.NET Core 1.1 image as base
FROM mvc:microsoft-aspnetcore-runtime-1.1 AS runtime

# Use official ASP.NET Core 1.1 runtime image as base
FROM mcr.microsoft.com/dotnet/core/sdk:1.1 AS build

# Set environment variable for source
ARG source

# Expose port 80
EXPOSE 80

# Set working directory
WORKDIR /app/src

# Copy solution files
COPY./act.subscription.management.sln /app/src/
COPY./subscription.services/Subscription.Services.EloquaImport/*.csproj /app/src/subscription.services/Subscription.Services.EloquaImport/
COPY./subscription.services/Subscription.Services.ZuoraExport/*.csproj /app/src/subscription.services/Subscription.Services.ZuoraExport/
COPY.//*.dcproj /app/src/

# Restore dependencies for the solution
RUN /bin/bash -c "dotnet restore./act.subscription.management.sln"

# Copy application code
COPY. /app/src

# Restore dependencies for the solution and publish it
RUN /bin/bash -c "dotnet restore./act.subscription.management.sln && dotnet publish./act.subscription.management.sln -c Release -o./obj/Docker/publish"

# Copy published application code
RUN cp -R ${source:-subscription.services/Subscription.Services.EloquaImport/obj/Docker/publish} /app

# Switch to the published directory
WORKDIR /app/publish

# Set entrypoint for the application
ENTRYPOINT ["/usr/bin/dotnet", "/app/publish/Subscription.Services.EloquaImport.dll"]

Dockerfile Breakdown

Mono-Based Image

Base Image

#FROM
mono:latest

Installation and Verification

#RUN
mono--
version

File System Inspection

#RUN
ls - la

Adding Files

#ADD.
/subscription.services /
home / src
#ADD.
/act.subscription.management.sln /
home / src

Setting Working Directory

#WORKDIR / home / src

Building and Running Application

#RUN
msbuild.
/subscription.services/
Subscription.Services.EloquaImport / Subscription.Services.EloquaImport.csproj
#RUN
mono
Subscription.Services.EloquaImport.exe

ASP.NET Core-Based Image

Base Image

FROM
microsoft / aspnetcore
:
1.1

Base Image for Building

FROM
microsoft / aspnetcore - build
:
1.0 - 1.1

Setting Argument and Expose Port

ARG
source
EXPOSE
80

Setting Working Directory

WORKDIR / app / src

Adding Files

ADD.
/*.sln /app/src/
ADD./subscription.services/Subscription.Services.EloquaImport/*.csproj /app/src/subscription.services/Subscription.Services.EloquaImport/
ADD./subscription.services/Subscription.Services.ZuoraExport/*.csproj /app/src/subscription.services/Subscription.Services.ZuoraExport/
ADD./*.dcproj /app/src/

Restoring Dependencies

RUN /bin/bash -c "dotnet restore./act.subscription.management.sln"

Copying Files

ADD. /app/src 

Building and Publishing Application

RUN /bin/bash -c "dotnet restore./act.subscription.management.sln && dotnet publish./act.subscription.management.sln -c Release -o./obj/Docker/publish"

Copying Published Files

RUN cp -R ${source:-subscription.services/Subscription.Services.EloquaImport/obj/Docker/publish} /app

Setting Working Directory

WORKDIR /app/publish

Exposing Port

EXPOSE 80

Setting Entry Point

ENTRYPOINT ["/usr/bin/dotnet", "/app/publish/Subscription.Services.EloquaImport.dll"]