Docker est un outil pour exécuter vos applications dans des conteneurs. Les conteneurs regroupent toutes les dépendances et le code dont votre application a besoin pour s'exécuter dans un seul fichier, qui fonctionnera de la même manière sur n'importe quelle machine.
Qu'est-ce que Docker?
Docker est similaire dans son concept aux machines virtuelles, sauf que c'est beaucoup plus léger. Au lieu d'exécuter un système d'exploitation totalement séparé (ce qui est une surcharge massive), Docker exécute des conteneurs, qui utilisent le même système d'exploitation hôte et ne virtualisent qu'au niveau logiciel.
Docker Engine fonctionne sous Linux, Windows et macOS, et prend en charge Linux et Windows pour les conteneurs Docker. La saveur exacte de Linux n'a pas vraiment d'importance; la plupart des versions de Linux exécuteront le même noyau et ne différeront que par le logiciel utilisateur. Docker peut installer ce logiciel utilisateur dans le conteneur, qui vous permet d'exécuter un conteneur CentOS sur Ubuntu. Malgré cela, je ne pourrais pas, par exemple, exécuter FreeBSD sur Ubuntu, puisque les noyaux sont différents.
L'image du conteneur Docker comprend uniquement ce dont votre application a besoin pour s'exécuter. Si votre application utilise nginx et Node.js, l'image du conteneur les inclura, mais il n'aura pas la charge de toutes les autres applications utilisateur que vous trouverez généralement sous Linux.
EN RELATION: Comment installer Docker et Docker Compose sur Linux
Pourquoi Docker est-il si utile?
Docker utilise le même type de versionnage et de conditionnement que des outils tels que Git et NPM et vous permet de l'utiliser pour votre logiciel serveur.. Puisque votre conteneur est une seule image, facilite le suivi des différentes versions de votre conteneur. Et puisque tout est contenu, gérer toutes vos dépendances est beaucoup plus facile.
Con Docker, votre environnement de développement sera exactement le même que votre environnement de production, et exactement le même que l'environnement de développement de tout le monde, soulager le problème de “c’est cassé dans ma machine !!”
Si vous souhaitez ajouter un autre serveur à votre cluster, vous n'auriez pas à vous soucier de reconfigurer ce serveur et de réinstaller toutes les dépendances dont vous avez besoin. Une fois que vous créez un conteneur, vous pouvez partager le fichier conteneur avec n'importe qui, et ils pourraient facilement lancer leur application avec quelques commandes. Docker facilita la ejecución de varios servidores, surtout avec des moteurs d'orchestration comme Gouverneurs Oui Essaim de dockers.
Docker vous permet également d'organiser votre code pour l'implémenter dans de nouveaux services. Supposons que vous ayez un serveur Web que vous utilisez pour votre application. Vous avez probablement beaucoup de choses installées sur ce serveur, avoir un serveur Web nginx pour héberger du contenu statique, vous avez probablement une base de données pour stocker certaines choses dans le backend, peut-être avez-vous un serveur API exécuté sur Express. js aussi. Idéalement, Je les diviserais en applications distinctes pour les exécuter sur des serveurs distincts, mais le développement peut être délicat.
Docker aide à nettoyer cela; vous pouvez empaqueter votre serveur Web et l'exécuter avec un conteneur nginx, vous pouvez empaqueter votre serveur API et l'exécuter avec un conteneur Node.js, et vous pouvez empaqueter votre base de données et l'exécuter dans son propre conteneur (même si c'est peut-être pas la meilleure idée, mais c'est faisable). Vous pouvez prendre ces trois conteneurs Docker et les exécuter tous sur la même machine. Si vous devez changer de serveur, c'est aussi simple que de migrer ces conteneurs vers un nouveau serveur. Si vous avez besoin de grimper, vous pouvez déplacer l'un de ces conteneurs vers un nouveau serveur ou le déployer sur un cluster de serveurs.
Docker peut également vous faire économiser de l'argent si vous souhaitez exécuter plusieurs applications sur un seul VPS. Si chaque application a des dépendances différentes, il est très facile pour votre serveur de s'embrouiller, comme une assiette de Thanksgiving avec tout mélangé. Con Docker, vous pouvez exécuter plusieurs conteneurs séparés avec, par exemple, versions séparées de PHP, comme un plateau repas de lycée avec tout séparé.
Comment utilisez-vous Docker?
En production, il existe de nombreux services pour héberger des conteneurs Docker, comprenant AWS ECS, Instances de conteneur Azure, Gouttelettes Docker DigitalOcean, et plein d'autres. Si votre fournisseur ne propose pas d'hébergement Docker géré, vous pouvez toujours l'installer vous-même sur votre VPS.
Développement, Les conteneurs Docker sont simples à exécuter et ne nécessitent que quelques commandes. Pour commencer, vous devrez installer le moteur Docker sur votre OS hôte. Pour Windows et macOS, vous pouvez utiliser Bureau Docker, mais pour Linux, vous devrez installer l'édition communautaire Docker à partir de votre gestionnaire de paquets. Pour les distributions basées sur Debian comme Ubuntu, cela serait:
sudo apt-get install docker
Avec l'une des méthodes d'installation, vous devriez maintenant avoir accès à Docker depuis la ligne de commande. Pour vérifier que cela fonctionne, peut exécuter:
docker run hello-world
Docker devrait extraire cette image du didacticiel du Docker Hub, un référentiel en ligne de nombreuses images de conteneurs utiles. Vous pouvez utiliser plusieurs de ces images comme base pour installer vos applications.
Créons un serveur Web simple basé sur nginx. Nginx fournit une construction sur Docker Hub que nous pouvons utiliser comme point de départ. Créez un nouveau répertoire pour enregistrer les fichiers et ouvrez-le:
mkdir ~/dockertest && cd ~/dockertest
Toute modification apportée à l'image de base de nginx, nous le ferons avec un Dockerfile. Les Dockerfiles sont comme des makefiles pour les conteneurs, définir les commandes à exécuter lorsque Docker crée la nouvelle image avec ses modifications. Le Dockerfile est simplement appelé Dockerfile
, pas de prolongation. Créez ce fichier avec touch Dockerfile
et ouvrez-le dans un éditeur de texte. Collez ceci dans:
FROM nginx
COPY html /usr/share/nginx/html
La première ligne est une commande Docker qui indique à Docker de baser cette image sur l’image nginx du Hub. la deuxième ligne est une autre commande qui copie un répertoire à partir de ce dossier local (~/dockertest/html
) dans l’image Docker, dans ce cas, remplacer le dossier html par nginx.
Vous pouvez exécuter de nombreuses commandes dans Dockerfiles. Par exemple, si votre application doit installer des dépendances, peut faire quelque chose comme RUN cd src/ && npm install
. Tout ce dont votre application a besoin pour démarrer son installation et commencer à fonctionner est défini dans le Dockerfile.
En réalité, nous n'avons pas fait le ./html
répertoire encore, alors vas-y et cours:
mkdir html && touchez html/index.html
Créer le répertoire et l'entrée HTML. Ouvert index.html
et collez du code HTML factice:
<!DOCTYPE html> <html> <corps> Bonjour de nginx, à l'intérieur de Docker! À l'intérieur, ton ordinateur? </corps> </html>
Maintenant, nous sommes prêts à cuisiner notre image. Assurez-vous d'être à la racine du projet (au ~/dockertest
, pas dans le html
dossier) et courir:
docker build -t dockertest .
Le point à la fin signifie que nous utiliserons le répertoire courant comme point de départ. Docker devrait trouver le Dockerfile et se mettre au travail. Malgré cela, Cela ne devrait prendre que quelques secondes, et quand je suis prêt, vous pouvez l'exécuter avec:
docker run --name DockerTest -p 8080:80 -d dockertest
Cela va démarrer un nouveau conteneur appelé DockerTest, utilisation de l’image “dockertest” que nous créons. Les -p
flag lie un port local à un port à l'intérieur du conteneur, dans ce cas, lier le port HTTP par défaut de nginx (Porto 80) au port 8080 sur votre machine locale. Ouvrir localhost:8080
dans votre navigateur Internet, et vous devriez voir nginx en cours d'exécution.
Si vous souhaitez une configuration supplémentaire, vous pouvez modifier les fichiers de configuration nginx, y compris COPY nginx.conf /etc/nginx/nginx.conf
et écrire votre propre fichier de configuration. C'est plus difficile à configurer que d'éditer directement le fichier de configuration, puisque vous devrez reconstruire l'image à chaque édition. Mais pour l'avantage supplémentaire de pouvoir prendre le même conteneur que vous utilisez en développement et le déployer en production, c'est une compensation assez juste.
Pour un tutoriel plus détaillé sur la mise en réseau, déploiement et conteneurisation d'applications existantes, nous suggestons lecture de ce guide.