首页 > 编程语言 >Java容器化改造

Java容器化改造

时间:2024-05-08 19:22:43浏览次数:19  
标签:容器 Java name 改造 192.168 eladmin sys mysql root

docker java项目容器化改造

前后端分离项目

前端 https://gitee.com/yuco/eladmin-web.git

后端 https://gitee.com/yuco/eladmin.git

  • 要素:vue npm springboot mysql redis

java后端容器化

思路:

了解在物理机虚拟机的部署流程,然后编写dockerfile进行容器化部署。

java项目,使用mvn进行构建,最终生成jar包,拷贝到jdk环境中启动即可,所以需要多阶段构建。

先启动容器,然后手动构建验证,最后在编写dockerfile进行构建。

# 1.进入maven环境,下载代码,构建得到jar包,pom.xml已经配置好了阿里云的mvn源
docker run --rm -ti aerialist7/maven-git sh #创建一个mvn 、jdk环境

git clone https://gitee.com/yuco/eladmin.git
cd /eladmin

mkdir -p /root/.m2

echo '<settings><mirrors><mirror><id>nexus-tencentyun</id><url>https://maven.aliyun.com/repository/public	</url><mirrorOf>central</mirrorOf></mirror></mirrors></settings>' > /root/.m2/settings.xml #配置腾讯mvn源地址

mvn clean package


image-20240507142604445

启动java程序

/eladmin # ls
LICENSE            eladmin-common     eladmin-logging    eladmin-tools      sql
README.md          eladmin-generator  eladmin-system     pom.xml
/eladmin # cd eladmin-system/target/
/eladmin/eladmin-system/target # ls
classes                          eladmin-system-2.6.jar.original  generated-test-sources           maven-status
eladmin-system-2.6.jar           generated-sources                maven-archiver                   test-classes
/eladmin/eladmin-system/target # java -jar eladmin-system-2.6.jar
       _                 _           _
      | |               | |         (_)
   ___| |______ __ _  __| |_ __ ___  _ _ __
  / _ | |______/ _` |/ _` | '_ ` _ \| | '_ \
 |  __| |     | (_| | (_| | | | | | | | | | |
  \___|_|      \__,_|\__,_|_| |_| |_|_|_| |_|

 :: Spring Boot ::       (v2.6.4)
elAdmin- 2024-05-07 06:31:58 [main] INFO  me.zhengjie.AppRun - Starting AppRun v2.6 using Java 1.8.0_191 on 1e2bbff29645 with PI

image-20240507143314956

编写dockerfile

根据手动编译,咱们已经知道了流程,

1、需要mvn java git环境

2、修改mvn源地址,编译源码

3、生成jar包,启动java -jar eladmin-system-2.6.jar

#准备源码
cd /opt
git clone https://gitee.com/yuco/eladmin.git
FROM aerialist7/maven-git as builder

WORKDIR /opt/eladmin
COPY  . .
RUN mvn clean package

FROM java:8u111
WORKDIR /opt/eladmin
COPY --from=builder /opt/eladmin/eladmin-system/target/eladmin-system-2.6.jar .
CMD [ "sh", "-c", "java -Dspring.profiles.active=prod -jar eladmin-system-2.6.jar" ]
如上的java参数-Dspring.profiles.active=prod是指可以有多个config.yml配置文件,以在不同的环境下测试。
#构建镜像
docker build  -t eladmin:v1 .

image-20240507151707369

image-20240507151732853

image-20240507151751434

准备数据库

[root@localhost mysql]# cat docker-compose.yml 
version: '3'
services:
    mysql:
        command: '--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci'
        image: 'mysql:5.7'
        environment:
            - MYSQL_ROOT_PASSWORD=H123.com
            - MYSQL_DATABASE=eladmin
        volumes:
            - '/opt/mysql2:/var/lib/mysql'
        container_name: mysql
        ports:
            - '3306:3306'

image-20240507153511655

导入eladmin数据

[root@localhost eladmin]# cd sql
[root@localhost sql]# ls
eladmin.sql  tool_picture.sql  脚本如何选择.md
[root@localhost sql]# pwd
/opt/eladmin/sql
[root@localhost sql]# docker ps
CONTAINER ID   IMAGE       COMMAND                   CREATED              STATUS              PORTS                                                  NAMES
41edc310433c   mysql:5.7   "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
[root@localhost sql]# docker cp /opt/eladmin/sql/eladmin.sql mysql:/tmp/
Successfully copied 51.2kB to mysql:/tmp/
[root@localhost sql]# 
[root@localhost sql]# docker exec -it mysql /bin/bash   #进入数据库
bash-4.2# mysql -uroot -pH123.com eladmin < /tmp/eladmin.sql  #导入数据
mysql: [Warning] Using a password on the command line interface can be insecure.
bash-4.2# mysql -uroot -pH123.com                            
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.44 MySQL Community Server (GPL)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| eladmin            |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> USE eladmin;  #选择数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> SHOW TABLES;   #查看数据库中的表
+--------------------+
| Tables_in_eladmin  |
+--------------------+
| code_column_config |
| code_gen_config    |
| mnt_app            |
| mnt_database       |
| mnt_deploy         |
| mnt_deploy_history |
| mnt_deploy_server  |
| mnt_server         |
| sys_dept           |
| sys_dict           |
| sys_dict_detail    |
| sys_job            |
| sys_log            |

数据库常用命令

要查看 MySQL 中 `test` 数据库的信息,你需要通过 MySQL 命令行工具或任何支持的图形界面工具连接到数据库。下面我会给你一个简单的步骤说明如何使用命令行查看数据库信息。

**步骤 1: 连接到 MySQL 数据库**
首先,你需要使用 MySQL 命令行客户端连接到 MySQL 服务器。假设你已经有了适当的权限和认证信息,你可以使用以下命令:

```bash
mysql -u username -p
```
这里 `username` 是你的 MySQL 用户名。输入命令后,系统会提示你输入密码。

**步骤 2: 选择数据库**
连接成功后,你需要选择 `test` 数据库:

```sql
USE test;
```

**步骤 3: 查看数据库中的表**
要查看 `test` 数据库中所有的表,你可以使用以下 SQL 命令:

```sql
SHOW TABLES;
```

**步骤 4: 查看表的结构**
选择一个特定的表,比如 `example_table`,并查看其结构:

```sql
DESCRIBE example_table;
```

**步骤 5: 查询表中的数据**
查看表中的数据,可以使用 `SELECT` 语句。例如,查看 `example_table` 表中的所有记录:

```sql
SELECT * FROM example_table;
```

这些步骤将帮助你检查 `test` 数据库中的内容。如果你需要执行特定的查询或有关数据的更复杂的分析,请确保 SQL 语句符合你的需求。

创建redis

[root@localhost redis]# cat docker-compose.yaml 
version: '3'
services:
    redis:
        command: redis-server
        image: 'redis:3.2'
        restart: always
        container_name: redis
        ports:
            - '6379:6379'

image-20240507154549253

启动后端

[root@localhost houduan]# cat docker-compose.yaml 
version: '3'
services:
    eladmin:
        image: 'eladmin:v1'
        environment:
            - REDIS_HOST=192.168.199.142
            - DB_PWD=H123.com
            - DB_USER=root
            - DB_HOST=192.168.199.142
        ports:
            - '8000:8000'
        container_name: eladmin-api

image-20240507161044614

image-20240507161144982

image-20240507162050025

前端Vue构建

思路:

  • 前端构建需要node环境,构建结果通常为dist静态文件,项目运行仅需要web服务器即可。因此采用多阶构建
  • 确认基础镜像:docker search vue-node
  • 验证构建,最终采用codemantn/vue-node作为基础镜像

准备源码

git clone https://gitee.com/yuco/eladmin-web
cd   eladmin-web/ 

修改npm源

npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/
npm config set registry https://registry.npm.taobao.com   #测试能不能用
npm install
npm run build:prod

生成dist静态文件,把文件内容放到nignx的/usr/share/nginx/html即可

编写dockerfile

FROM codemantn/vue-node AS builder

LABEL maintainer="yanfei"

# config npm
RUN npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/ && \
    npm config set registry https://mirrors.huaweicloud.com/repository/npm/

WORKDIR /opt/eladmin-web
COPY  . .

# build
RUN ls -l && npm install && npm run build:prod


FROM nginx:alpine

WORKDIR /usr/share/nginx/html

COPY --from=builder /opt/eladmin-web/dist /usr/share/nginx/html/

EXPOSE 80

image-20240507170100469

修改前端代码,后端AIP地址

浏览器——前端——后端

需要在前端代码后面成后端的API地址

[root@localhost eladmin-web]# cat .env.production 
ENV = 'production'

# 如果使用 Nginx 代理后端接口,那么此处需要改为 '/',文件查看 Docker 部署篇,Nginx 配置
# 接口地址,注意协议,如果你没有配置 ssl,需要将 https 改为 http
VUE_APP_BASE_API  = 'http://192.168.199.142:8000'
# 如果接口是 http 形式, wss 需要改为 ws
VUE_APP_WS_API = 'ws://192.168.199.142:8000'
[root@localhost eladmin-web]# 

构建镜像

docker build . -t eladmin-web:v1 -f Dockerfile

image-20240507165917365

启动前端

mkdir qianduan

[root@localhost qianduan]# cat docker-compose.yaml 
version: '3'
services:
    eladmin-web:
        image: 'eladmin-web:v1'
        ports:
            - '800:80'
        container_name: eladmin-web

[root@localhost qianduan]# docker-compose up -d
Recreating eladmin-web ... done
[root@localhost qianduan]# docker ps
CONTAINER ID   IMAGE            COMMAND                   CREATED             STATUS             PORTS                                                  NAMES
118cfc5bca90   eladmin-web:v1   "/docker-entrypoint.…"   4 seconds ago       Up 3 seconds       0.0.0.0:800->80/tcp, :::800->80/tcp                    eladmin-web
62eae48d373b   eladmin:v1       "sh -c 'java -Dsprin…"   55 minutes ago      Up 55 minutes      0.0.0.0:8000->8000/tcp, :::8000->8000/tcp              eladmin-api
4dc3fc361855   redis:3.2        "docker-entrypoint.s…"   About an hour ago   Up About an hour   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              redis
41edc310433c   mysql:5.7        "docker-entrypoint.s…"   About an hour ago   Up About an hour   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql

image-20240507170748691

image-20240507170819186

image-20240507171028765

查看数据库是否有用户

[root@localhost qianduan]# docker exec -it mysql /bin/bash
bash-4.2# mysql -uroot -p

mysql> use eladmin;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+--------------------+
| Tables_in_eladmin  |
+--------------------+
| code_column_config |
| code_gen_config    |
| mnt_app            |
| mnt_database       |
| mnt_deploy         |
| mnt_deploy_history |
| mnt_deploy_server  |
| mnt_server         |
| sys_dept           |
| sys_dict           |
| sys_dict_detail    |
| sys_job            |
| sys_log            |
| sys_menu           |
| sys_quartz_job     |
| sys_quartz_log     |
| sys_role           |
| sys_roles_depts    |
| sys_roles_menus    |
| sys_user           |
| sys_users_jobs     |
| sys_users_roles    |
| tool_alipay_config |
| tool_email_config  |
| tool_local_storage |
| tool_qiniu_config  |
| tool_qiniu_content |
+--------------------+
27 rows in set (0.00 sec)

mysql> select * from sys_user;
+---------+---------+----------+-----------+--------+-------------+------------------+------------------------------+----------------------------------------------------------------------------------+--------------------------------------------------------------+----------+---------+-----------+-----------+---------------------+---------------------+---------------------+
| user_id | dept_id | username | nick_name | gender | phone       | email            | avatar_name                  | avatar_path                                                                      | password                                                     | is_admin | enabled | create_by | update_by | pwd_reset_time      | create_time         | update_time         |
+---------+---------+----------+-----------+--------+-------------+------------------+------------------------------+----------------------------------------------------------------------------------+--------------------------------------------------------------+----------+---------+-----------+-----------+---------------------+---------------------+---------------------+
|       1 |       2 | admin    | ???       | ?      | 18888888888 | [email protected] | avatar-20200806032259161.png | /Users/jie/Documents/work/me/admin/eladmin/~/avatar/avatar-20200806032259161.png | $2a$10$Egp1/gvFlt7zhlXVfEFw4OfWQCGPw0ClmMcc6FjTnvXNRVf9zdMRa |         |       1 | NULL      | admin     | 2020-05-03 16:38:31 | 2018-08-23 09:11:56 | 2020-09-05 10:43:31 |
|       2 |       2 | test     | ??        | ?      | 19999999999 | [email protected]       | NULL                         | NULL                                                                             | $2a$10$4XcyudOYTSz6fue6KFNMHeUQnCX5jbBQypLEnGk1PmekXt5c95JcK |          |       1 | admin     | admin     | NULL                | 2020-05-05 11:15:49 | 2020-09-05 10:43:38 |
|       3 |       7 | yanfei   | yanfei    | ?      | 13838384388 | [email protected]       | NULL                         | NULL                                                                             | $2a$10$WGBNrFiJE3APZ3nSiOaBg.Z/Gq6BsXmg2I0kIB9ozwlLe30XiH62u |          |       1 | admin     | admin     | NULL                | 2024-05-07 17:09:56 | 2024-05-07 17:09:56 |
+---------+---------+----------+-----------+--------+-------------+------------------+------------------------------+----------------------------------------------------------------------------------+--------------------------------------------------------------+----------+---------+-----------+-----------+---------------------+---------------------+---------------------+
3 rows in set (0.00 sec)

mysql> 

image-20240507171358442

合并docker-compse文件

version: '3'
services:
  mysql:
    command: '--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci'
    image: 'mysql:5.7'
    environment:
      - MYSQL_ROOT_PASSWORD=H123.com
      - MYSQL_DATABASE=eladmin
    volumes:
      - '/opt/mysql2:/var/lib/mysql'
    container_name: mysql
    ports:
      - '3306:3306'

  redis:
    command: redis-server
    image: 'redis:3.2'
    restart: always
    container_name: redis
    ports:
      - '6379:6379'
      
  eladmin-web:
    image: 'eladmin-web:v1'
    ports:
      - '800:80'
    container_name: eladmin-web

  eladmin:
    image: 'eladmin:v1'
    environment:
      - REDIS_HOST=redis
      - DB_PWD=H123.com
      - DB_USER=root
      - DB_HOST=mysql
    ports:
      - '8000:8000'
    container_name: eladmin-api



部署到k8s里面

把封装好的镜像推送到私有仓库里面,根据docker文件编写k8s yaml文件。

启动顺序:redis——mysql——eladmin——eladmin-web

所有资源放到eladmin名称空间下面。

kubectl create ns eladmin

k8s redis

apiVersion: v1
kind: Pod
metadata:
  name: redis
  namespace: eladmin
  labels:
    app: redis
spec:
  # hostNetwork: true
  containers:
  - name: redis
    image: 192.168.199.88/ae/redis:3.2
    ports:
    - containerPort: 6379

下载私有镜像报错

image-20240508113313651

支持私有仓库,用户密码下载

#配置支持私有仓库http下载
mkdir -p /etc/containerd/certs.d/192.168.199.88
cat >/etc/containerd/certs.d/192.168.199.88/hosts.toml <<EOF
server = "http://192.168.199.88"
[host."http://192.168.199.88"]
  capabilities = ["pull", "resolve", "push"]
  skip_verify = true
EOF

#配置docker harbor用户密码
kubectl create secret docker-registry registry-192.168.199.88 \
  --docker-server=192.168.199.88 --docker-username=admin \
  --docker-password=k8sHarbor12345 [email protected] \
  --namespace=eladmin
[root@k8s-master eladmin]# cat redis_pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: redis
  namespace: eladmin
  labels:
    app: redis
spec:
  imagePullSecrets:
  - name: registry-192.168.199.88
  # hostNetwork: true
  containers:
  - name: redis
    image: 192.168.199.88/ae/redis:3.2
    ports:
    - containerPort: 6379

image-20240508134707009

优化yaml

[root@k8s-master eladmin]# 
cat >redis-all.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  namespace: eladmin
spec:
  replicas: 1  # 更新副本数量为3
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      imagePullSecrets:
      - name: registry-192.168.199.88
      containers:
      - image: 192.168.199.88/ae/redis:3.2
        name: container
---
apiVersion: v1
kind: Service
metadata:
  name: redis       # Service的名称 ,svc  ip,dns,自定义,做好按业务名称,通俗易懂
  namespace: eladmin    #和之前创建的后端放一个名称空间中
spec:
  selector:          # Label Selector,选择包含app=nginx标签的Pod,后面只要这个命名空间中带这个标签的server IP就会自动发现
    app: redis  #之前创建pod中的保持一致
  ports:
  - name: service
    targetPort: 6379   # Pod的端口
    port: 6379        # Service对外暴露的端口,也就是ClusterIP的port
    protocol: TCP    # 转发协议类型,支持TCP和UDP
  type: NodePort   # Service的类型
EOF

image-20240508142918351

k8s mysql

创建mysql pvc

#创建mysql pvc
[root@k8s-master eladmin]# cat mysql-pvc.yaml 
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: eladmin-mysql
  namespace: eladmin
spec:
  accessModes:  ["ReadWriteMany"]
  resources:
    requests:
      storage: 1Gi
  storageClassName:  managed-nfs-storage

[root@k8s-master eladmin]# kubectl -n eladmin get pvc
NAME            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS          AGE
eladmin-mysql   Bound    pvc-e35d1f55-6d75-479e-a184-d862eea58041   1Gi        RWX            managed-nfs-storage   6s

创建 mysql pod

#创建pod mysql
[root@k8s-master eladmin]# cat mysql-pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: mysql
  namespace: eladmin
  labels:
    app: mysql
spec:
  imagePullSecrets:
  - name: registry-192.168.199.88
  containers:
  - name: mysql
    image: 192.168.199.88/ae/mysql:5.7
    env:
    - name: MYSQL_DATABASE   #  指定数据库地址
      value: "eladmin"
    - name: MYSQL_ROOT_PASSWORD
      value: "H123.com"
    ports:
    - containerPort: 3306
    args:
    - --character-set-server=utf8mb4
    - --collation-server=utf8mb4_unicode_ci
    volumeMounts:
    - name: mysql-data
      mountPath: /var/lib/mysql
  volumes: 
  - name: mysql-data
    persistentVolumeClaim:
      claimName: eladmin-mysql

优化mysql yaml

[root@k8s-master eladmin]# cat mysql-all.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
  namespace: eladmin
spec:
  replicas: 1  # 更新副本数量为3
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      imagePullSecrets:
      - name: registry-192.168.199.88
      containers:
      - name: mysql
        image: 192.168.199.88/ae/mysql:5.7
        env:
        - name: MYSQL_DATABASE   #  指定数据库地址
          value: "eladmin"
        - name: MYSQL_ROOT_PASSWORD
          value: "H123.com"
        args:
        - --character-set-server=utf8mb4
        - --collation-server=utf8mb4_unicode_ci
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
      volumes: 
      - name: mysql-data
        persistentVolumeClaim:
          claimName: eladmin-mysql

---
apiVersion: v1
kind: Service
metadata:
  name: mysql       # Service的名称 ,svc  ip,dns,自定义,做好按业务名称,通俗易懂
  namespace: eladmin    #和之前创建的后端放一个名称空间中
spec:
  selector:          # Label Selector,选择包含app=nginx标签的Pod,后面只要这个命名空间中带这个标签的server IP就会自动发现
    app: mysql  #之前创建pod中的保持一致
  ports:
  - name: service
    targetPort:    # Pod的端口
    port: 3306      # Service对外暴露的端口,也就是ClusterIP的port
    protocol: TCP    # 转发协议类型,支持TCP和UDP
  type: NodePort   # Service的类型

image-20240508151739752

mysql导入eladmin数据

[root@localhost sql]# pwd
/opt/eladmin/sql
[root@localhost sql]# scp eladmin.sql [email protected]:/tmp
The authenticity of host '192.168.199.171 (192.168.199.171)' can't be established.
ECDSA key fingerprint is SHA256:M1KLKNxI8H9Uy/z7Pq1akfBFRZymUgPegab3vOa+dQ0.
ECDSA key fingerprint is MD5:5d:f8:62:ad:a1:bc:ff:27:fd:8a:0e:bd:dd:60:46:94.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.199.171' (ECDSA) to the list of known hosts.
[email protected]'s password: 
eladmin.sql                                     100%   48KB   3.6MB/s   00:00    
[root@localhost sql]# 


[root@k8s-master eladmin]# kubectl -n eladmin get pod
NAME                     READY   STATUS    RESTARTS   AGE
mysql-84fdfffcd7-cpbsg   1/1     Running   0          16m
redis-686f98d84-ddmg9    1/1     Running   0          66m

[root@k8s-master eladmin]# kubectl -n eladmin  cp /tmp/eladmin.sql mysql-84fdfffcd7-cpbsg:/tmp/
[root@k8s-master eladmin]# kubectl -n eladmin exec -it mysql-84fdfffcd7-cpbsg /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
bash-4.2# cd /tmp/
bash-4.2# ls
eladmin.sql
bash-4.2# 
bash-4.2# mysql -uroot -p eladmin < /tmp/eladmin.sql 
Enter password: 
bash-4.2# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.44 MySQL Community Server (GPL)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| eladmin            |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

mysql> use eladmin;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+--------------------+
| Tables_in_eladmin  |
+--------------------+
| code_column_config |
| code_gen_config    |
| mnt_app            |
| mnt_database       |
| mnt_deploy         |
| mnt_deploy_history |
| mnt_deploy_server  |
| mnt_server         |
| sys_dept           |
| sys_dict           |
| sys_dict_detail    |
| sys_job            |
| sys_log            |
| sys_menu           |
| sys_quartz_job     |
| sys_quartz_log     |
| sys_role           |
| sys_roles_depts    |
| sys_roles_menus    |
| sys_user           |
| sys_users_jobs     |
| sys_users_roles    |
| tool_alipay_config |
| tool_email_config  |
| tool_local_storage |
| tool_qiniu_config  |
| tool_qiniu_content |
+--------------------+
27 rows in set (0.01 sec)

mysql> 


k8s eladminapi

apiVersion: v1
kind: Pod
metadata:
  name: eladmin-api
  namespace: eladmin
  labels:
    app: eladmin-api
spec:
  imagePullSecrets:
  - name: registry-192.168.199.88
  containers:
  - name: eladmin-api
    image: 192.168.199.88/ae/eladmin:v1
    env:
    - name: DB_HOST   #  指定数据库地址,更新为svc
      value: "mysql.eladmin.svc.cluster.local"
    - name: DB_USER   #  指定数据库连接使用的用户
      value: "root"
    - name: DB_PWD
      value: "H123.com"
    - name: REDIS_HOST
      value: "redis"
    - name: REDIS_PORT
      value: "6379"
    ports:
    - containerPort: 8000 # 同EXPOSE,声明业务端口号

image-20240508154100728

image-20240508154428825

优化eladminapi yaml

[root@k8s-master eladmin]# cat eladminapi-all.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: eladminapi
  namespace: eladmin
spec:
  replicas: 1  # 更新副本数量为3
  selector:
    matchLabels:
      app: eladminapi
  template:
    metadata:
      labels:
        app: eladminapi
    spec:
    spec:
      imagePullSecrets:
      - name: registry-192.168.199.88
      containers:
      - name: eladmin-api
        image: 192.168.199.88/ae/eladmin:v1
        env:
        - name: DB_HOST   #  指定数据库地址,更新为svc
          value: "mysql.eladmin.svc.cluster.local"
        - name: DB_USER   #  指定数据库连接使用的用户
          value: "root"
        - name: DB_PWD
          value: "H123.com"
        - name: REDIS_HOST
          value: "redis"
        - name: REDIS_PORT
          value: "6379"
        ports:
        - containerPort: 8000 # 同EXPOSE,声明业务端口号
---
apiVersion: v1
kind: Service
metadata:
  name: eladminapi       # Service的名称 ,svc  ip,dns,自定义,做好按业务名称,通俗易懂
  namespace: eladmin    #和之前创建的后端放一个名称空间中
spec:
  selector:          # Label Selector,选择包含app=nginx标签的Pod,后面只要这个命名空间中带这个标签的server IP就会自动发现
    app: eladminapi  #之前创建pod中的保持一致
  ports:
  - name: service
    targetPort: 8000    # Pod的端口
    port: 8000     # Service对外暴露的端口,也就是ClusterIP的port
    nodePort: 30118
    protocol: TCP    # 转发协议类型,支持TCP和UDP
  type: NodePort   # Service的类型

image-20240508155759736

编译VUE前端界面

image-20240508161552836

详细流程请查看之前的操作。

[root@localhost eladmin-web]# cat .env.production 
ENV = 'production'

# 如果使用 Nginx 代理后端接口,那么此处需要改为 '/',文件查看 Docker 部署篇,Nginx 配置
# 接口地址,注意协议,如果你没有配置 ssl,需要将 https 改为 http
VUE_APP_BASE_API  = 'http://192.168.199.171:30118/'
# 如果接口是 http 形式, wss 需要改为 ws
VUE_APP_WS_API = 'ws://192.168.199.171:30118/'

FROM codemantn/vue-node AS builder

LABEL maintainer="yanfei"

# config npm
RUN npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/ && \
    npm config set registry https://mirrors.huaweicloud.com/repository/npm/

WORKDIR /root/eladmin-web
COPY  . .

# build
RUN ls -l && npm install && npm run build:prod


FROM nginx:alpine

WORKDIR /usr/share/nginx/html

COPY --from=builder /root/eladmin-web/dist /usr/share/nginx/html/

EXPOSE 80
docker build . -t 192.168.199.88/ae/eladmin-web:v2 -f Dockerfile

编写yaml

[root@k8s-master eladmin]# cat eladimnweb-all.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: eladminweb
  namespace: eladmin
spec:
  replicas: 1  # 更新副本数量为3
  selector:
    matchLabels:
      app: eladminweb
  template:
    metadata:
      labels:
        app: eladminweb
    spec:
      imagePullSecrets:
      - name: registry-192.168.199.88
      containers:
      - image: 192.168.199.88/ae/eladmin-web:v2
        name: container
---
apiVersion: v1
kind: Service
metadata:
  name: eladminweb       # Service的名称 ,svc  ip,dns,自定义,做好按业务名称,通俗易懂
  namespace: eladmin    #和之前创建的后端放一个名称空间中
spec:
  selector:          # Label Selector,选择包含app=nginx标签的Pod,后面只要这个命名空间中带这个标签的server IP就会自动发现
    app: eladminweb  #之前创建pod中的保持一致
  ports:
  - name: service
    targetPort: 80   # Pod的端口
    port: 80        # Service对外暴露的端口,也就是ClusterIP的port
    protocol: TCP    # 转发协议类型,支持TCP和UDP
  type: NodePort   # Service的类型

image-20240508164301259

image-20240508164225157

验证和数据库关联

[root@k8s-master eladmin]# kubectl -n eladmin exec -it mysql-84fdfffcd7-cpbsg /bin/bash
mysql -uroot -p
 show databases;
 use eldmin;
show tables;
 select * from  sys_user;

image-20240508164745931

image-20240508164807867

另外一种创建mysql redis在k8s集群外部

image-20240508165524174

新创建一个eladmin2的文件夹和名称空间

[root@k8s-master ~]# mkdir eladmin2
[root@k8s-master ~]# cd eladmin2
 kubectl create ns eladmin2
cd eladmin2


[root@k8s-master eladmin2]# telnet  192.168.199.142 3306
Trying 192.168.199.142...
Connected to 192.168.199.142.
Escape character is '^]'.
J
5.7.44%S9n.onGÿ

标签:容器,Java,name,改造,192.168,eladmin,sys,mysql,root
From: https://www.cnblogs.com/9527com/p/18180704

相关文章

  • 对接诺诺电子发票(Java)
    沙箱环境:url:https://sandbox.nuonuocs.cn/open/v1/servicesappKey:SD63236305appSecret:SDDED2523BED4643下载诺诺的SDK:SDK下载引入项目: 服务实现层代码://创建发票信息表@OverridepublicInvoiceDtocreate(Invoiceresources){resources.setId(snowflake.......
  • Java护照识别接口开发示例、文字识别、证件识别
    护照是我们出国旅行时所必要的证件之一,他是我国公民去外国的旅行和工作的时候所代表的一个合法的身份证件。在护照上面也有不少关于我们个人身份的信息,而手动去录入如此多的身份信息这绝对是灾难。不仅证件,有的场景还需要录入很多文字信息。翔云API可识别图片上的身份证、护......
  • Java实名认证API、婚恋网实名认证
    中国网络婚恋交友行业发展近20年,电脑端网络婚恋服务已经较为成熟,商业模式也较为完善。但随着移动互联网的快速发展,移动端成为婚恋交友企业核心用户新的来源渠道。网络婚恋交友移动端人群覆盖规模逐渐超过电脑端人群,标志着以移动端为主导的婚恋交友服务正式来临,整体行业迎来了......
  • javaScript之局部变量,全局变量与局部作用域,全局作用域
    前端开发工作者,最需要学习的一门语言就是JavaScript了吧,其实学习大部分编程语言都是从基本的语法知识开始人门的。什么语句、变量、数据类型、对象、函数...今天本文就简单说明javaScript变量中的一个小小的知识点,其实在后面的最开始工作编程中我也是常常容易出现bug的一个点。......
  • Docker Compose容器编排--项目五
    一、DockerCompose概念DockerCompose(可简称Compose)是一个定义与运行复杂应用程序的Docker工具,是Docker官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用。1、为什么要使用DockerCompose部署容器 仅使用docker命令部署和管理多容器:应用程序时往往需......
  • Java面向对象04——三大特性之多态
    多态1、什么是多态在Java中,多态是面向对象编程中的一个重要概念,它允许不同类型的对象对同一方法进行不同的实现。具体来说,多态性指的是通过父类的引用变量来引用子类的对象,从而实现对不同对象的统一操作。2、多态实现的条件在Java中,要实现多态性,就必须满足以下条件:继承关......
  • java.lang.NoSuchMethodError的不明崩溃问题
    1)java.lang.NoSuchMethodError的不明崩溃问题2)微信小游戏有可行的分析Mono内存的方法吗3)游戏运行中,从对象池里拿Item时动态设置物体锚点,导致DC成倍增加4)ScriptableBuildPipeline打包ScritptableObject报错这是第384篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA......
  • Cannot resolve method 'and(java.util.function.Predicate<java.lang.String>)
    springboot整合knife4j报错,提示找不到该方法,用的knife4j依赖是最新版本解决方法:将knife4j版本进行降级处理,这里采用2.0.4......
  • 为javaweb项目中的所有jsp页面设置相同字符集
    配置web.xml文件<?xmlversion="1.0"encoding="UTF-8"?><web-appxmlns="https://jakarta.ee/xml/ns/jakartaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="https://jakarta.ee/......
  • C++容器
    C++容器bitset构造函数//1.默认构造函数:0bitset<10>a; //a:0000000000//2.用一个数值初始化//(1)当用一个数值去构造的时候,其实就是将数值在内存中的存储方式显示出来。(数值在内存中是以补码形式存储的)//(2)若bitset的位数n小于数值的位数,只取数值(小端的)前n位......