web-dev-qa-db-fra.com

Comment déployer un conteneur Docker sur un serveur Ubuntu distant?

J'ai implémenté une API dans un conteneur Docker et je souhaite déployer ce conteneur sur un serveur Ubuntu distant. Comment puis-je faire cela exactement? Mon API utilise beaucoup de ressources et j'ai utilisé le framework MLDB pour le mettre en œuvre. Je souhaite déployer le conteneur contenant l'API sur ce serveur Ubuntu distant . Jusqu'à présent, j'ai trouvé de nombreux guides pour déployer l'API sur AWS et DigitalOcean, mais depuis que j'ai déjà accès à un serveur Ubuntu distant Vous n'avez pas besoin de ça? Alors comment puis-je déployer mon conteneur afin que quelqu'un d'autre puisse tester mon API? S'il y a un meilleur moyen de déployer mon API (espérons-le gratuitement ou à peu de frais), faites-le moi savoir.

Merci d'avance.

6
sniper71
  1. Configuration SSH sans mot de passe sur la machine cible

  2. Exécutez la commande suivante pour gérer Docker à distance sur la cible VM (installe également Docker si nécessaire):

docker-machine create --driver generic --generic-ip-address = 10.123.2.74 --generic-ssh-user = docker --generic-ssh-key ~/.ssh/id_rsa nom_comme

Vous pouvez trouver plus d'informations sur le pilote générique ici .

  1. Définissez les variables d’environnement nécessaires pour le poste de travail nouvellement configuré:

eval $ (docker-machine env nom_certain)

  1. Toute commande Docker exécutée dans cette fenêtre terminal/cmd sera exécutée sur la machine distante. Pour tester: 

docker ps

Vous pouvez maintenant exécuter vos conteneurs Docker exactement comme vous le feriez localement.

PS - Si vous devez gérer à distance une instance de docker s'exécutant sous Windows via la boîte à outils Docker, les choses se compliquent un peu. (vous devez résoudre l'accès réseau aux ports dont vous avez besoin dans le docker linux VM (ssh, moteur docker, ports de conteneur) via la carte réseau pontée de VirtualBox ou via la redirection de port; résolvez également les problèmes de pare-feu Windows)

7
Sergiu Indrie

Je suggérerais d'installer docker-machine sur votre environnement de développement local et d'utiliser le generic driver pour ajouter le remote_server. Vous pouvez ensuite utiliser eval $(docker-machine env remote_server) pour vous y connecter et déployer votre API.

Le pilote effectuera une liste de tâches lors de la création:

  • Si le menu fixe ne s'exécute pas sur l'hôte, il sera installé automatiquement.
  • Il mettra à jour les paquets de l'hôte (apt-get update, yum update…).
  • Il générera des certificats pour sécuriser le démon docker.
  • Le démon docker sera redémarré, ainsi tous les conteneurs en cours d'exécution seront arrêtés.
  • Le nom d'hôte sera modifié pour correspondre au nom de la machine.

Déploiement du conteneur local sur le serveur distant:

Lors de l'ajout du remote_server à docker-machine via le generic driver, procédez comme suit pour déployer votre API.

  • Récupère les envs du serveur: docker-machine env remote_server

  • Connecter Shell au serveur: eval $(docker-machine env remote_server)

  • Construire l'image de l'API: docker build -t api_image .. (Dockerfile DIR)

  • Exécuter le conteneur: docker run -d -p 1111:1111 api_image

  • Utilisez curl: curl $(docker-machine ip remote_server):1111

J'espère que ceci vous aidera.

2
thoba

Depuis la publication de Docker 18.09.0 , cela a été beaucoup plus facile. Cette version a ajouté la prise en charge du protocole ssh à la variable d'environnement DOCKER_Host et de l'argument -H aux commandes docker ..., respectivement.

Tout d’abord, vous aurez besoin de accès SSH à la machine cible (dont vous aurez probablement besoin avec n’importe quelle approche).

Ensuite, soit:

# Re-direct to remote environment.
export DOCKER_Host="ssh://my-user@remote-Host"

# Run a container. To prove that we are on remote-Host, this will print its hostname.
docker run --rm --net Host busybox hostname -f

# All docker commands here will be run on remote-Host.

# Switch back to your local environment.
unset DOCKER_Host

Ou, si vous préférez, tout en un va pour une seule commande:

docker -H "ssh://my-user@remote-Host" run --rm --net Host busybox hostname -f

Notez que cela n’est pas encore pris en charge dans docker-compose v.1.23.1 (dernière version en cours d’écriture) et au-dessous. Cependant, cela fera partie de la prochaine version .

2
Dirk