Exercice sur les Dockers



Documents pareils
Cellier Clément, Maginot Quentin, Tripier Axel, Zaorski Jean, Zini Robin. 18 mars 2015

DOCKER MEETUP. Christophe Labouisse

Réalisation d un portail captif d accès authentifié à Internet

04/02/2014 Tutoriel. Lubuntu & glpi. thomas [NOM DE LA SOCIETE]

Chapitre IX : Virtualisation

Gérer ses environnements de développement avec Vagrant RMLL 2012

Atelier : Virtualisation avec Xen

INFO-F-404 : Techniques avancées de systèmes d exploitation

XtremWeb-HEP Interconnecting jobs over DG. Virtualization over DG. Oleg Lodygensky Laboratoire de l Accélérateur Linéaire

Environnement Informatique EMSE Linux

Administration Linux - FTP

TP LINUX : MISE EN PLACE DU SERVEUR DE MESSAGERIE QMAIL

Applications client/serveur TCP/IP - Sockets Rappels. C.Crochepeyre Applications CS 1

Serveur Linux : FTP. Mise en place d un service FTP sous Linux. Bouron Dimitri 20/04/2014

Le prototype de la fonction main()

Installation de Zabbix

L installation a quelque peu changée depuis les derniers tutos, voici une actualisation.

Mon premier rpm. 7 juin Avant de commencer RPM URPMI RPMBUILD... 2

Architecture de la plateforme SBC

DNS Server RPC Interface buffer overflow. Céline COLLUMEAU Nicolas BODIN

Personnes ressources Tice. Académie de Rouen

Installation de VirtualPOPC-1 sur Ubuntu Server LTS 64bits

Couche application. La couche application est la plus élevée du modèle de référence.

Master1 ère année. Réseaux avancés I. TP nº5 filière ISICG

Programmation système en C/C++

Linux et le Shell. Francois BAYART. Atelier du samedi 20 Novembre

Chi rement des postes PC / MAC / LINUX

Programmation C. Apprendre à développer des programmes simples dans le langage C

Tutoriel Création d une source Cydia et compilation des packages sous Linux

Universal Robots. Fiche Méthode : Installation du simulateur Polyscope

Introduction au langage C

Communication par sockets

Programmation système I Les entrées/sorties

Environnements informatiques

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Installation d'un serveur sftp avec connexion par login et clé rsa.

1 Démarrage de Marionnet

Les différentes méthodes pour se connecter

Virtual Box Mettez un PC dans votre... PC

But de cette présentation. Bac à sable (Sandbox) Principes. Principes. Hainaut P

TP réseaux 4 : Installation et configuration d'un serveur Web Apache

BTS SIO Dossier BTS. PURCHLA Romain

Vanilla : Virtual Box

Stéphane DERACO, DSI CNRS l Argos Devops : de l hyperviseur aux conteneurs l 11/12/2014 DOCKER

Installer un serveur web de développement avec VirtualBox

OS Réseaux et Programmation Système - C5

Installer un domaine DNS

Enoncé du TP 8 Système

1. Présentation du TP

SOMMAIRE. 01_Installation ESXi Serveur HP.doc. Chapitre 1 Installation ESXi 5.1 2

INSTALLATION DEBIAN 7 (NETINSTALL) SUR VM

VMware ESX/ESXi. 1. Les composants d ESX. VMware ESX4 est le cœur de l infrastructure vsphere 4.

Table des matières. 1. Installation de VMware ESXI Pré-requis Installation... 3

L informatique en BCPST

VXPERT SYSTEMES. CITRIX NETSCALER 10.1 et SMS PASSCODE 6.2. Guide d installation et de configuration pour Xenapp 6.5 avec SMS PASSCODE 6.

3IS - Système d'exploitation linux - Programmation système

Serveur Acronis Backup & Recovery 10 pour Linux. Update 5. Guide d'installation

Programmation système de commandes en C

Le Cloud France Grilles : Accès et utilisation. Jérôme PANSANEL <jerome.pansanel@iphc.cnrs.fr> Directeur technique France Grilles

EPREUVE PRATIQUE DES TECHNIQUES INFORMATIQUES ACTIVITE N 1. Thème de l activité : Configuration d un firewall

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Debian Lenny - Virtualisation avec Libvirt/KVM Debian GNU/Linux

Tour d'horizon Bureau client Daemon's Aller plus loin

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Documentation FOG. 3. Choisir le nom de la machine, le nom d utilisateur et le mot de passe correspondant (par exemple : fog, password)

Atelier La notion de session utilisateur sous Linux

Administration de Parc Informatique TP07 : Installation de Linux Debian

Imprimantes et partage réseau sous Samba avec authentification Active Directory

Installation de la plate-forme Liberacces 2.0 «Intégrale» avec LiberInstall

Haute disponibilité des données

LXC : Une technologie de contextualisation ultra light intégrée au kernel Linux

Oracle 11g. Installation et administration. Claude Duvallet 1/36

Pratique et administration des systèmes

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Guide Installation Serveur Extensive Testing

Oracle Learning Library Tutoriel Database 12c Installer le logiciel Oracle Database et créer une Database

ArcGis Server 10 (sur VM CentOS bits) DOCUMENT D INSTALLATION

Guide Installation Serveur Extensive Testing

PRESENTATION RESSOURCES. Christian Dupaty BTS Systèmes Numériques Lycée Fourcade Gardanne Académie d Aix Marseille

Pharmed. gestion de pharmacie hospitalière. Installation / déploiement

Sauvegardes par Internet avec Rsync

2X ThinClientServer Guide d utilisation

TP n 2 : Installation et administration du serveur ProFTP. Partie 1 : Fonctionnement du protocole FTP (pas plus de 15min)

PPe jaune. Domingues Almeida Nicolas Collin Leo Ferdioui Lamia Sannier Vincent [PPE PROJET FTP]

Le langage C. Séance n 4

TUTORIEL D INSTALLATION D ORACLE ET DE SQL DEVELOPPER TUTORIEL D INSTALLATION D ORACLE...1 ET DE SQL DEVELOPPER...1

SSH. Romain Vimont. 7 juin Ubuntu-Party

Request Tracker pour les Nuls. Yves Agostini - YVESAGO

Raspberry pi : Développer une petite application web sur Raspberry

Configurer la supervision pour une base MS SQL Server Viadéis Services

Chapitre 10 : Logiciels

Serveur de partage de documents. Étude et proposition d'une solution afin de mettre en place un serveur de partage de documents.

VAGRANT POUR LES DÉVELOPPEURS

TP LINUX : LINUX-SAMBA SERVEUR DE FICHIERS POUR UTILISATEURS WINDOWS

Installation d'un serveur FTP géré par une base de données MySQL

But de cette présentation. Contrôleur de domaine avec Samba (rédigé pour Ubuntu Server) Introduction. Samba: principes

Serveurs de noms Protocoles HTTP et FTP

Transcription:

Exercice sur les Dockers Les parties composant les Dockers: 1 docker daemon: est un démon qui gère les dockers (les conteneurs LXC) qui tournent sur la machine hôte 2 docker CLI: une série de commandes utiles pour interagir avec le démon 3 docker image index: est une base d images binaires (publiques ou privées) Les éléments relatifs aux Dockers: 1 docker containers: des répertoires contenant l application. 2 docker images: images binaires ou OS de base (ex. centos, Ubuntu, etc.) 3 Dockerfiles: des scripts qui automatisent la manipulation d images. Différence entre VM et Conteneurs http://patg.net/containers,virtualization,docker/2014/06/05/docker-intro/ 1. Installez Linux Ubuntu sur votre machine réelle ou bien sur une machine virtuelle de Virtual Box. Voir document installation de VirtualBox et une VM Linux. 2. Installez le serveur Docker Dans un premier temps, on peut vérifier la version de Linux : lsb_release -a Le démon Docker est normalement installé mais vous pourrez tout de même essayer de l installer pour s en assurer (voir aussi : https://docs.docker.com/installation/ubuntulinux/) 1/10 Samia Bouzefrane CNAM

$ sudo apt-get update $ sudo apt-get install docker.io $ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker $ sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io // rajouter la clé associée au repository $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 3. Manipulation de conteneurs La commande suivante devrait vous permettre de télécharger la première fois une image légère centos à partir du Cloud (repository), la démarrer dans un conteneur avant de lancer une session shell: $ sudo docker run -i -t centos /bin/bash Conteneur interactif: $ sudo docker run -t -i centos /bin/bash root@af8bae53bdd3:/# -i : utilisation interactive -t : affichage sur terminal Exemple: root@af8bae53bdd3:/# pwd / root@af8bae53bdd3:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var Pour quitter: 2/10 Samia Bouzefrane CNAM

root@af8bae53bdd3:/# exit Autre exemple: Un conteneur lancé en arrière plan (-d) qui lance un script. Cette commande retourne l ID du conteneur. $ sudo docker run -d centos /bin/sh -c "while true; do echo hello world; sleep 1; done" 1e5535038e285177d5214659a068137486f96ee5c2e85a4ac52dc83f2ebe4147 is the container ID provided by the docker daemon Quelques commandes de manipulation de conteneurs a. Affiche la version du Docker et donne en plus la version du langage Go utilisé : $ sudo docker version b. Affiche la liste des containers : $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1e5535038e28 ubuntu:14.04 /bin/sh -c 'while tr 2 minutes ago Up 1 minute insane_babbage Affiche la liste des conteneurs déjà lances: $ sudo docker ps l Affiche la liste des conteneurs actifs: $ sudo docker ps Affcihe tous les conteneurs y compris ceux qui sont stoppés ou terminés: $ sudo docker ps a c. Affiche les logs : $ sudo docker logs insane_babbage hello world hello world 3/10 Samia Bouzefrane CNAM

hello world... d. Stoppe un container: $ sudo docker stop insane_babbage e. Voir ce que le client Docker peut faire: $ sudo docker Voir la liste de commandes: Commands: attach build commit Attach to a running container Build an image from a Dockerfile Create a new image from a container's changes... On peut passer l option -- help, exemple : $ sudo docker attach --help 4. Manipulation d images binaires La commande suivante affiche la liste des images binaires dont nous disposons en local : $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE training/webapp latest fc77f57ad303 2 weeks ago 280.5 MB ubuntu 13.10 5e019ab7bf6d 3 weeks ago 180 MB 4/10 Samia Bouzefrane CNAM

ubuntu saucy 5e019ab7bf6d 4 weeks ago 180 MB ubuntu 12.04 74fe38d11401 4 weeks ago 209.6 MB On peut recherche une image sur le Cloud (Docker repository) : $ sudo docker search opensuse Pour obtenir une nouvelle image, on peut en pré-charger une comme par exemple opensuse : $ sudo docker pull opensuse Pulling repository opensuse b7de3133ff98: Pulling dependent layers 5cc9e91966f7: Pulling fs layer 511136ea3c5a: Download complete ef52fb1fe610: Download complete... Ainsi lors de cette commande, il ne sera pas nécessaire de faire du téléchargement : $ sudo docker run -t -i opensuse /bin/bash bash-4.1# 5. Suivre les indications données dans ce lien pour vous enregistrer et créer votre propre espace de stockage (repository ou Hub) sur le Cloud : https://docs.docker.com/userguide/dockerhub/ Une manière de créer un compte est de lancer la commande suivante : $ sudo docker login Un fichier.dockercfg contient les authentifications. La création du repository personnel nécessite une adresse mail, un login (par exemple Samia) et un mot de passe. 5/10 Samia Bouzefrane CNAM

6. Créer un container avec une image binaire Opensuse. Enrichir Opensuse en installant une application. Par exemple un programme C jouant le rôle de serveur et communiquant via des sockets avec un Client C. Il y a beaucoup d exemples de programmes en C sur Internet, voir par exemple ici : http://www.binarytides.com/server-client-example-c-sockets-linux/ Sauvegarder la nouvelle image dans votre Hub personnel. sudo docker run -t -i opensuse /bin/bash sudo docker ps l On peut identifier chaque container avec container ID qui est une succession de chiffres. L image opensuse est très basique et ne contient ni compilateur gcc ni éditeur de texte, il faut donc les installer pour pouvoir modifier cette image et y créer un programme serveur en langage C par exemple. Pour installer le compilateur gcc sur opensuse il faut utiliser la commande suivante : zypper install gcc Pour pouvoir éditer des fichiers sur opensuse, il faut installer vi ou vim : zypper install vi zypper install vim Sur opensuse créons un fichier contenant le code du serveur en C (server.c) qui sera compilé et qui va générer un exécutable (server.o) avec la commande suivante: gcc server.c -o server.o Une fois toutes les modifications de opensuse terminées, on exécute la commande exit pour sortir du container. Cependant ceci ne permet pas de sauvegarder directement le contenu du container. Pour cela, il faut créer une image à partir de ce container. Nous allons appeler cette nouvelle image opensuse:v2. Toute modification de l image binaire associée à un container (de numéro par exemple 3f5907e5b0f) requiert un commit : sudo docker commit -m="added server" -a="samia" 3f5907e5b0f samia/opensuse:v2 Pour sauvegarder la nouvelle image dans le Hub personnel (Cloud), il faut utiliser la commande push. Cette opération exige de fournir le login, mot de passe et email utilisés sur le Cloud. 6/10 Samia Bouzefrane CNAM

sudo docker push samia/opensuse Reconnectez-vous à votre repository pour vérifier s il y a bien votre opensuse. 7. Supprimer l image binaire localement de la machine. La suppression se fait avec la commande sudo docker rmi -f opensuse:v2 8. Ramener votre image du Hub et tester l application intégrée dans l image en l appelant via un Client qui se lance sous Ubuntu. Ceci nécessitera un mapping entre l adresse IP locale de l image opensuse avec l adresse IP accessible via Ubuntu. Pour charger l'image à partir du repository personnel il faut utiliser la commande suivante: sudo docker run -i -t samia/opensuse /bin/bash Pour lancer le serveur sur l image ainsi démarrée, il faut faire un mapping entre l adresse IP de la machine hôte Ubuntu et l adresse IP de l image opensuse. Ceci permettra de faire suivre les requêtes du Client vers le serveur lancé dans le container. L option p est utilisée pour désigner les ports et adresses IP. Dans notre exemple, nous lions le port 5013 du container au port 5013 de la machine locale (adresse ip localhost : 127.0.0.1). sudo docker run -i -t -p 127.0.0.1:5013:5013 samia/opensuse:v2./server.o Le serveur se met alors en attente d'une connexion du client. On peut donc lancer le client sur Ubuntu avec la commande :./client.o 7/10 Samia Bouzefrane CNAM

Annexes: http://www.binarytides.com/server-client-example-c-sockets-linux/ /* C socket server example */ #include<stdio.h> #include<string.h> //strlen #include<sys/socket.h> #include<arpa/inet.h> //inet_addr #include<unistd.h> //write int main(int argc, char *argv[]) int socket_desc, client_sock, c, read_size; struct sockaddr_in server, client; char client_message[2000]; //Create socket socket_desc = socket(af_inet, SOCK_STREAM, 0); if (socket_desc == -1) printf("could not create socket"); puts("socket created"); //Prepare the sockaddr_in structure server.sin_family = AF_INET; server.sin_addr.s_addr = INADDR_ANY; server.sin_port = htons( 8888 ); //Bind if( bind(socket_desc,(struct sockaddr *)&server, sizeof(server)) < 0) //print the error message perror("bind failed. Error"); return 1; puts("bind done"); //Listen listen(socket_desc, 3); //Accept and incoming connection puts("waiting for incoming connections..."); c = sizeof(struct sockaddr_in); //accept connection from an incoming client client_sock = accept(socket_desc, (struct sockaddr *)&client, (socklen_t*)&c); if (client_sock < 0) perror("accept failed"); return 1; puts("connection accepted"); //Receive a message from client while( (read_size = recv(client_sock, client_message, 2000, 0)) > 0 ) //Send the message back to client write(client_sock, client_message, strlen(client_message)); 8/10 Samia Bouzefrane CNAM

if(read_size == 0) puts("client disconnected"); fflush(stdout); else if(read_size == -1) perror("recv failed"); return 0; /* C ECHO client example using sockets */ #include<stdio.h> //printf #include<string.h> //strlen #include<sys/socket.h> //socket #include<arpa/inet.h> //inet_addr int main(int argc, char *argv[]) int sock; struct sockaddr_in server; char message[1000], server_reply[2000]; //Create socket sock = socket(af_inet, SOCK_STREAM, 0); if (sock == -1) printf("could not create socket"); puts("socket created"); server.sin_addr.s_addr = inet_addr("127.0.0.1"); server.sin_family = AF_INET; server.sin_port = htons( 8888 ); //Connect to remote server if (connect(sock, (struct sockaddr *)&server, sizeof(server)) < 0) perror("connect failed. Error"); return 1; puts("connected\n"); //keep communicating with server while(1) printf("enter message : "); scanf("%s", message); //Send some data if( send(sock, message, strlen(message), 0) < 0) 9/10 Samia Bouzefrane CNAM

puts("send failed"); return 1; //Receive a reply from the server if( recv(sock, server_reply, 2000, 0) < 0) puts("recv failed"); break; puts("server reply :"); puts(server_reply); close(sock); return 0; 10/10 Samia Bouzefrane CNAM