Fermer

octobre 31, 2018

Compilé statiquement Allez sur le service de conteneur cloud Alibaba –


Lors de notre récent concours, nous avons reçu de nombreuses contributions intéressantes afin de trouver le meilleur conseil pour tirer le meilleur parti des services Alibaba Cloud . Ce fut une tâche amusante mais difficile pour nos juges de choisir les gagnants parmi tant d’entrées utiles et intéressantes. Mais hélas, après des débats enflammés et des débats houleux, ils ont décidé que le troisième prix du concours serait attribué à David Banham. Son article gagnant est un didacticiel succinct sur la compilation statique d'un programme Go et l'utilisation de Docker pour le conteneuriser et le distribuer. révolutionnent le paysage nuage. Les médecins de cabinet diront qu’il ne s’agit que de logiciels exécutés sur l’ordinateur de quelqu'un d’autre, mais la différence est que k8s et Docker fournissent en réalité une API de gestion indépendante de la plate-forme. Si vous construisez vos pipelines DevOps avec des k8, vous obtenez le frottement de commutation le plus faible possible entre AWS, Google Cloud, Azure et Alibaba. Plus on peut se rapprocher du rêve d'écrire une fois, de courir n'importe où, mieux c'est!

Un autre outil que j'aime beaucoup pour améliorer la portabilité des logiciels est le langage Go. La compilation croisée dans Go est aussi simple que de tomber d’un journal. Je développe des logiciels sur mon ordinateur portable Linux et, en un rien de temps, je peux créer des fichiers binaires pour Windows, OSX, WASM, etc.! Voici l'extrait de Makefile que j'utilise pour le faire:

 name = demo

PLATEFORMES: = linux / amd64 windows / amd64 linux / arm darwin / amd64

temp = $ (subst /,, $ @)
os = $ (mot 1, $ (temp))
arch = $ (mot 2, $ (temp))

Libération:

make -l inner_release

version_ intérieure: $ (PLATEFORMES)

$ (PLATEFORMES):
@ -mkdir -p ../web/api/clients/$(os )-$(arch)
@ -rm ../web/api/clients/$(os )-$(arch)/*
GOOS = $ (os) GOARCH = $ (arch) allez construire -o '../web/api/clients/$(os)-$(arch)/$(name).
@chmod + x ../web/api/clients/$(os )-$(arch)/$(nom)
@if [ $(os) = windows ]; then mv ../web/api/clients/$(os )-$(arch)/$(name) ../web/api/clients/$(os )-$(arch)/$(name).exe ; Fi
zip --junk-path ../web/api/clients/$(os )-$(arch)/$(nom )$(os)-$(arch).zip ../web/api/clients/$ (os) - $ (arch) / *
@if [ $(os) = windows ]; puis cp ../web/api/clients/$(os )-$(arch)/$(name).exe ../web/api/clients/$(os )-$(arch)/$(name) ; Fi

Propre! Cela vous donnera un petit binaire bien rangé qui fonctionnera sur vos systèmes d’exploitation cibles. Même si c’est excessif si vous ciblez un hôte Docker tel que Cloud Container Service. Tout ce que vous avez à faire est simplement GOOS = linux GOARCH = amd64 go build et vous avez terminé! Ensuite, il vous suffit de choisir votre distribution Linux préférée et de l'intégrer au fichier Dockerfile.

Et si nous voulions simplifier encore plus nos vies, cependant? Et si nous pouvions supprimer complètement la distribution Linux?

Go prend en charge la compilation de fichiers binaires liés de manière statique. Cela signifie que nous pouvons écrire du code qui ne repose sur aucune DLL externe. Observez cette magie Dockerfile:

 From scratch

AJOUTER ./bin/web / app

POINT D'ENTRÉE [" / app "]

Qu'est-ce que le scratch? Ce n'est rien. Cela indique à Docker de ne regrouper que le noyau Linux et les éléments de base nécessaires à son fonctionnement. Plus petit que Ubuntu? Il y a Alpine. Plus petit que Alpine?

Quoi de plus cool que d’être Alpine? Glace froide! Euh, gratter. Très bien Très bien Très bien.

L'avantage de cela est que nous retirons toute une série de pièces mobiles de notre déploiement. Il n’ya aucune chance qu'une décision des responsables de la distribution de grouper ou de ne pas grouper un service dans leur distribution arrête votre environnement de production. Aucune distorsion de sécurité introduite par le code de la distribution. Aucune mise à jour à gérer. Il n'y a que… rien.

En prime, vous obtenez une minuscule image Docker très facile à utiliser. Plus facile à expédier dans n'importe quel nuage que vous aimez!

Écrivez un peu de Go, compilez-le de manière statique et mettez-le dans un conteneur Docker à gratter. Déployez-le sur Alibaba, AWS et Google Cloud, juste pour vous amuser! Voir quel service vous convient le mieux.




Source link