Es gibt zwei mögliche Methoden:
Wenn Sie lediglich Jenkins verwenden möchten, ist es eine gute Idee, das offizielle Jenkins-Bild unten zu verwenden.
Offizielles Bild von Docker Hub Die Version von Jenkins scheint alt zu sein.
jenkins - Docker hub [Image ID] Jenkins: Neueste [Version] v2.60.3 (Stand 28. August 2020)
Jenkins / Jenkins, der eine Site auf Github hat, scheint die neueste zu sein.
jenkinsci/docker: Docker official jenkins repo [Bild-ID] Jenkins / Jenkins: lts [Version] v2.235.5 (Stand 28. August 2020)
Es kann auch mit den Paketen installiert werden, die für ein Betriebssystem-Image wie CentOS erforderlich sind.
Dieses Mal habe ich versucht, Jenkins unter CentOS zu installieren.
2.1. Dockerfile Normalerweise wird bei der Installation eines Dienstes wie Jenkins unter CentOS der Start und das Ende des Dienstes von systemd verwaltet. Da Docker jedoch die Grundidee hat, für jeden Prozess einen Container zu erstellen, ist systemd im offiziellen Image von __CentOS nicht aktiviert. __ __
Aus diesem Grund habe ich die Docker-Datei erstellt, um __systemd zu aktivieren, das auf der offiziellen Website beschrieben ist.
Systemd integration: Dockerfile for systemd base image https://hub.docker.com/_/centos?tab=description
Unten ist der Teil der Docker-Datei aufgeführt, auf den __ mit Ausnahme des zweiten RUN verwiesen hat. Der erste RUN und VOLUME scheinen der Hauptinhalt zu sein, aber __ Jenkins startete __ ohne ihn. Wenn Sie jedoch die Standardeinstellung wie unten gezeigt beibehalten, heißt es "könnte Probleme verursachen", daher scheint es besser, sie zu haben.
This Dockerfile deletes a number of unit files which might cause issues. (Google Translate: Diese Docker-Datei entfernt einige Einheitendateien, die Probleme verursachen können.)
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"]
Ich beziehe mich auch auf die Operationsbefehle.
Betriebsbefehl
docker build --rm -t <Bildname:Etikett> .
docker run -it -d --privileged --name <Containername> -h <Hostname> -p 8080:8080 <Bildname:Etikett>
Das CentOS-Image enthält nicht das __initscripts-Paket __. Wenn Sie es nicht mit dem Befehl yum hinzufügen, führt der Startvorgang selbst zu einem Fehler und wird nicht ausgeführt. Sie müssen ihn daher im Voraus hinzufügen.
Im Folgenden wird der Container zunächst mit dem Image gestartet, das ohne das __initscripts-Paket __ erstellt wurde. Danach tritt ein Fehler auf, wenn der Container eingegeben und die Befehle "systemctl start jenkins" und "systemctl status jenkins" erneut ausgeführt werden.
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
Dies ist ein Fehler, da __ /etc/init.d/functions__ nicht vorhanden ist.
bash
[root@localhost /]# ls -l /etc/init.d/functions
ls: cannot access /etc/init.d/functions: No such file or directory
[root@localhost /]#
Wenn Sie nach "yum liefert" suchen, um herauszufinden, welches yum-Paket __ enthält, können Sie sehen, dass es sich um das initscripts -Paket handelt. Es stimmte jedoch nicht mit "/etc/init.d/functions" überein, sondern mit "* /init.d/functions".
Symbolische Links werden unter Linux häufig verwendet. Bitte beachten Sie, dass der Dateiname einschließlich des angezeigten Pfads nicht immer der ursprüngliche Name __ ist. Wenn Sie nur nach Funktionen suchen, stimmt dies sehr gut überein, daher habe ich das Verzeichnis nach und nach gelöscht.
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 /]#
Diese Docker-Datei verwendet "CentOS: 7", aber als ich es mit "CentOS: 8" versuchte, bekam ich eine Fehlermeldung. Vielleicht liegt es daran, dass die Standard-Container-Engine von CentOS 8 jetzt "Podman" anstelle von Docker ist (eine Täuschung). Details wurden nicht bestätigt.
Recommended Posts