2017-09-12 1 views
1

Im absolument nouveau dans Docker et Jenkins aussi bien. J'ai une question sur la configuration du fichier Dockerfile et docker-compose.yml. J'ai essayé d'utiliser la configuration la plus simple pour pouvoir configurer ces fichiers correctement. Construire et pousser est fait correctement, mais l'application jenkins ne fonctionne pas sur mon hôte local (127.0.0.1).Comment configurer un docker-fichier et docker-composer pour Jenkins

Si je comprends bien, maintenant il devrait par défaut courir sur le port 50000 (ARG agent_port = dans 50000 jenkins "officiel" Dockerfile). J'ai essayé d'utiliser 50000, 8080 et 80, rien ne fonctionne. Avez-vous des conseils, s'il vous plaît? Im en utilisant ces fichiers: https://github.com/fdolsky321/Jenkins_Docker

La deuxième question est, ce qui est la meilleure façon de gérer les accidents du conteneur. Disons que si le conteneur plante, je veux recréer un nouveau conteneur avec les mêmes paramètres. Est-ce le meilleur moyen de créer un nouveau fichier shell comme "crash.sh" et fournir les informations, que je veux créer un nouveau conteneur avec les mêmes paramètres? Comme est mentionné ici: https://blog.codeship.com/ensuring-containers-are-always-running-with-dockers-restart-policy/

Merci pour tout conseil.

+0

Quelle Docker utilisez-vous? Sur quel OS? – VonC

+0

Désolé, j'ai oublié de donner cette information très importante. Windows 10 Pro, x64 –

+0

Quelle version de docker? Quel est l'invité du docker? HyperV avec docker pour Windows? VirtualBox avec dockerm-machine? – VonC

Répondre

0

HyperV avec docker pour Windows.

Dans ce cas, vous devez vous assurer que vous transférez n'importe quel port publié (comme 5000).

Ouvrez le gestionnaire HyperV, et cliquez avec le bouton droit de la souris sur la machine qui y est définie: vous pourrez ajouter des règles de redirection de ports pour que localhost: 5000 accède à votre machine virtuelle: 5000.

+0

Est-ce nécessairement? Parce que cela devrait être bien, quand j'ai essayé de le publier manuellement, il a travaillé sur le port 49001 par exemple ... –

+0

@FrantisekDolsky OK (je n'ai pas compris cela de votre question). Essayez au moins un docker ps -a, pour voir quel conteneur est en cours d'exécution et quel port sont publiés. Puis essayez d'y accéder en utilisant le docker machine ip au lieu de 127.0.0.1 – VonC

+0

Et tous les fichiers inclus dans github sont-ils corrects? –

0

docker-Compose pour Jenkins

docker-compose.yml

version: '2' 
services: 
    jenkins: 
    image: jenkins:latest 
    ports: 
     - 8080:8080 
     - 50000:50000 
    # uncomment for docker in docker 
    privileged: true 
    volumes: 
     # enable persistent volume (warning: make sure that the local jenkins_home folder is created) 
     - /var/wisestep/data/jenkins_home:/var/jenkins_home 
     # mount docker sock and binary for docker in docker (only works on linux) 
     - /var/run/docker.sock:/var/run/docker.sock 
     - /usr/bin/docker:/usr/bin/docker 

Remplacer le port 8080, que vous avez besoin 50000 dans votre hôte.

Pour recréer un nouveau conteneur avec les mêmes paramètres

Le volumne jenkins_home monté, est le placewhere vous stockez tous vos travaux et paramètres etc ..

Prenez la sauvegarde du jenkins_home sur le volume monté créer chaque travail ou la façon dont vous voulez. En cas d'incident, exécutez Jenkins avec le même fichier docker-composer et remplacez le dossier jenkins_home par la sauvegarde.

Relancez/redémarrer à nouveau jenkins

Liste conteneur

docker ps -a 

Restart conteneur

docker restart <Required_Container_ID_To_Restart> 
0

Je me sers d'un docker-Compose.YML qui ressemble à ce qui suit:

version: '3.2' 

volumes: 
    jenkins-home: 

services: 
    jenkins: 
    image: jenkins-docker 
    build: . 
    restart: unless-stopped 
    ports: 
     - target: 8080 
     published: 8080 
     protocol: tcp 
     mode: host 
    volumes: 
     - jenkins-home:/var/jenkins_home 
     - /var/run/docker.sock:/var/run/docker.sock 
    container_name: jenkins-docker 

Mon image est une image Jenkins construit localement, basé sur de jenkins/jenkins: LTS, qui ajoute dans certains autres composants comme docker lui-même, et je suis le montage de la prise docker pour me permettre d'exécuter des commandes sur l'hôte du docker. Cela peut ne pas être nécessaire pour votre cas d'utilisation. Les parties importantes pour vous sont les ports en cours de publication, qui pour moi est seulement 8080, et le volume pour/var/jenkins_home pour préserver la configuration de Jenkins entre les mises à jour de l'image.

Pour récupérer des erreurs, j'ai restart: unless-stopped dans le docker-compose.yml pour configurer le conteneur pour redémarrer automatiquement. Si vous utilisez ceci en mode swarm, ce serait automatique. J'évite généralement de définir un nom de conteneur, mais dans ce scénario, il n'y aura jamais qu'un conteneur jenkins-docker, et j'aime pouvoir voir les journaux avec docker logs jenkins-docker pour rassembler des choses comme le jeton de connexion administrateur initial.

Mon Dockerfile et d'autres dépendances pour cette image sont disponibles à: https://github.com/bmitch3020/jenkins-docker

+0

Merci les gars pour votre aide.So maintenant son fonctionnement, MAIS, si j'utilise cette commande: , son fonctionnement sur les ports par défaut 8080/tcp, 50000/tcp. Mais j'ai spécifié dans mon fichier docker-composer un autre port (j'ai essayé d'utiliser le port 49003 pour le moment, qui est changé dans docker-compose.yml). Alors je dois spécifier les ports comme ceci: . Et puis, si je veux exécuter ce sur le port 49003, ce qui signifie le deuxième port 8080? Parce que si j'utilise 49003: 49003, ça ne marche pas. Des conseils, s'il vous plait, mais vous m'avez tellement aidé !! –

+0

J'espère que les ports devraient être spécifiés dans docker-compose.yml, pas dans Dockerfile, non? Il semble juste, qu'il ignore les paramètres dans le fichier de composition. –

+0

Le fichier docker-compose.yml est utilisé par 'docker-compose', l'appel' docker run' ignore complètement ce fichier. – BMitch