1. Información general
En la producción real, es demasiado bajo para publicar imágenes manualmente en Harbour. En la práctica, generalmente se combina con la canalización de Jenkins para compilar y publicar automáticamente.
Descripción general del proceso:\
- Los desarrolladores envían su código al repositorio de Gitlab todos los días
- Jenkins extrae el código fuente del proyecto del repositorio de código de Gitlab, lo compila y lo empaqueta en un paquete jar; luego lo construye en una imagen de Docker y empuja la imagen al repositorio de imágenes privadas de Harbour.
- Jenkins envía un comando remoto SSH para permitir que el servidor de implementación de compilación extraiga la imagen del repositorio de imágenes privadas de Harbour al local; luego crea el contenedor
- El último usuario tiene acceso al contenedor
2. Espejo de lanzamiento con guión de Jenkins
- Nueva tarea de construcción
Nuevo elemento -> Construir un proyecto Maven
- Configurar el repositorio de código
- Subir el resultado al servidor
Dado que Jenkins se implementa en el sistema operativo Windows, se utilizan scripts por lotes. Utilice el comando por lotes o shell según el sistema operativo implementado por Jenkins. \
C:\jenkins\pscp.exe -r -l root -pw root %WORKSPACE%/zwt-pestilence/zwt-pestilence-web/target/zwt-pestilence-web-RELEASE.jar 192.168.10.8:/home/huangjinjin/software/springdocker
复制代码
- liberar espejo
cd /home/huangjinjin/software/springdocker
docker build -t zwt:v1.0 .
docker login -u admin -p Harbor123 192.168.10.8
docker tag zwt:v1.0 192.168.10.8/omg/zwt:v1.0
docker push 192.168.10.8/omg/zwt:v1.0
复制代码
- Crear archivo Docker
El jar construido se carga en la siguiente ruta
/home/huangjinjin/software/springdocker
复制代码
Así que crea un Dockerfile en esta ruta con el siguiente contenido:
FROM openjdk:8-jre-slim
MAINTAINER huangjinjin "[email protected]"
ENV PARAMS=""
ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
WORKDIR /servers
ADD zwt-pestilence-web-RELEASE.jar app/zwt-pestilence-web-RELEASE.jar
ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /servers/app/zwt-pestilence-web-RELEASE.jar $PARAMS"]
复制代码
El contenido del archivo Dockerfile se modifica según la situación real del proyecto.
- construir y verificar
Ejecutar tareas de Jenkins
Inicie sesión en Harbor para verificar si la imagen enviada al repositorio espejo de Harbor es exitosa\
3. Espejo de publicación del complemento de Jenkins
- Instale el complemento CloudBees Docker Build and Publish
Administrar Jenkins -> Administrar complementos
- Agregar credenciales
Administrar Jenkins -> Administrar credenciales
Cree un certificado de cuenta Harbor.
- Build agrega Docker Build y Publish
Haga clic en Opciones avanzadas para configurar
- Contexto de compilación: ruta de contexto de compilación
- Dockerfile Path:Dockerfile 文件的路径
根据实际情况配置,配置如下:
经过以上设置,即可进行 Jenkins 任务执行,构建镜像。\
4. 附:开启Docker 的 Remote API 访问 2375端口
- Docker 常见端口
2375:未加密的docker socket,远程root无密码访问主机2376:tls加密套接字,很可能这是您的CI服务器4243端口作为https 443端口的修改2377:群集模式套接字,适用于群集管理器,不适用于docker客户端5000:docker注册服务4789和7946:覆盖网络
- 开启配置
方法一(该方法没有验证通过)
vi /etc/default/docker
复制代码
加入下面一行
DOCKER_OPTS="-H tcp://0.0.0.0:2375"
复制代码
修改 /usr/lib/systemd/system/docker.service
配置文件
EnvironmentFile=-/etc/default/docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock $DOCKER_OPTS
复制代码
重启docker即可
systemctl daemon-reload
systemctl restart docker
复制代码
这种简单配置让 Docker Daemon 把服务暴露在 tcp 的 2375 端口上,这样就可以在网络上操作 Docker 了。Docker 本身没有身份认证的功能,只要网络上能访问到服务端口,就可以操作 Docker。
方法二
在/usr/lib/systemd/system/docker.service
,配置远程访问。
产生/usr/lib/systemd/system/docker.service
配置文件
systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
复制代码
在 [Service] 这个部分的 ExecStart,加上-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
vi /usr/lib/systemd/system/docker.service
[Service]
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
复制代码
重启
systemctl daemon-reload
systemctl restart docker
复制代码
方法三
修改/etc/docker/daemon.json
的配置
vi /etc/docker/daemon.json
{
"hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
}
复制代码
"tcp://0.0.0.0:2375":tcp socket,表示允许任何远程客户端通过 2375 端口连接 Docker Daemon。
"unix:///var/run/docker.sock":unix socket,本地客户端将通过这个来连接 Docker Daemon。
修改配置后,然后让 Docker 重新读取配置文件,并重启 Docker 服务
systemctl daemon-reload
systemctl restart docker
复制代码
在启动时,可能报如下错误
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
复制代码
Es porque hay un conflicto en los hosts de configuración de socket de Docker. La solución es editar el /usr/lib/systemd/system/docker.service
archivo de configuración,
Cambie ExecStart =/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock a ExecStart=/usr/bin/dockerd y vuelva a iniciarlo.
Ver el proceso de la ventana acoplable
[root@slaver2 ~]# ps -ef| grep docker
root 44221 1 1 18:16 ? 00:00:06 /usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
复制代码
El demonio Docker abre un socket HTTP para la comunicación remota.
- verificar
-H es el servicio de Docker para el host de destino de la conexión
Comprobar la versión de Docker
docker -H tcp://192.168.10.8:2375 version
复制代码
Ver paquete de imágenes
docker -H tcp://192.168.10.8:2375 images
复制代码