Il existe deux méthodes possibles:
Si votre objectif est simplement d'utiliser Jenkins, c'est une bonne idée d'utiliser l'image officielle de Jenkins ci-dessous.
Image officielle de Docker Hub La version de jenkins semble être ancienne.
jenkins - Docker hub [ID de l'image] jenkins: dernier [Version] v2.60.3 (au 28 août 2020)
Jenkins / jenkins, qui a un site sur Github, semble être le dernier.
jenkinsci/docker: Docker official jenkins repo [ID de l'image] jenkins / jenkins: lts [Version] v2.235.5 (au 28 août 2020)
Il peut également être installé avec les packages requis pour une image de système d'exploitation telle que CentOS.
Cette fois, j'ai essayé d'installer Jenkins sur CentOS.
2.1. Dockerfile Normalement, lors de l'installation d'un service tel que Jenkins sur CentOS, le début et la fin du service sont gérés par systemd. Cependant, comme l'idée de base de Docker est de créer un conteneur pour chaque processus, systemd n'est pas activé dans l'image officielle de __CentOS. __
Par conséquent, j'ai créé le Dockerfile en tenant compte de la façon d'activer __systemd décrit sur le site officiel.
Systemd integration: Dockerfile for systemd base image https://hub.docker.com/_/centos?tab=description
Vous trouverez ci-dessous la partie du Dockerfile qui a été référencée par __ autre que le deuxième RUN. Le premier RUN et VOLUME semblent être le contenu principal, mais __ Jenkins a commencé __ sans cela. Cependant, si vous laissez la valeur par défaut comme indiqué ci-dessous, il est dit "pourrait causer des problèmes", il semble donc préférable de l'avoir.
This Dockerfile deletes a number of unit files which might cause issues. (Google Translate: ce Dockerfile supprime certains fichiers d'unité qui peuvent causer des problèmes.)
Dockerfile
FROM centos:7
ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; \
for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*; \
rm -f /etc/systemd/system/*.wants/*; \
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*; \
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
EXPOSE 8080
RUN yum install -y java wget initscripts && \
cd /etc/yum.repos.d && \
wget http://pkg.jenkins-ci.org/redhat-stable/jenkins.repo && \
rpm --import http://pkg.jenkins.io/redhat-stable/jenkins.io.key && \
yum install -y jenkins && \
systemctl enable jenkins
CMD ["/sbin/init"]
Je fais également référence aux commandes d'opération.
Commande d'opération
docker build --rm -t <Nom de l'image:marque> .
docker run -it -d --privileged --name <Nom du conteneur> -h <nom d'hôte> -p 8080:8080 <Nom de l'image:marque>
L'image CentOS n'inclut pas le package __initscripts __. Si vous ne l'ajoutez pas avec la commande yum, le processus de démarrage lui-même entraînera une erreur et ne sera pas exécuté, vous devez donc l'ajouter à l'avance.
Ce qui suit démarre d'abord le conteneur avec l'image créée sans inclure le package __initscripts __. Après cela, c'est une erreur en entrant dans le conteneur et en exécutant à nouveau les commandes «systemctl start jenkins» et «systemctl status jenkins».
bash
[root@localhost /]# systemctl start jenkins
Job for jenkins.service failed because the control process exited with error code. See "systemctl status jenkins.service" and "journalctl -xe" for details.
[root@localhost /]#
[root@localhost /]# systemctl status jenkins
● jenkins.service - LSB: Jenkins Automation Server
Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
Active: failed (Result: exit-code) since Thu 2020-08-27 01:31:06 UTC; 5s ago
Docs: man:systemd-sysv-generator(8)
Process: 88 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=1/FAILURE)
Aug 27 01:31:06 localhost systemd[1]: Starting LSB: Jenkins Automation Server...
Aug 27 01:31:06 localhost jenkins[88]: /etc/rc.d/init.d/jenkins: line 59: /etc/init.d/functions: No such file or directory
Aug 27 01:31:06 localhost systemd[1]: jenkins.service: control process exited, code=exited status=1
Aug 27 01:31:06 localhost systemd[1]: Failed to start LSB: Jenkins Automation Server.
Aug 27 01:31:06 localhost systemd[1]: Unit jenkins.service entered failed state.
Aug 27 01:31:06 localhost systemd[1]: jenkins.service failed.
[root@localhost /]#
Aug 27 01:31:06 localhost jenkins[88]: /etc/rc.d/init.d/jenkins: line 59: /etc/init.d/functions: No such file or directory
C'est une erreur car __ /etc/init.d/functions__ n'existe pas.
bash
[root@localhost /]# ls -l /etc/init.d/functions
ls: cannot access /etc/init.d/functions: No such file or directory
[root@localhost /]#
Si vous recherchez «yum provides» pour savoir quel paquet yum contient __, vous pouvez voir qu'il s'agit du paquet initscripts. Cependant, il ne correspondait pas dans "/etc/init.d/functions", mais il correspondait dans "* /init.d/functions".
Les liens symboliques sont largement utilisés sous Linux. Veuillez noter que le nom du fichier, y compris le chemin affiché, n'est pas toujours le nom d'origine __. Si vous recherchez uniquement par fonctions, cela correspondra beaucoup, j'ai donc supprimé le répertoire petit à petit.
bash
[root@localhost /]# yum provides */init.d/functions*
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
* base: ftp-srv2.kddilabs.jp
* extras: ftp-srv2.kddilabs.jp
* updates: ftp-srv2.kddilabs.jp
initscripts-9.49.49-1.el7.x86_64 : The inittab file and the /etc/init.d scripts
Repo : base
Matched from:
Filename : /etc/rc.d/init.d/functions
[root@localhost /]#
Ce Dockerfile utilise CentOS: 7
, mais quand je l'ai essayé avec CentOS: 8
, j'ai eu une erreur.
C'est peut-être parce que le moteur de conteneur par défaut de CentOS 8 est maintenant Podman
au lieu de Docker (une illusion).
Les détails n'ont pas été confirmés.
Recommended Posts