Hello World from #NET docker container in Linux

Hello World from #NET docker container in Linux

As developers are moving to containerize software deployment mostly running on Linux servers, Microsoft does not want to stand behind. Microsoft has officially released docker containers to run asp.net and #net applications. For example, now you can create asp website and run it in container, or you can create an API service in C#.

Few days ago I launched Windows sample application as container and was really amassed that it is working. After that I decided to create a small tutorial, showing how I can use Visual Studio to create “Hello World” application and launched it as container on my Linux server.

Step-by-step guide.
1. You need to make sure that “.NET Core cross-platform development” and “ASP.NET and web development” components are enabled in Visual Studio.

You need to start Visual Studio installer and make modifications if necessary. You can do it by running: “C:\Program Files (x86)\Microsoft Visual Studio\Installer\vs_installer.exe” application.

Hello World from #NET docker container in Linux

After clicking on “Modify” you need to add required modules: “.NET Core cross-platform development” and “ASP.NET and web development“.

2. Launch Visual Studio and create a new project:

File->New->Project:

Hello World from #NET docker container in Linux

You need to specify application and and location on disk. Next screen will show up. I used API application.

Hello World from #NET docker container in Linux

Now, Visual Studio will create simple application with all the necessary pre-configuration done.

After that you can compile and build the code and check that it is working using regular tools at Windows.

3. Hello-World modification

I made very small modification in “ValuesController.cs” file as following:

Hello World from #NET docker container in Linux

So, before running the code in container, I wanted to check that my code is actually working:

Hello World from #NET docker container in Linux

4. Create a Docker file.

Create and place Docker file in the root of your project (the directory with obj and bin files). In my case it was in “C:\code\WebApplication1\WebApplication1\Dockerfile”


FROM microsoft/aspnetcore-build:2.0 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM microsoft/aspnetcore:2.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "WebApplication1.dll"]

Make sure you name your project dll file correctly in the last line: ENTRYPOINT [“dotnet”, “WebApplication1.dll“]

5. Optional step: Uploading code to Linux.

This step is optional because Microsoft has ported docker utilities to Windows. I am used to run these tools on Linux so I simply copied all project files to my Linux server and executed docker build command from their.

6. Running docker build and start container:

Run this command: docker build -t aspnetapp .

Hello World from #NET docker container in Linux

Execute code: docker run –rm -d -p 8888:80 –name myapp aspnetapp

6. Check Hello-World.

Connect to Linux server on port configured and open “/api/values” url.

Hello World from #NET docker container in Linux

I hope you will find this article useful.

 

Additional information:

  • https://hub.docker.com/r/microsoft/dotnet/
  • https://hub.docker.com/r/microsoft/aspnetcore/
  • https://docs.docker.com/engine/examples/dotnetcore/

About the author

Yuli Stremovsky
Yuli StremovskyParanoid Security Guy
For the past 15 years I’ve been leading the evolution of startups and enterprises to achieve the highest level of security and compliance. Throughout my career I’ve been a Cyber Security expert and advanced solutions architect with many years of hands on experience both on offensive and defensive side. Knowledgeable at the highest level in application development, networking, data and databases, web applications, large scale Software as a Service solutions, cloud security and blockchain technologies.

I’ve been working with CISO’s of international enterprises, helping them set Information Security strategy, and overseeing the implementation of these recommendations. As part of these projects, I’ve been assisting companies to achieve compliance in GDPR, PCI, HIPAA and SOX.

Among my credits, I was a founder of a database security company GreenSQL/Hexatier which was acquired by Huawei and I’ve co-founded Kesem.io, Secure multi-signature Crypto wallet.

Specialties: Software and cloud architecture, Compliance (GDPR, HIPAA, PCI, SOX), blockchain technologies, software development, secure architectures, project management and low level research.