Aller au contenu

Utiliser Docker comme un nul(l)


Ldfa

Messages recommandés

Si vous avez suivi mes derniers articles, sur l’installation d’un serveur à la maison, vous avez certainement pu vous rendre compte que votre système risquait rapidement de devenir trop gros, trop compliqué, et de couler lamentablement comme le Titanic…

Je vais donc interrompre cette série et passer à autre chose : quelque chose de robuste, permettant de déployer toutes vos applications, sans vous soucier des problèmes de compatibilité et en conservant votre système simple et propre !

Pour ne pas que votre serveur finisse comme le Titanic, transformez-le en porte-conteneur avec le bien nommé Docker !

Un porte conteneurs dans l'arctique.

L’idée vient d’un commentaire pertinent posté il y a quelques mois : « Quand j’y pense, tu aurai pu faire un hyperviseur pour gérer tous les services. Que donne ton serveur si tu avais fais du openvz ? »
Lors d’un salon que j’ai suivi durant mon absence, j’ai sauté sur l’occasion lorsqu’un des participants a fait une présentation de Docker, un utilitaire à la mode qui permet d’exécuter des systèmes Linux autonomes, à la manière de machines virtuelles.

Pourquoi Docker est nul

  1. Vous avez intérêt à avoir un gros disque dur de la mort pour créer une image Docker vous-même, un minimum de 50Go, je dirais.
  2. Vous avez intérêt à avoir un gros disque dur de la mort si vous comptez faire tourner beaucoup d’applications (à moins de mutualiser les images), comptez 700-800Mo pour n’importe quelle application dès l’instant qu’elle embarque Java !
  3. Si vous vous trompez lors de la création d’une image en oubliant de mettre un tag, aucune commande n’est prévue pour nettoyer votre disque. Il vous faudra récupérer un bout de script sur le net pour supprimer les images Docker inutilisées et ainsi soulager votre disque dur :
    docker rm $(docker ps -a -q)
    docker rmi $(docker images | grep "^<none>" | awk "{print \$3}")
    
    #SOURCE : http://jimhoskins.com/2013/07/27/remove-untagged-docker-images.html
Piti batô 'va faire plouf.

Piti batô ‘va faire plouf.

Pourquoi Docker est génial

  1. Plus besoin de vous prendre la tête pour installer vos applications (ex : Gitorious), des images dockers existent certainement en ligne.
  2. Vous n’aurez aucun problème de compatibilité car chaque application tournera dans son propre environnement.
  3. Vous n’aurez plus aurez moins besoin de vous soucier de la configuration des ports réseau de votre application car vous pourrez les mapper au lancement de votre conteneur.
  4. Idem pour l’emplacement de vos fichiers (logs, configuration, etc.)
  5. Vous pourrez très simplement démarrer / arrêter / voir l’état de vos conteneurs.
  6. Même à distance !
  7. Docker redémarre automatiquement vos conteneurs en même temps que votre machine.
  8. Docker est beaucoup plus léger qu’une machine virtuelle et nécessite peu de ressources.
C'est gros mais vu ce qu'il contient, pas tant que ça...

Il est gros mais vu ce qu’il contient, pas tant que ça…

Installer docker

sudo apt-get install docker.io
sudo ln -s /usr/bin/docker.io /usr/bin/docker
sudo usermod -a -G docker <VOTRE_UTILISATEUR>
# Reconnectez-vous pour recharger vos droits

Simple, efficace.

Installer shipyard

Shipyard = port

Shipyard = port

Shipyard est un conteneur Docker qui vous permettra de gérer vos conteneurs Docker via une interface Web.

Pour commencer, il faut ajouter des options à Docker pour permettre une gestion à distance :

Modifiez le fichier /etc/default/docker.io et ajoutez la ligne suivante :

DOCKER_OPTS="-H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock"

Cette ligne permet la gestion de vos conteneurs en TCP par le port 4243 et via la socket UNIX /var/run/docker.sock.

Note : Veillez à bien configurer votre pare-feu car n’importe qui accédant au port 4243 de votre machine pourra accéder à vos conteneurs (Docker ne dispose pas d’authentification)

Lancez shipyard (oui, déjà) :

docker run -d -P --name rethinkdb shipyard/rethinkdb
docker run -d -p 8000:8080 --link rethinkdb:rethinkdb shipyard/shipyard

Décortiquons ces commande :

  • docker : Docker quoi :-)
  • run : On souhaite démarrer un nouveau conteneur à partir d’une image.
  • -d : C’est le mode démon, le conteneur démarre et continue à tourner en arrière plan.
  • -P : publie tout les ports du conteneur sur le même port de l’ordinateur
  • –name rethinkdb : le conteneur s’appellera rethinkdb
  • shipyard/rethinkdb : C’est le nom de l’image que vous démarrez, elle sera automatiquement récupérée d’Internet.
  • -p 8000:8080 : lie le port 8000 de notre ordinateur au port 8080 du conteneur.
  • –link rethinkdb:rethinkdb : Permet au conteneur shipyard de communiquer avec le conteneur rethinkdb en utilisant l’alias rethinkdb.
  • shipyard/shipyard: C’est le nom d’une seconde image.
Vous devriez télécharger la moitié d'Internet, faites une pause :-)

Vous devriez télécharger la moitié d’Internet, faites une pause :-)

Connectez-vous :

http://<VOTRE_MACHINE>:8000 (login : admin, mot de passe : shipyard)

Changez votre mot de passe :

Pour celà, il faut démarrer shipyard en ligne de commande.

docker run -it shipyard/shipyard-cli

Il faut ensuite vous connecter à votre port puis changer votre mot de passe :

shipyard cli> shipyard login
URL:http://<VOTRE_MACHINE>:8000
Username: admin
Password: shipyard
shipyard cli> shipyard change-password
Password: <VOTRE_MOT_DE_PASSE>
Confirm: <ENCORE>

Peut être qu’ils activeront un jour la possibilité de changer le mot de passe dans l’interface Web…

Tapez "help" pour avoir l'aide dans la ligne de commande shipyard.

Tapez « help » pour avoir l’aide dans la ligne de commande shipyard.

Ajoutez vos conteneur Docker

Dans l’onglet Engines de l’interface Web, cliquez sur ADD. Vous devrez renseigner :

  • Un nom
  • Un libellé
  • Le nombre de processeurs et la mémoire physique (pour les statistiques), vous pouvez laisser les valeurs par défaut
  • L’adresse de votre Docker que vous avez configuré dans /etc/default/docker.io soit : http://<VOTRE_MACHINE>:4243

Vous devriez voir apparaître les conteneurs de shipyard dans l’interface de gestion.

ça marche, je n'ai eu aucune surprise :-)

ça marche, je n’ai eu aucune surprise :-)

Je tiens à signaler que Shipyard a été INTÉGRALEMENT modifié 19h avant que je poste… j’ai dû mettre à jour l’article en catastrophe -_-‘

Installer ce que l’on veut (Gitorious par exemple)

sudo mkdir -p /var/lib/gitorious
docker run -d -p <VOTRE_PORT_GITORIOUS>:80 -p 22 -p 9418:9418 -v /var/lib/gitorious:/var/lib/gitorious --name gitorious gitorious/gitorious:latest

:-o encore de nouvelles options :

  • -d : Exécute le conteneur comme un démon.
  • -p 22 : Publie le port 22 du conteneur sur un port quelconque de votre machine (vous pouvez connaître le port en utilisant « docker port gitorious 22″)
  • –name gitorious : Nomme le conteneur pour pouvoir y accéder plus simplement (docker start gitorious / docker stop gitorious / docker rm gitorious / …)
  • gitorious/gitorious:latest : On démarre l’image gitorious/gitorious étant tagguée « latest ».

Et voilà, gitorious est démarré, vous pouvez y accéder sur le port <VOTRE_PORT_GITORIOUS>.
Le conteneur devrait apparaître dans Shipyard, vous pouvez le démarrer, l’arrêter et voir son état.
C’est quand même plus simple que mon précédent article  :-)

Tout se passe dans un fichier Dockerfile :

# Toute image est basée sur une autre (ubuntu par exemple) grâce à la commande FROM suivie d'un nom d'image
FROM ubuntu:trusty
# Vous pouvez signer votre travail
MAINTAINER Helmi <helmi@tuxuri.com>
# La commande RUN permet d'exécuter des commandes dans le conteneur (tout ce qui est reconnu par le conteneur fonctionne)
RUN echo "deb http://archive.ubuntu.com/ubuntu trusty main universe" > /etc/apt/sources.list
RUN apt-get -y update
RUN apt-get -y install ca-certificates
RUN apt-get -y install wget
RUN wget --quiet --no-check-certificate -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main" >> /etc/apt/sources.list
RUN apt-get -y update
RUN apt-get -y upgrade
RUN locale-gen --no-purge en_US.UTF-8
# Vous pouvez configurer des variables d'environnement avec la commande ENV
ENV LC_ALL en_US.UTF-8
RUN update-locale LANG=en_US.UTF-8
RUN apt-get -y install postgresql-9.3 postgresql-contrib-9.3 postgresql-9.3-postgis-2.1 postgis
RUN echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/9.3/main/pg_hba.conf
RUN service postgresql start && /bin/su postgres -c "createuser -d -s -r -l docker" && /bin/su postgres -c "psql postgres -c \"ALTER USER docker WITH ENCRYPTED PASSWORD 'docker'\"" && service postgresql stop
RUN echo "listen_addresses = '*'" >> /etc/postgresql/9.3/main/postgresql.conf
RUN echo "port = 5432" >> /etc/postgresql/9.3/main/postgresql.conf
# Vous choisissez quels port vous exposez (ces ports pourront être publiés avec l'option -p lors de l'exécution de l'image)
EXPOSE 5432
# Vous pouvez copier des scripts externes (start.sh) à un chemin précis dans votre image (/start.sh)
ADD start.sh /start.sh
RUN chmod 0755 /start.sh
# Tout conteneur doit lancer une et une seule commande au démarrage grâce à la commande CMD
CMD ["/start.sh"]

La limitation d’une unique commande au démarrage d’une image permet de contrôler précisément ce qu’il se passe dans votre conteneur.

Docker recommande l’utilisation de supervisor pour exécuter plusieurs programmes dans votre conteneur (SSH/MySQL/APACHE par exemple)

Personnellement, j’aime le type de configuration utilisé dans cette image : https://registry.hub.docker.com/u/danhixon/sshd/dockerfile/

Cette image est fondée sur une autre qui ne contient que supervisor : https://github.com/zumbrunnen/docker-base

Vous pouvez ensuite ajouter autant de services que vous le souhaitez, avant de terminer par CMD [« /usr/bin/supervisord »]

Simple, efficace :-)

docker run -t -i linux/kali-metasploit

=> Ceci devrait commencer à répondre à ta question, jeune padawan.

Ils ont de l'humour chez Metasploit!

Ils ont de l’humour chez Metasploit!

Vous l’aurez compris, je suis de retour pour vous jouer un mauvais tour, JESSIE — JAMES — *hem* Je suis donc de retour après une (trop) longue absence pour causes personnelles.

Je vais me recentrer sur des sujets plus proches du monde des méchants pirates que de celui du « simple » développeur.

Si je trouve quelques $€£¥ dans un bas de laine, je pourrais même poster des articles qui mettent en jeu des circuits imprimés et de l’électronique. Un nul(l) ne doit pas se limiter à des piratages logiciels. Les intrusions physiques sont généralement plus simples à mettre en œuvre et tout aussi efficaces.

Du matériel Made In NSA :-)

Du matériel Made In NSA :-)

Nouveau : à vous de décider !

Take Our Poll

Afficher l’article complet

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.