Friday, June 23, 2017

Visual C# Technical Guru - May 2017

Another month as a judge in Microsoft TechNet Guru Awards under Visual C# category. The TechNet Guru Awards celebrate the technical articles on Microsoft TechNet.

Post in WikiNinjas Official Blog,
image
Visual C# Technical Guru - May 2017
Happy Coding.

Regards,
Jaliya

Wednesday, June 21, 2017

Wrote a post on Wiki Life at Official Blog of TechNet Wiki

Wrote a post in Wiki Ninjas - Official Blog of TechNet Wiki. The title of the post is Wiki Life: TechNet Guru Competition – How far we have come.
image
Wiki Life: TechNet Guru Competition – How far we have come

Happy Coding.

Regards,
Jaliya

Tuesday, June 20, 2017

Creating a Docker Container Running ASP.NET Core Web Application Powered by React and Redux

This is likely going to be a quick post. I wanted to have a Docker Container running ASP.NET Core Web Application powered by React and Redux. Luckily there are nice SPA templates introduced by Microsoft, and there we have React, Redux template.
SNAGHTML3757723
MVC ASP.NET Core with React.js and Redux
I created the application and did a publish. Then I have added a Dockerfile with following configs.

Dockerfile
FROM microsoft/aspnetcore:1.1.2
LABEL Name=ReactReduxApp Version=0.0.0
ARG source
WORKDIR /app
EXPOSE 30000
COPY ${source:-bin/Release/netcoreapp1.1/publish} .
RUN apt-get update
# Installing npm
RUN apt-get install -y npm
# Installing Node.js
RUN npm install -g n; n stable
ENTRYPOINT dotnet ReactReduxApp.dll    
Next I have build the image. This will install all npm and Node.js to my base Image. Once that is done, I have started the Container and all is good.
image
docker run
image
MVC ASP.NET Core with React.js and Redux Running in Docker
If you want to learn how to create a ASP.NET Core MVC Application running inside a Docker Linux Container this post should help.

Complete source code is available on GitHub.
https://github.com/jaliyaudagedara/Blog-Post-Samples/tree/master/ReactReduxApp

Happy Coding.

Regards,
Jaliya

Thursday, June 1, 2017

Creating a Release Build of an ASP.NET Core Project using Docker ASP.NET Core Build Image

In one of my previous posts I wrote about Creating and Debugging Docker Enabled .NET Core Project in Visual Studio 2017 and in this post let’s see how we can create a release build of an ASP.NET Core Project using official Docker ASP.NET Core Build Image.

Right now I have a Docker support enabled ASP.NET Core MVC Application created (If you don't know how, you can read my above mentioned previous post).

Note: I have created the solution using Visual Studio 2017, but you don't need to have Visual Studio 2017 to create this solution. dotnet SDK and Visual Studio Code should be more than enough. For the next steps, we only need dotnet SDK and cmd/PowerShell.

Let's proceed. I have a clean solution, no obj/bin folders present yet.
SNAGHTML9e60569
No obj/bin folders
I have a PowerShell window opened on the root folder level.
PS C:\Users\Jaliya\Desktop\DockerComposeWebApp>
Next to do a Release build what I would do is do a dotnet restore and a publish like below.
# Restore packages
dotnet restore .\DockerComposeWebApp\DockerComposeWebApp.csproj
 
# Publish on Release mode
dotnet publish -c Release .\DockerComposeWebApp\DockerComposeWebApp.csproj
But in that case the build would be done on my local machine, instead here I want to use a Docker Container to do the building.

Now let’s open up the docker-compose.ci.build.yml in my local folder. Remember I did not write this file myself, Visual Studio 2017 created this for me when I have enabled Docker Support for my project (if you want to know how to get these docker-compose.xxxxx.yml files created when using Visual Studio Code, you can read this previous post of mine Running ASP.NET Core MVC Application inside a Docker Linux Container from Windows).

docker-compose.ci.build.yml
version: '2'
services:
  ci-build:
    image: microsoft/aspnetcore-build:1.0-1.1
    volumes:
      - .:/src
    working_dir: /src    
    command: /bin/bash -c "dotnet restore ./DockerComposeWebApp.sln && dotnet publish ./DockerComposeWebApp.sln -c Release -o ./obj/Docker/publish"
Here you can see that we have a service named ci-build which uses microsoft/aspnetcore-build Image and that is the official Image for building ASP.NET Core applications (version will be changed time to time). Then my current folder is getting mapped to src folder in the ci-build Container (which is not yet created). After Container is created and running, it’s working directory will get changed to src and the given command will get executed. And basically what the command does is a dotnet restore and a dotnet publish (here output path is set to .\obj\Docker\publish).

Now from PowerShell let’s run the following command.
# docker-compose up: Builds, (re)creates, starts, and attaches to containers for a service.
PS C:\Users\Jaliya\Desktop\DockerComposeWebApp> docker-compose -f .\docker-compose.ci.build.yml up
image
docker-compose up
(Note: since I already had microsoft/aspnetcore-build Image locally, it didn't get downloaded again. If not, downloading status of the image will be displayed here.)

Now if we examine the \DockerComposeWebApp project folder, we can see obj/bin folders has been created and if we go to .\obj\Docker\publish folder, build contents are there.
image
Published Folder
Now we have a Release build created using a Docker Container (remember we didn’t do the build on our local machine).

For a further step, to make sure all is good, let’s package this content into a another Docker Container and see whether it works.

docker-compose.yml
version: '2'
services:
  dockercomposewebapp:
    image: dockercomposewebapp    
    build:
      context: ./DockerComposeWebApp      
      dockerfile: Dockerfile
Dockerfile
FROM microsoft/aspnetcore:1.1
ARG source
WORKDIR /app
EXPOSE 80
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "DockerComposeWebApp.dll"]
docker-compose.override.yml
version: '2'
services:
  dockercomposewebapp:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development    
    ports:
      - "80"
PS C:\Users\Jaliya\Desktop\DockerComposeWebApp> docker-compose -f .\docker-compose.yml -f .\docker-compose.override.yml up
image
docker-compose up
SNAGHTMLa547c48
docker images & docker ps
:latest Image of a build has been created and a Container is running which got instantiated from that Image.

Now let’s just browse the running port. And yes, it is working.
image
Site Running inside a Docker Container
Happy Coding.

Regards,
Jaliya