Giter VIP home page Giter VIP logo

workshop-docker's Introduction

Workshop: Docker

Introduction

Dans ce Workshop, nous allons nous initier à Docker par la création de plusieurs services. Pour ceci, nous créerons un container basique sur Docker, puis nous la ferons communiquer avec un autre container contenant une base de données, et enfin avec une autre API contenue dans un autre container.

Mise en place

Pour ce workshop, il vous faudra installer Go et Docker. Installer Go Installer Docker

Etape 1: Mise en place de Docker

Clonez le repo de ce Workshop. La première étape va être de créer un Dockerfile qui fait compiler "server". Pour votre information, la commande afin de lancer server est go run main.go.

Une fois le Dockerfile créé, vous pouvez le tester de cette avec ces 3 commandes.

docker build -t workshop-docker ./server/
docker run -dp 8080:8080 workshop-docker
curl localhost:8080

docker build -t workshop-docker . va build votre Dockerfile sous le nom de container workshop-docker. docker run -dp 8080:8080 workshop-docker va lancer le container workshop-docker en fond (-d) et sur le port 8080:8080 (-p) Enfin, curl localhost:8080 va lancer une requête sur le port 8080, sur lequel une route a été pré-configurée afin de pouvoir tester une requête. Output attendu

Etape 2: docker-compose.yml

A la racine du repo, créez un fichier docker-compose.yml. Dans ce fichier, vous allez devoir créer un docker-compose qui crée un service server en se basant sur le Dockerfile contenu dans ./server. Il exposera ensuite sur le port 8080:8080.

Une fois votre docker-compose créé, vous pouvez le tester en lançant les commandes :

docker-compose build
docker-compose up -d
curl localhost:8080

Output attendu

Etape 3 : Deux autres containers

Passons maintenant à des choses un peu plus compliquées !

Créez un service db qui aura pour container_name workshop_db. Il se basera sur l'image mysql. Il lancera également la commande --default-authentication-plugin=mysql_native_password et redémarrera toujours jusqu'à ce qu'il se lance. Il exposera le port 3306:3306. Il prendra en variable d'environnement MYSQL_ROOT_PASSWORD: example. Enfin, il initialisera cette base de données avec le fichier ./server/mysql/init.sql.

Afin de pouvoir tester ce service, nous créerons également un service adminer. Il se basera sur l'image adminer et redémarrera également toujours jusqu'à ce qu'il se lance. Il exposera le port 5050:8080 et dépendra du service db.

Pour tester tout ceci, lancez le docker-compose comme indiqué à l'étape précédente et rendez-vous sur localhost:5050. Connectez-vous avez root en username et example en password. Si tout s'est bien passé, vous devriez avoir une table users avec ces informations une fois sélectionnée : output attendu Attention: Vu qu'il est très peu probable que vous réussissiez cette étape du premier coup, il faut que vous sachiez que même quand vous rebuildez un docker, si le volume a été déclaré en dehors du service (ce que vous devrez faire pour mysql), il restera de manière permanente. Pour afficher la liste de vos volumes, faites docker volume ls, et pour en supprimer un, docker volume rm nomduvolume. Si l'étape a été réussie, après un docker volume rm, vous pourrez rebuild votre mysql et elle aura les même informations que sur l'image ci-dessus.

Etape 4 : Accès à la BDD depuis le service server

Pour accéder à la BDD depuis le service server, vous allez tout d'abord devoir dé-commenter les lignes de connexion à la BDD dans le fichier main.go lignes à décommenter

Une fois ceci fait, vous devrez passer les variables d'environnement suivantes dans docker-compose.yml variables à passer DBUSER: root DBPASS: example DBADRESS: Adresse de la BDD, à vous de trouver ! DBNAME: area_database

Une fois ceci fait, vous pourrez faire une requête à localhost:8080/user_list, qui devrait vous retourner ceci : Output attendu

Etape 5: Votre propre service

Nous voici arrivés à l'étape finale ! Dans cette dernière étape, vous devrez créer votre propre service. Celui-ci devra communiquer avec server, récupérer le json de la liste des utilisateurs avec la route vue ci-dessus et la printer dans un format plus joli que celui vu précédemment.

Vous pouvez utiliser le langage de votre choix, mais le programme doit impérativement être exécuté dans un service Docker.

Exemple d'output attendu: exemple d'output attendu

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.