Partie 1: Docker
Partie 2: Présentation de docker-compose
Ce sera la description sur.Partie 1 Ceci est une suite de l'article.
Voir Github Repository.
Dans la première partie, nous avons créé un Dockerfile
pour démarrer le serveur Web et le serveur d'applications dans chaque conteneur. Pour réduire le coût de lancement de ces conteneurs (en termes de commandes de lancement), lancez deux conteneurs avec une commande docker-compose
.
Les principaux changements sont les suivants.
nginx
Dans ce cas, il est nécessaire de spécifier ce qui suit comme relation entre les conteneurs et la relation entre les hôtes de conteneur.
docker-compose.yml
version: "3.7" #Spécifiez la version du fichier de composition
services: #Ajouter une description pour chaque conteneur sous cette couche
###########Paramètres du serveur d'applications à partir d'ici###########
app-server: #Peut être le nom du service, le nom d'hôte
container_name: app-server #Le nom du conteneur
build: #Blocs requis lors de la construction avec un Dockerfile préparé par vous-même
context: ../../ #Spécifiez le chemin d'accès pour la construction du docker, le chemin relatif à partir de l'emplacement du fichier yml
dockerfile: deployment/dockerfiles/app-server/Dockerfile #Dockerfile à utiliser. Spécifié à partir du chemin de contexte
networks: #Paramètres du réseau auquel appartient ce service
my_host_network: #Voir ci-dessous mon_host_Appartenir au réseau
aliases:
- uwsgi-server # my_host_Il sera possible de distinguer par ce nom sur le réseau
expose:
- 9876 #Mettez ce port dans l'état LISTEN
restart: always #Politique de redémarrage du service
###########Jusqu'à ce point Paramètres du serveur d'applications###########
###########Paramètres du serveur Web à partir d'ici###########
web-server:
container_name: web-server
build:
context: ../../
dockerfile: deployment/dockerfiles/web-server/Dockerfile
networks:
my_host_network:
aliases:
- nginx-server
ports:
- 9090:9123 #Redirection de port de 9090 sur le PC hôte à 9123 sur le conteneur
depends_on: #Spécifiez la dépendance. la toile-app avant de démarrer le serveur-Va démarrer le serveur
- app-server
restart: always
###########Paramètres du serveur Web jusqu'à présent###########
###########Paramètres réseau d'ici###########
networks:
my_host_network: #Nom d'alias lorsqu'il est utilisé dans les paramètres de serveur supérieurs
name: my-nginx-network #Nom de réseau
driver: bridge #Type de pilote, pont ou superposition
En ce qui concerne le réseau, «bridge» est adopté en raison du modèle de déploiement de plusieurs conteneurs sur un PC hôte. Si l'hôte est divisé en plusieurs, utilisez ʻoverlay`.
Jusqu'à présent, les deux serveurs fonctionnaient (directement) sur le PC hôte, j'ai donc spécifié localhost
comme destination du proxy inverse. Il est nécessaire de modifier la destination de connexion vers le conteneur du serveur d'applications dans cette étape.
nginx.conf
http {
server {
# 「uwsgi-serveur "est docker-compose.mon ensemble avec yml_host_réseau Nom d'alias du serveur d'applications sur le réseau
location / {
proxy_pass http://uwsgi-server:9876;
# before: proxy_pass http://127.0.0.1:9876;
}
location /health {
proxy_pass http://uwsgi-server:9876/health;
# before: proxy_pass http://127.0.0.1:9876/health;
}
}
}
Terminal
docker-compose -f deployment/docker-compose/docker-compose.yml up
# -Spécifiez le fichier de paramètres avec l'option f
ʻUpconstruit l'image selon les paramètres du fichier yml, et le conteneur est créé. Image de
build +
start. Il peut également être exécuté en arrière-plan en ajoutant l'option
-d`.
Ctrl + C
, lors de l'exécution au premier plan
Si vous l'exécutez en arrière-plan, vous pouvez arrêter le conteneur avec docker-compose -f deployment / docker-compose / docker-compose.yml stop
.
Terminal
docker-compose -f deployment/docker-compose/docker-compose.yml down
En ajoutant l'option --rmi all
, toutes les images originales sont également supprimées.
About docker-compose
En gros, deux points sont les suivants.
Pour 1, supposons que vous deviez démarrer 10 conteneurs. Entrer docker run {container}
10 fois est un coût raisonnable, non? Vous pouvez oublier d'en démarrer un. Il sera complété par une commande de docker-compose up
, donc il n'y aura pas d'omission de démarrage, et surtout c'est facile. (Si vous vous concentrez uniquement ici, vous pouvez écrire un shell)
Concernant 2, prenons cette étape comme exemple.
Chaque conteneur ne pouvait pas être décrit dans Dockerfile
, et dans le cas de docker run
, certaines conditions de démarrage devaient être spécifiées comme options de démarrage.
--Serveur Web
En utilisant docker-compose
, les paramètres ci-dessus peuvent être définis dans un fichier yml, il est donc possible de réduire la difficulté de construction, y compris la relation entre les conteneurs et les hôtes de conteneur. ..
En particulier, la valeur d'utilité est élevée dans les cas suivants.
--Je souhaite partager le volume entre les conteneurs et les hôtes --Je veux configurer le réseau --Je veux définir de nombreuses variables d'environnement
C'est mon opinion personnelle, mais je pense que la plupart d'entre eux ne sont pas utilisés ou utilisés localement.
En effet, si vous pouvez créer un conteneur et définir les relations entre les conteneurs, ce n'est pas la fin de la production.
Afin de déployer le service dans un environnement de production (et de préparation), en plus des étapes jusqu'à présent, nous devons penser aux termes katakana tels que «évolutivité, équilibrage de charge, réseau, exécution», etc. Il y a certains domaines qui peuvent être résolus en utilisant docker-compose
, mais il semble difficile de tout faire.
Celui utilisé pour l'orchestration sera toujours kubernetes
.
Cependant, si le déploiement d'un cluster kubernetes
dans un environnement local est strict en termes de spécifications, ou simplement la vérification du comportement d'une application, docker-compose
peut être utilisé plus facilement.
Recommended Posts