1. Preparación ambiental
- Un servidor centos para instalar docker (para el proceso de instalación, consulte linux para instalar docker en modo ssl )
- ocurrencia
- certificado de enlace docker
2. idea configurar enlace docker
- Abra el complemento en la configuración
- Seleccione la ventana acoplable , luego complete nuestra información de configuración de la ventana acoplable y seleccione el directorio del certificado
- La conexión es exitosa
- Consulta nuestros contenedores aquí
3. Configurar el contenedor mysql
Debido a que nuestro proyecto springboot necesita usar mysql, necesitamos instalar mysql e implementarlo en docker juntos.
Ejecute el siguiente comando en el servidor Linux con docker instalado
- Tire de la última versión de mysql mirror
docker pull mysql
- Compruebe si la imagen mysql se extrae con éxito
docker images
- iniciar el contenedor mysql
mkdir -p /home/project/mysql/{
data,conf}
docker run -di -p 3306:3306 --restart=always --privileged=true -v /home/project/mysql/conf:/etc/mysql/conf.d -v /home/project/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=yinfeng --name=mysql mysql
-e MYSQL_ROOT_PASSWORD Establece la contraseña de inicio de sesión de la cuenta raíz mysql yinfeng.
-di d significa ejecutar en segundo plano como un proceso daemon, significa ejecutar el contenedor
3.1 Comprobar si el contenedor se ha iniciado correctamente
docker ps
3.2 El grupo de seguridad de Alibaba Cloud abre el puerto 3306
3.3 Use el enlace navicat para probar, la conexión es exitosa
4. configuración del archivo springboot pom
- Cree un proyecto springboot simple,
esta es toda la estructura de mi proyecto
- Configure docker-maven-plugin, este archivo es muy importante y debe configurarse con cuidado
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<!--将插件绑定在某个phase执行-->
<executions>
<execution>
<id>build-image</id>
<!--用户只需执行mvn package ,就会自动执行mvn docker:build-->
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!--指定生成的镜像名,这里是我们的作者名+项目名-->
<imageName>yinfeng/${project.artifactId}</imageName>
<!--指定标签 这里指定的是镜像的版本,我们默认版本是latest-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<rm>true</rm>
<!--指定基础镜像jdk1.8-->
<baseImage>java:8</baseImage>
<!--切换到logs目录-->
<workdir>/logs</workdir>
<!--查看我们的java版本-->
<cmd>["java", "-version"]</cmd>
<!--${project.build.finalName}.jar是打包后生成的jar包的名字 加入UTF-8编码避免中文乱码-->
<entryPoint>["java", "-Dfile.encoding=UTF-8", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<!--指定远程 docker api地址-->
<dockerHost>https://服务器ip:2375</dockerHost>
<!--指定ca证书文件路径地址 -->
<dockerCertPath>${project.basedir}/src/main/resources/ca</dockerCertPath>
<!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
<resources>
<resource>
<targetPath>/</targetPath>
<!--jar 包所在的路径 此处配置的 即对应 target 目录-->
<directory>${project.build.directory}</directory>
<!--用于指定需要复制的文件 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
3. Pruebe y empaquete la imagen Springboot
y siga los pasos de la figura. La
imagen empaquetada se registra correctamente, la primera velocidad de empaque es lenta, espere pacientemente por un
momento. Vea la imagen que acabamos de empaquetar en el servicio docker
4. Implemente el imagen empaquetada en el contenedor
4.1 Selecciona nuestra imagen para crear un contenedor
4.2 Configure los parámetros del contenedor, porque uso el protocolo https, por lo que se abre el mapeo del puerto 443, puede mapear el puerto correspondiente a su propio contenedor según sus necesidades
--net=host -p 443:443 -v /logs:/logs
-p es el mapeo de puertos
-v es el mapeo de volumen de datos, /logs es nuestro directorio de registro, que es conveniente para ver registros en el host de la nube
-net=host es el contenedor que usa directamente la red local del servidor en lugar de estar aislado por el red acoplable, que es conveniente para nuestro proyecto Conéctese directamente a la base de datos mysql en el contenedor
4.3 Iniciar el contenedor
4.4 Registro de inicio exitoso
4.5 Pruébelo, puede acceder directamente a él con éxito, y el registro en segundo plano también está disponible
5. Configurar tareas cronometradas de Linux
¿Por qué configurar tareas programadas?
Porque cada vez que empaquetemos, invalidaremos la última imagen, pero docker no la eliminará automáticamente, lo que ocupa mucho espacio, por lo tanto, debemos configurar una tarea programada para eliminar estas imágenes basura.
Primero cree un script sh para borrar el espejo en nuestro servidor Linux
vi /logs/deleteImg.sh
Luego pegue el siguiente código y guarde y salga
#清空none镜像
docker rmi `docker images -q -f dangling=true`
Luego ve a configurar la tarea programada
crontab -e
Luego presione la tecla a para ingresar al modo de entrada, pegue el siguiente código y finalmente guarde y salga.El script significa ejecutar el script deleteImg.sh para borrar el espejo todos los días a las 2:00 a.m.
00 02 * * * /bin/bash /logs/deleteImg.sh
6. Resumen
6.1 Hoy en día, los métodos de implementación de las empresas de Internet generalmente se llevan a cabo mediante docker y k8s, por lo que es necesario aprender conocimientos de implementación relacionados con docker;
6.2 Este blog solo puede considerarse como un docker de nivel de entrada, pero también coopera perfectamente con idea y docker, pero docker-maven La documentación oficial de -plugin no es muy clara, por lo que solo puedo configurarlo hasta este punto, espero que los hierros antiguos lo admitan durante tres olas consecutivas.