architecting .net applications for docker and container based deployments

Post on 12-Jul-2015

7.071 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Architecting .NET Applications for

Docker and Container Based

Deployments@Ben_Hall

Ben@BenHall.me.uk

Blog.BenHall.me.uk

Who?

Ocelot Uproar

@Ben_Hall

Tech Support > Tester > Developer > Founder >

Freelancer

Agenda

• What are containers?

• .NET running inside a Docker Container

• Two Containers

• Three Containers

• Four Containers, More!

• Future of Docker and Windows/.NET

A Load Balanced ASP.NET Website

running inside Docker

WHAT ARE CONTAINERS?

Deployments are hard.

They shouldn’t be.

Container

https://www.docker.com/whatisdocker/

Container…

Own Process Space

Own Network Interface

Own Root Directories

Sandboxed

Like a lightweight VM. But it’s not a VM.

Container…

Native CPU

Native Memory

Native IO

No Pre-Allocation

Zero Performance Overheard

Build, Ship and Run Any App, Anywhere

Docker - An open platform for distributed applications for developers and sysadmins.

In Real Life?

Digital Ocean Ubuntu Droplet

Node.js Node.js GoLang Mono

Static Site ElasticSearch ElasticSearch

Logstash Kibana Nginx Redis

- Easy deployment

- Isolated sandboxes

- Portability

- Development === Production

- Control

$ boot2docker

https://github.com/boot2docker/windows-installer

Production

Not much .NET on there…

At the moment they’re based on Linux.

Today Mono works, as does XSP and

ASP.NET vNext.

Tomorrow?

.NET APPLICATION RUNNING

INSIDE CONTAINER

$ docker run

Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

$ docker run--name === Friendly name--rm === Remove when finished-t === Attach to terminal-I === Interactive

ASP.NET Example

http://blog.benhall.me.uk/2014/10/running-nancyfx-inside-docker-container/

Dockerfile

Dockerfile - FROM

$ docker search

Dockerfile – ADD / WORKDIR /

RUN

Dockerfile - EXPOSE

Dockerfile – CMD /

ENTRYPOINT

$ docker build--t === Friendly name.

<Docker Hub Username>/<ProjectName>

$ docker images

$ docker run

$ docker ps-a === Show all containers

$ docker logs-f === tail the logs – watch them in real time

$ docker run –p $CONTAINERPORT

Why “$ curl 0.0.0.0:49218” ?

$ boot2docker ip

$ curl b2d:49218

Environment Variables

$ docker push

$ docker export / save

$ docker import / load

What do we have?

$ cd ~/SourceControl/HelloWorldVNext

$ cat Dockerfile

$ docker build -t benhall/aspnetvnext .

$ docker run -d -t -i -p 5000:5000 benhall/aspnetvnext

$ curl 192.168.59.103:5000

<h1>Hello from Razor!!<h1>

<h2>From 95a28c090686</h2>

$ docker push benhall/aspnetvnext

TWO CONTAINERS

Storing Data - Volumes

-v /opt/docker/scrapbook_elasticsearch:/data

-v /opt/docker/mysql:/var/lib/mysql

-v /docker/scrapbook/uploads:/app/public/uploads

$ docker run –link CONTAINER:ALIAS

Two Websites On Port 80?

Nginx

DockerGenGenerate files from docker container meta-data

https://github.com/jwilder/docker-gen

https://github.com/jwilder/nginx-proxy

THREE CONTAINERS

Fig

$ fig up

Identical for Mono/ASP.NET

FOUR AND MORE!

http://www.ryantomlinson.com/consul-service-discovery-in-a-microservice-world/

1) Like DockerGen, Consul

raises events on docker

events

2) Registrator adds new

containers details into Consul

3) Consul links containers IP /

Ports to DNS names

[tag.]<service>.service[.datacenter][.domain]

$ ping redis.service.east-aws.consul

$ ping redis.service.consul

https://github.com/BenHall/docker-loadbalancer-aspnet-demo

BRING IT BACK TO .NET

How should the app be

structure?

DOCKER AND AZURE

$ azure vm docker create -e 22 -l 'West US' ubuntu-docker

"b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04-LTS-

amd64-server-20140618.1-en-us-30GB" rgardler 1234abcdE$

http://msopentech.com/blog/2014/09/11/docker_host_in_azure/

$ docker --tls

-H tcp://ubuntu-docker.cloudapp.net:4243

info

http://msopentech.com/blog/2014/08/15/getting_started_docker_on_microsoft_azure/

$ docker --tls

-H tcp://ubuntu-docker.cloudapp.net:4243

run -t -i ubuntu bash

http://msopentech.com/blog/2014/08/15/getting_started_docker_on_microsoft_azure/

THE FUTURE?

Docker and Microsoft

Partnership

SQL Server as a Container?

Visual Studio as a Container?

IN SUMMARY…

Only tool I use for deployment

• Close gap between development and production

• Everything is a container!

• Running platforms like Logstash, ElasticSearch, Redis, EventStore, RavenDB, NancyFX etc? Consider containers for deployment.

THANK YOU

@Ben_HallBen@BenHall.me.ukBlog.BenHall.me.uk

top related