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 paste
Los 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 docker
entrecompose
-
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 paste
Los 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/db
al 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/db
directorio
2. Ingrese la instancia del contenedor MySQL
docker exec -it 容器ID bash
Compruebe si hay un archivo sql en /var/lib/mysql
el 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/redis
al directorio
Utilice el comando vim para ingresar al editor vim y pegue el contenido del archivo de configuración de redis en él.
:set paste
Los 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/html
directorio
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