Docker implementa el proyecto SpringBoot+Vue

1. Planificación de la implementación del proyecto

        1. Blog del proyecto back-end de varios módulos y puerto de ejecución de cada módulo:

Módulo de servicio front-end sangeng-blog->7777, módulo de servicio back-end sangeng-admin->8989, módulo público sangeng-framework

        2. Proyecto front-end de Vue: sg-blog-vue->80

        3. Proyecto Vue de front-end y back-end: sg-vue-admin->81

        4.Imagen requerida de Docker

                java:17(jdk17)

                mysql:8.0.19

                redis:6.0.8

                nginx:1.18.0

        5. Implementación del proyecto

                instalar la ventana acoplable

                Extraiga la imagen java:8, use maven para empaquetar el proyecto back-end, cargue el paquete jar en el directorio especificado /mydata en el servidor, escriba el archivo Dockerfile y formatee el proyecto back-end en un archivo de imagen.

                Extraiga las imágenes mysql:8.0.19, redis:6.0.8, nginx:1.18.0.

                Escriba el archivo docker-compose.yml y utilice la orquestación de contenedores docker-compose para administrar la ejecución del contenedor.

                Configurar mysql e importar archivos sql

                Configure redis y modifique el archivo redis.conf

                Configure nginx, coloque el proyecto Vue empaquetado en el directorio html y configure el archivo nginx.conf

                prueba de funcionamiento

                Carga de imágenes en Alibaba Cloud Image Warehouse

        6. Utilice herramientas

                IDEA

                Navegar

                Mobaxterm

2. Trabajo preliminar

        2.1 Los proyectos back-end se empaquetan con maven

        2.2 Empaquetado del proyecto, ejecución de la prueba del paquete jar localmente

Ingrese el directorio de destino, ingrese cmd en el cuadro de búsqueda de archivos para ingresar a la ventana Dos y use el comando para ejecutar el paquete jar

java -jar jar包

Si no se informa ningún error, no hay ningún problema con el paquete jar.

        2.3 Embalaje del proyecto front-end

npm run build

        2.4 Pruebe localmente y póngalo en Nginx, si la prueba es normal, se puede utilizar.

        2.6 Configurar reglas del grupo de seguridad

Agregar reglas al grupo de seguridad del servidor en la nube

Este es Alibaba Cloud ECS y lo que agregué es la regla de dirección entrante.

3.Instalación de Docker

El entorno operativo Docker requiere que el sistema sea de 64 bits y que la versión del kernel del sistema Linux sea 3.8 o superior.

iniciar la instalación:

1: configurar el entorno gcc

yum -y install gcc
yum -y install gcc-c++

Dos: instale los paquetes de software necesarios

yum install -y yum-utils

Tres: instalar el almacén de espejos

Sin embargo, debido a que el servidor Docker está en el extranjero, a veces la conexión se rechaza o la conexión se agota cuando se descarga la imagen del almacén, por lo que puede utilizar Alibaba Cloud Image Warehouse.

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

Cuatro: actualice el índice del paquete yum

yum makecache fast

Cinco: instalar el motor Docker

yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Seis: iniciar la ventana acoplable

systemctl start docker

Ver servicio acoplable

Ver información de la versión de Docker

docker version

Siete: Configuración de aceleración de imágenes en la nube de Alibaba

Para configurar el acelerador de Alibaba Cloud, primero debe tener una cuenta de Alibaba Cloud. Después de iniciar sesión en Alibaba Cloud, abra la página del servicio de imágenes de contenedores de Alibaba Cloud https://cr.console.aliyun.com, luego busque la página correspondiente y luego siga los pasos indicados para completar la configuración.

 Para configurar NetEase Cloud Accelerator, simplemente reemplace la dirección de los espejos de registro en el paso de configuración de Alibaba Cloud Accelerator con la siguiente dirección: http://hub-mirror.c.163.co 

(Tenga en cuenta que debe ingresar paso a paso, consulte lo que ingresé) 

7. Pruebe la imagen de HelloWorld


Consulte ¡Hola desde Docker! Campo Descripción No hay ningún problema con nuestros pasos de instalación y Docker se ha instalado correctamente.


4. Tira de la imagen

Extraiga la imagen java:17 (JDK17)

docker pull openjdk:17

Extraiga la imagen mysql:8.0.19

docker pull mysql:8.0.19

Extraiga la imagen redis:6.0.5

docker pull redis:6.0.5

Extraiga la imagen nginx:1.18.0

docker pull nginx:1.18.0

Ver todas las imágenes actuales:

5. Escriba el Dockerfile y cree la imagen. 

1. Primero transfiera el paquete jar al directorio especificado del servidor


He creado un directorio mydata en el directorio raíz.

2. Cree un archivo Dockerfile en el directorio mydata y escriba un archivo Dockersfile

Aquí convertimos dos paquetes jar en dos imágenes respectivamente. Debido a que solo puede haber un archivo Dockerfile en un directorio, el archivo Dockerfile correspondiente se modifica después de crear la primera imagen.

:set pasteLos datos de texto pegados en modo vim  no serán confusos

El primer archivo Docker

#基础镜像使用jdk17
FROM openjdk:17
#作者
MAINTAINER gj
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名
ADD sangeng-blog.jar sangeng_blog.jar
# 运行jar包
RUN bash -c 'touch /sangeng_blog.jar'
ENTRYPOINT ["java","-jar","/sangeng_blog.jar"]
#暴露7777端口作为微服务
EXPOSE 7777

3. Construye la imagen

docker build -t sangeng_blog:1.0 .

4. El segundo archivo Docker

#基础镜像使用jdk17
FROM openjdk:17
#作者
MAINTAINER gj
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名
ADD sangeng-admin.jar sangeng_admin.jar
# 运行jar包
RUN bash -c 'touch /sangeng_admin.jar'
ENTRYPOINT ["java","-jar","/sangeng_admin.jar"]
#暴露8989端口作为微服务
EXPOSE 8989

5. Construye la imagen

docker build -t sangeng_admin:1.0 .

6. Ver la imagen construida

docker images

6. Utilice la orquestación de contenedores Docker-compose

6.1 Instalar Docker-compose ( se instalarán versiones superiores de Docker de forma predeterminada )

Nota: Si es una versión inferior de compose, debe haber dockerentrecompose-

        1. Primero verifique si el host tiene un entorno de composición acoplable.

docker compose version

Si no, instálalo

        2. Comando de instalación

DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} 

mkdir -p $DOCKER_CONFIG/cli-plugins 

curl -SL https://github.com/docker/compose/releases/download/v2.11.2/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose

chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose

6.2 Configurar archivos nginx

1. Cree un directorio de aplicaciones en el directorio / e ingrese el directorio de la aplicación

2. Primero cree un contenedor nginx, solo para copiar la configuración.

# 1.运行容器
docker run -p 80:80 --name nginx -d nginx:1.18.0

# 2.将容器内的配置文件拷贝到当前目录/app中:
docker container cp nginx:/etc/nginx .
# 3.将文件nginx修改为conf
mv nginx conf
# 4.创建文件夹nginx
mkdir nginx
# 5.将conf目录拷贝到nginx目录
cp -r conf nginx/
# 6.删除conf目录
rm -rf conf
# 3.停止并删除容器
docker stop nginx && docker rm nginx 

6.4 Escriba el archivo docker-compose.yml

1. Cree el archivo docker-compose.yml en el directorio /mydata y escriba el archivo docker-compose.yml

:set pasteLos datos de texto pegados en modo vim  no serán confusos

#compose版本
version: "3"  
 

services:
  sangeng_blog:
#微服务镜像  
    image: sangeng_blog:1.0
    container_name: sangeng_blog
    ports:
      - "7777:7777"
#数据卷
    volumes:
      - /app/sangeng_blog:/data/sangeng_blog
    networks: 
      - blog_network
    depends_on: 
      - redis
      - mysql
      - nginx


  sangeng_admin:
#微服务镜像
    image: sangeng_admin:1.0
    container_name: sangeng_admin
    ports:
      - "8989:8989"
#数据卷
    volumes:
      - /app/sangeng_admin:/data/sangeng_admin
    networks:
      - blog_network
    depends_on:
      - redis
      - mysql
      - nginx
     
#redis服务
  redis:
    image: redis:6.0.8
    ports:
      - "6379:6379"
    volumes:
      - /app/redis/redis.conf:/etc/redis/redis.conf
      - /app/redis/data:/data
    networks: 
      - blog_network
    command: redis-server /etc/redis/redis.conf
 
 #mysql服务
  mysql:
    image: mysql:8.0.19
    environment:
      MYSQL_ROOT_PASSWORD: 'xu.123456'
      MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
      MYSQL_DATABASE: 'sg_blog'
      MYSQL_USER: 'root'
      MYSQL_PASSWORD: 'xu.123456'
    ports:
       - "3306:3306"
    volumes:
       - /app/mysql/db:/var/lib/mysql
       - /app/mysql/conf/my.cnf:/etc/my.cnf
       - /app/mysql/init:/docker-entrypoint-initdb.d
    networks:
      - blog_network
    command: --default-authentication-plugin=mysql_native_password #解决外部无法访问

 #nginx服务
  nginx:
    image: nginx:1.18.0
    ports:
      - "80:80"
      - "8093:8093"
      - "8094:8094"
    volumes:
      - /app/nginx/html:/usr/share/nginx/html
      - /app/nginx/logs:/var/log/nginx
      - /app/nginx/conf:/etc/nginx
    networks:
      - blog_network
    

 
 #创建自定义网络
networks: 
   blog_network: 

2. Compruebe si hay errores de sintaxis en compose.yml en el directorio actual

docker compose config -q

3. Inicie todos los servicios de Docker-Compose y ejecútelos en segundo plano.

docker compose up -d

 Ver instancias de contenedores en ejecución

Nota: Debido a que MySQL y Redis aún no se han configurado, el contenedor puede bloquearse. En este caso, puede esperar hasta que MySQL y Redis estén configurados antes de reiniciar la instancia del contenedor.

7. Configurar MySQL

1. Transfiera el archivo sql /app/mysql/dbal directorio (la misma ubicación del volumen de datos del contenedor que la instancia del contenedor MySQL)

​ Native Navicat exporta el archivo sql y lo transfiere al /app/mysql/dbdirectorio

2. Ingrese la instancia del contenedor MySQL

docker exec -it 容器ID bash

Compruebe si hay un archivo sql en /var/lib/mysqlel directorio (lo hay en el ejemplo)

3. Inicie sesión en MySQL

La contraseña se configura en el archivo docker-compose.yml

4. Utilice la base de datos correspondiente e importe el archivo sql.

use sg_blog;
source /var/lib/mysql/sg_blog.sql;

5.Importar base de datos exitosamente

 8. Configurar Redis

1. Obtenga el archivo de configuración de la versión correspondiente de redis.

Porque la imagen de Redis extraída por Docker no tiene un archivo redis.conf. Por lo tanto, necesitamos encontrar la versión correspondiente del archivo de configuración redis.conf en nuestro sitio web oficial.

Sitio web oficial del archivo de configuración de RedisConfiguración de Redis | Redis

Como mi versión de Redis es 6.0.8, elijo el archivo de configuración 6.0.

2. Ingrese /app/redisal directorio

Utilice el comando vim para ingresar al editor vim y pegue el contenido del archivo de configuración de redis en él.

:set pasteLos datos de texto pegados en modo vim  no serán confusos

3. Modificar el contenido del archivo de configuración.

  • Agregar contraseña de redis (requirepass)

  • Modifique el enlace a 0.0.0.0 (cualquier máquina puede acceder)

  • Para evitar conflictos con el parámetro -d en la ventana acoplable, configure el inicio en segundo plano en no (daemonize no)

  • Desactivar el modo protegido (modo protegido no)

 

 9. Pruebe la interfaz de backend

 prueba bien

10. Configurar Nginx

10.1 Operando la carpeta dist

        1. Cambie el nombre de las dos carpetas dist empaquetadas y envíelas al /app/nginx/htmldirectorio

2. Modifique el archivo de configuración nginx.conf

Ingrese a la carpeta conf y abra el archivo nginx.conf

​ Al http{.......}agregar dos server
, recuerde que la ruta raíz es la ruta del archivo dist en el contenedor.

   server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;
        #
        #       #access_log  logs/host.access.log  main;

              location / {
                     root   /usr/share/nginx/html/blog_dist;
                     index  index.html index.htm;
                     try_files $uri $uri/ /index.html;
                   }

        }

    server {
        listen       81;
        server_name  localhost;

        #charset koi8-r;
        #
        #       #access_log  logs/host.access.log  main;

              location / {
                     root   /usr/share/nginx/html/admin_dist;
                     index  index.html index.htm;
                     try_files $uri $uri/ /index.html;
                   }

        }

10. Pruebas del proyecto

Puede ser que el monitoreo 80 configurado no surtió efecto porque estaba monitoreando 80. Finalmente, lo puse directamente debajo del html y lo cambiaré después de encontrar el motivo.

Accede a la IP y puerto correspondiente para comprobar si hay algún problema con el proyecto.

mostrador

 Entre bastidores

Supongo que te gusta

Origin blog.csdn.net/qq_52183856/article/details/130220923
Recomendado
Clasificación