Xylos brands

Hoe bouw je een container?

In de vorige blogpost hadden we het over het verpakken van applicaties in een container. We gebruikten een eenvoudige webtoepassing die beelden kan herkennen en voerden deze toepassing uit op een pc en een Azure Container Instances (ACI). In deze post gaan we dieper in op het bouwen en verpakken van de toepassing.
 

1. Wat is je standpunt als ontwikkelaar?

Voor jou als ontwikkelaar verandert er heel weinig. Al speelt de keuze van besturingssysteem uiteraard een doorslaggevende rol. Wanneer we bij Xylos nieuwe applicaties bouwen, kiezen we doorgaans voor Linux. Onze Xylos-experts, en die van onze brands zoals Neo Learning en Bagaar, gebruiken talen zoals PHP, JavaScript (Node.js), .NET, .NET Core, Python en Go. Behalve het originele .NET, ondersteunen al deze talen Linux en Linux-containers.

De webtoepassing uit de eerdere blogpost schreven we in Go, die zowel Windows, Mac als Linux  ondersteunt. Je kan Go code compileren met een eenvoudig commando:

go build -o /usr/bin/app .

Bovenstaand commando resulteert in een Linux executabele genaamd “app”, in de folder /usr/bin. Om de webtoepassing te activeren, start je de “app” op. De webtoepassing is dan beschikbaar op http://localhost:9090 of, indien er een SSL-certificaat werd geconfigureerd, op https://localhost. Het is wel belangrijk om te weten dat deze web toepassing enkel op Linux en MacOS draait omdat ze een aantal afhankelijkheden bevat die niet werken met Windows.

Als ontwikkelaar kan je de applicatie lokaal testen en uitvoeren zonder dat er containers aan te pas komen. Neem zeker ook een kijkje in de code.

2. Hoe bouw je een container?

Als ontwikkelaar heb je zelf de touwtjes in handen om de webtoepassing te verpakken in een container. Zij kan hiervoor haar eigen werkstation gebruiken. Om een container te kunnen bouwen, is het volgende vereist:

  • De installatie van Docker Desktop: die biedt ondersteuning voor Mac, Linux en Windows
  • Een Dockerfile: een recept met instructies om de container image te bouwen

Lees zeker de Dockerfile met instructies voor de webtoepassing door.

Deze Dockerfile doet het volgende:

  • Start vanaf een bestaande image en bouw erop verder. Hier gebruik je de tensorflow/tensorflow:1.12.0 image die alle nodige software bevat om een deep learning model uit te voeren dat beelden kan herkennen.
  • Installeer de “TensorFlow C”-bibliotheek in de container image. Go en de Tensorflow ondersteuning voor Go hebben deze nodig.
  • Installeer Go in de container image.
  • Bouw de webtoepassing en bewaar de executabele “app” in /usr/bin.
  • Zorg ervoor dat “app” uitgevoerd wordt als de container gestart wordt. Het laatste commando in de Dockerfile (CMD [ "app" ]) zorgt daarvoor.

Met de Dockerfile in dezelfde folder als de code, kan je het volgende commando gebruiken om de container image te bouwen:

docker build -t xylos/nasnet .

Dit commando zal de image tensorflow/tensorflow:1.12.0 downloaden als je die nog niet hebt gebruikt. Na de download, voer je alle instructies in de Dockerfile uit en bewaar je het resultaat in een nieuwe container image met als naam xylos/nasnet.

Je kan de container image nu testen op haar werkstation met het volgende commando:

docker run -p 80:9090 -d xylos/nasnet

Het bovenstaande commando maakt de webtoepassing beschikbaar op http://localhost. Indien alles naar wens werkt, kan je de container image bewaren in een Docker repository. We doen dit met het onderstaande commando:

docker push xylos/nasnet

Docker weet dat we in dit geval een publieke registry willen gebruiken en zal om inloggegevens vragen van gebruiker Xylos.

3. En wat met Private registries?

Wanneer we bij Xylos een toepassing bouwen zoals OASE, plaatsen we de container image niet op Docker Hub maar in een private Azure Container Registry (ACR). ACR biedt ons de volgende voordelen:

  • Geo-replicatie: replicatie van de registry over meerdere Azure regio’s
  • Opslag images dicht bij je infrastructuur: bespaar op kosten gerelateerd aan netwerktrafiek
  • Azure AD-authenticatie

Een private registry is volledig compatibel met de bestaande Docker-tools zodat ontwikkelaars hun gekende tools kunnen blijven gebruiken.

4. Conclusie

We bespraken hoe je als ontwikkelaar een container image kan bouwen en bewaren in een container registry. Je kan de container image bouwen, testen en uploaden vanaf haar eigen werkstation. Om de toepassing in productie te brengen, heb je kennis nodig over Kubernetes en CI/CD (continuous integration/continuous deployment).

Klaar voor de volgende stap? In de volgende blogposts bespreken we Azure Kubernetes Service (AKS) om containers in productie te draaien en Azure DevOps als CI/CD oplossing.

Deel dit blogbericht

Also interesting for you

Laat een antwoord achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd.

Breng jouw kennis en skills naar een hoger niveau

Schrijf nu in voor onze nieuwsbrief en krijg maandelijks:

  • Uitnodigingen voor Xylos' events & webinars
  • De laatste blogposts en cases
  • Nieuwste IT-trends