Uso básico de la implementación de proyectos de Docker y SpringBoot

¡Como tú que amas la programación!
Aprenda los cursos prácticos de SpringBoot https://edu.csdn.net/course/detail/31433
Aprenda los cursos de introducción a SpringCloud https://edu.csdn.net/course/detail/31451


Visión general

Este artículo presentará la instalación y el uso básico de Docker, y cómo implementar proyectos SpringBoot en Docker.

1. Por qué utilizar Docker

El desarrollador Xiao Ming vio el error enviado por la prueba y dijo: El programa funciona bien en mi máquina, ¿cómo es que no estás trabajando?

Cuando el rey de las pruebas vio el informe del problema enviado por Xiao Liu desde el departamento de operación y mantenimiento, dijo: El programa está bien probado aquí, ¿cómo puede no funcionar del lado del cliente?

Esta es en realidad la rutina diaria del desarrollo de software Uno de los problemas más problemáticos en el desarrollo de software es la configuración del entorno.

Un proyecto necesita el soporte de una gran cantidad de programas para ejecutarse, incluidos: jdk, tomcat, mysql, redis, nginx, etc. La configuración del entorno de cada programa puede ser diferente, lo que puede llevar fácilmente a: se puede ejecutar en su máquina, no puede funcionar en su máquina.

¿Cómo resolver este problema?

1.1 Containerización

La respuesta es: contenerización

La contenerización significa empaquetar el programa en un contenedor y luego copiar el contenedor cuando sea necesario, de modo que la configuración del entorno del programa en el contenedor pueda mantenerse consistente, lo que fundamentalmente resuelve el problema de la configuración del entorno inconsistente.

1.2 Máquinas virtuales y contenedores

Al pensar en la contenedorización, algunos estudiantes pueden pensar en la máquina virtual que usamos antes. Después de clonar la máquina virtual, la configuración del entorno de software en el interior también es la misma.

Arquitectura de contenedor y máquina virtual

Inserte la descripción de la imagen aquí

Puede ver que la mayor diferencia entre una máquina virtual y un contenedor es:

Hay un sistema operativo adicional en la máquina virtual, y el contenedor y el host comparten el sistema operativo, que es más ligero.

Comparación de contenedores y máquinas virtuales

característica envase máquina virtual
Hora de inicio Segundo nivel Nivel de minutos
Uso del disco duro Generalmente MB Generalmente GB
actuación Cerca de nativo Más débil que el nativo
Soporte del sistema Una sola máquina admite miles de contenedores Por lo general, docenas

Los contenedores tienen ventajas sobre las máquinas virtuales en términos de ocupación de recursos y rendimiento, y las máquinas virtuales son más fuertes que los contenedores en términos de funciones del sistema y seguridad.

2. Introducción a Docker

Inserte la descripción de la imagen aquí

2.1 ¿Qué es Docker?

Docker es un motor de contenedor de aplicaciones de código abierto que permite a los desarrolladores empaquetar sus aplicaciones y paquetes dependientes en un contenedor portátil y luego publicarlo en cualquier máquina Linux popular. También se puede virtualizar. El contenedor está completamente aislado. Mecanismo, habrá sin interfaces entre sí.

Docker es muy similar al sistema operativo de los contenedores. Los contenedores son contenedores. Dentro están los programas que necesitamos. Estos contenedores están aislados entre sí. Cuando se necesitan, se transportan desde cargueros, ensamblados por trabajadores portuarios en autos y trenes, y luego se envía a las ubicaciones de cada proyecto.

2.2 Arquitectura de Docker

Inserte la descripción de la imagen aquí

Conceptos importantes:

  • Host (servidor que ejecuta Docker)
  • Daemon daemon (ejecuta operaciones de Docker en segundo plano)
  • Registro de servicio de Registry Warehouse (servidor remoto, guardar una gran cantidad de almacenes)
  • Repositorio (la ubicación donde se guarda el archivo de imagen)
  • Imagen (Guardar proceso o archivo de software)
  • Contenedor (proceso después de que se ejecuta la imagen)

Docker adopta el modo C / S (modo cliente / servidor), las operaciones principales son build (build), pull (pull), run (run), si los usuarios necesitan usar mysql, se conectarán al host a través del cliente, y el guardia en el host El proceso extraerá mysql del registro de servicio remoto, lo guardará en el archivo de imagen en el host y luego creará la imagen mysql. La imagen completa puede crear un contenedor mysql, y el contenedor mysql en ejecución puede proporcionar servicios a los usuarios.

3. Instale Docker

1. Elimina la versión anterior de Docker.

yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-selinux \
    docker-engine-selinux \
    docker-engine

2. Instalar paquetes dependientes

yum install -y yum-utils \
    device-mapper-persistent-data \
    lvm2

3. Instalar Docker

yum install docker

4. Inicie la ventana acoplable

systemctl enable docker
systemctl start docker

5. Ver los resultados de la instalación

docker version

6. Configurar la duplicación

Acelere la descarga de la imagen, cree o modifique el archivo /etc/docker/daemon.json y modifíquelo al siguiente formulario

{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}

7. Reiniciar

systemctl restart docker

4. Uso básico de Docker

Comandos comunes de Docker

docker images			  查看镜像
docker search 镜像名称	    搜索镜像
docker ps				   查看容器
docker stop 容器id		 停止容器
docker rm 容器id			 删除容器
docker rmi 镜像id			 删除镜像
docker run 镜像id			 运行镜像
docker pull 镜像名			拉取镜像
docker build 镜像名 .		创建镜像

1) Coge el almacén

docker pull library/hello-world

2) Mira el espejo

docker images

4) Ejecuta el espejo

docker run hello-world

Inserte la descripción de la imagen aquí

5. Docker instala MySQL

1) Instalar MySQL

docker pull mysql:5.7	

2) Ejecute el espejo MySQL

docker run  -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql镜像ID

El puerto detrás de -p es el puerto local, que se asigna al puerto 3306 de MySQL en la ventana acoplable, y la contraseña de root se establece más tarde

-d se está ejecutando en segundo plano

3) Ver el ID del contenedor

docker ps

Inserte la descripción de la imagen aquí

4) Cargue el script de la base de datos en Linux y luego copie el script en el directorio raíz de Docker

docker cp bookdb.sql 21db7dd6618e:\root

5) Ingrese al contenedor docker

docker exec -it  21db7dd6618e bash

6) Ingrese a MySQL

mysql -uroot -p123456

7) Establecer codificación, crear base de datos

set names utf8;
create database bookdb;
use bookdb;

8) Importar script sql

source /root/bookdb.sql;

9) Modifique los permisos de acceso remoto:

select host,user,plugin,authentication_string from mysql.user;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;
  1. Salir de mysql y docker
exit

6. Implementar el proyecto Springboot en Docker

1) Modificar el archivo pom

Primero agregue el nombre de la imagen de Docker en el archivo pom.xml del proyecto springboot:

<properties>
    <docker.image.prefix>springboot</docker.image.prefix>
</properties>

Agregue el complemento de compilación de Docker en el complemento:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <!-- Docker maven plugin -->
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>1.0.0</version>
            <configuration>
                <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                <dockerDirectory>src/main/docker</dockerDirectory>
                <resources>
                    <resource>
                        <targetPath>/</targetPath>
                        <directory>${project.build.directory}</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
            </configuration>
        </plugin>
        <!-- Docker maven plugin -->
    </plugins>
</build>

2) Crea un Dockerfile

FROM java:8
VOLUME /tmp
COPY jar文件名 app.jar
RUN bash -c "touch /app.jar"
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar", "--spring.profiles.active=test", "--server.port=8080", "> /log/app.log"]

Explicación del contenido:

FROM java:8是获取到远程仓库的jdk1.8镜像。

VOLUME指向了一个/tmp的目录,由于Spring Boot使用内置的Tomcat容器,Tomcat默认使用/tmp作为工作目录。效果就是在主机的/var/lib/docker目录下创建了一个临时文件,并连接到容器的/tmp。

将项目的jar文件复制为app.jar添加到容器

RUN表示在新创建的镜像中执行一些命令,然后把执行的结果提交到当前镜像。这里使用touch命令来改变文件的修改时间,Docker创建的所有容器文件默认状态都是“未修改”。这对于简单应用来说不需要,不过对于一些静态内容(比如:index.html)的文件就需要一个“修改时间”。

EXPOSE 容器暴露端口

ENTRYPOINT 应用启动命令 参数设定

3) Cree una carpeta docker, mueva el paquete jar y Dockerfile a esta carpeta, ingrese la carpeta y ejecute el comando:

docker build -t 镜像名称  .

4) Mira el espejo

docker images

5) Ejecuta el espejo

docker run --rm -p 8080:8080 --link mysql容器ID:localhost docker镜像名称或ID

--Rm significa que el contenedor se eliminará automáticamente

-p significa mapeo de puertos, el lado izquierdo de los dos puntos es el número de puerto fuera del contenedor de la ventana acoplable y el lado derecho es el número de puerto dentro del contenedor

-d significa que se ejecuta en segundo plano

--Link significa conectarse al contenedor mysql (si el proyecto no requiere una base de datos, puede eliminarlo), el lado izquierdo de los dos puntos es la identificación del contenedor mysql seguido del alias del contenedor, de modo que el localhost configurado en jdbcUrl se convertirá al contenedor docker de mysql

6) Resuelva el problema de que Docker no se puede conectar a Internet

Si aparece el siguiente mensaje después de iniciar el proyecto, significa que hay un problema con la red de Docker

Inserte la descripción de la imagen aquí

Solución

vi /etc/sysctl.conf

Agregar reenvío ipv4

net.ipv4.ip_forward=1

Reiniciar la red

service network restart

Prueba a través del navegador después de reiniciar la imagen de Docker

Inserte la descripción de la imagen aquí

7) Guarde la imagen en el almacén remoto.

Inicie sesión en Docker Hub, ingrese su cuenta y contraseña

docker login

Empuje la imagen a la ventana acoplable

docker push 镜像名称

Fin

Este artículo lo lleva a través de la introducción de Docker y la implementación de un proyecto simple. Si lo encuentra útil, dé su aprobación.


Si necesita aprender otros conocimientos de Java, haga clic aquí Conocimiento ultra detallado de Java Resumen

Supongo que te gusta

Origin blog.csdn.net/u013343114/article/details/112170627
Recomendado
Clasificación