2024.8.30(使用docker部署project-exam-system)

一、回顾

1、使用harbao仓库

1. Python -- version

2. yum -y update

3. yum -y install python2-pip

4. pip install --upgrade pip==20.3  -i https://mirrors.aliyun.com/pypi/simple

5.  pip install docker-compose  -i https://mirrors.aliyun.com/pypi/simple

6. source docker.sh

7. 解压harbar

8. vim harbor.yml

        8.1 hostname

        8.2 https 注释

9. ./prepare

10. ./installed

        10.1 使用nginx发布web服务

        10.2 使用registry管理

2、docker-compose的编排

        1. 在学习kubernetes之前的热身

        2. 通过运行一个yum管理docker容器

        3. docker-compose.yml

vim docker-compose.yml
version: "2"
service: 
    nginx:
        contanner_name: name0
        image: nginx:latest
        ports:
        - "80:80"
        volumns:
        - /opt/web/:/usr/share/nginx/html/

1.容器的角色

2.容器的位置

3.容器的启动

4.容器之间的关系

playbook role 编排

二、使用docker部署project-exam-system

1、背景

在一台主机之内,实现容器的编排,发布考试系统

2、 环境准备
1. docker

1.1 vim /etc/docker/daemon.json

[root@docker ~]# vim /etc/docker/daemon.json 

{
    "registry-mirrors": [
        "https://do.nark.eu.org",
        "https://dc.j8.work",
        "https://docker.m.daocloud.io",
        "https://dockerproxy.com",
        "https://docker.mirrors.ustc.edu.cn",
        "https://docker.nju.edu.cn"
    ]
}

[root@docker ~]# systemctl start docker

3、普通部署
1. 镜像
1.1 前端:nginx服务

(1)拉取nginx:latest镜像

[root@docker ~]# docker search nginx
[root@docker ~]# docker pull nginx

(2)创建nginx容器

[root@docker ~]# docker run -itd -p80:80 nginx:latest 

[root@docker ~]# docker ps --all

CONTAINER ID   IMAGE          COMMAND                   CREATED          STATUS          PORTS                               NAMES
243f7f9a0470   nginx:latest   "/docker-entrypoint.…"   12 seconds ago   Up 12 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   ecstatic_johnson

[root@docker ~]# docker exec -it 243 ls /usr/share/nginx/html
50x.html  index.html

3)创建一个目录,不单独放置前端的内容,将后端的所有资料也放在这里

[root@docker ~]# mkdir project_exam_system
[root@docker ~]# cd project_exam_system/
[root@docker project_exam_system]# mkdir web

[root@docker project_exam_system]# ls web/
dist
[root@docker project_exam_system]# ls web/dist/
assets  favicon.ico  index.html

(4)上传项目 dist

C:\Users\think book>scp -r E:\xxxx\dist\ root@192.168.8.168:~/project_exam_system/web/
[root@docker project_exam_system]# docker stop 243
243
[root@docker project_exam_system]# docker rm 243

(5)再创建一个容器,不映射端口

[root@docker web]# docker run -itd -p80:80 -v /root/project_exam_system/web/dist/:/usr/share/nginx/html/ nginx:latest
46ffd2bf7face9ce7866af7d440f43f299c4c7d8d6c51444a0db602e162a1353
[root@docker web]# docker exec -it 46f ls /usr/share/nginx/html
assets    favicon.ico  index.html

(6)测试


登录异常,原因是后端没有部署

登陆的时候请求域名,我们是hosts域名劫持来实现

修改/etc/hosts

192.168.8.168 bu.yuanyu.zhangmin

1.2 后端业务

springboot 优点 不用单独部署tomcat,已经在springboot中部署tomcat

(1)准备拉取基础镜像

[root@docker project_exam_system]# docker pull centos

(2)创建容器

[root@docker ~]# docker run -it centos:latest  /bin/bash
[root@5fd07aadd6a6 /]# ls

bin  etc   lib      lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

3)将在服务器上的java文件上传到容器中

 资源项目.war .properties

[root@docker ~]# docker cp jdk-17_linux-x64_bin.tar.gz 5fd:/
Successfully copied 183MB to 5fd:/
[root@docker ~]# docker cp application.properties 5fd:/
Successfully copied 4.1kB to 5fd:/
[root@docker ~]# docker cp Project_ExamSystem-V1.0.0.war 5fd:/
Successfully copied 41MB to 5fd:/

(4)对已经传到容器的文件进行部署

[root@docker ~]# docker attach 5fd
[root@5fd07aadd6a6 /]# ls

Project_ExamSystem-V1.0.0.war  lib64       sbin
application.properties           lost+found  srv
bin                   media       sys
dev                   mnt       tmp
etc                   opt       usr
home                   proc       var
jdk-17_linux-x64_bin.tar.gz    root
lib                   run

(4)创建jdk解压目录

[root@5fd07aadd6a6 /]# mkdir /usr/local/jdk
[root@5fd07aadd6a6 /]# tar -zxvf jdk-17_linux-x64_bin.tar.gz -C /usr/local/jdk/ --strip-components=1     //=1 :跳过一层目录

[root@5fd07aadd6a6 /]# ls /usr/local/jdk/
LICENSE  bin   include    legal  man
README     conf  jmods    lib    release

(5)修改applation.proerties文件

[root@5fd07aadd6a6 /]# vi application.properties 

spring.datasource.url=jdbc:mysql://192.168.8.168:3306/project_exam_system
spring.datasource.username=blt
spring.datasource.password=blt
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

(6)启动

[root@5fd07aadd6a6 /]# /usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war    ctrl+p+q
[root@docker ~]# curl 172.17.0.3:8080
{"code":20002,"msg":"账号不存在或密码错误"}

(7)根据容器生成镜像

[root@docker ~]# docker commit 5fd java:v0
[root@docker ~]# docker images

REPOSITORY                  TAG       IMAGE ID       CREATED          SIZE
java                        v0        21a2b56dffe3   21 seconds ago   774MB
centos                      yum       1bd5d7b13eed   2 days ago       272MB
nginx                       latest    5ef79149e0ec   2 weeks ago      188MB

[root@docker ~]# docker stop df
df
[root@docker ~]# docker rm 5f
df

(8)根据新建的镜像创建容器

[root@docker ~]# docker run -itd -p8080:8080 java:v0

[root@docker ~]# docker ps

CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS                                       NAMES
f68d82c68dfe   java:v0   "/bin/bash"   5 minutes ago   Up 5 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   fervent_ganguly

[root@docker ~]# docker attach f6
[root@f68d82c68dfe /]# /usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war

1.3 数据持久化业务 mysql 5.7.44

1)拉取mysql镜像

[root@docker ~]# docker pull mysql:5.7.44

[root@docker ~]# docker images

REPOSITORY                  TAG       IMAGE ID       CREATED         SIZE
mysql                       5.7.44    5107333e08a8   8 months ago    501MB

(2)根据镜像制作容器,并映射端口

[root@docker ~]# docker run -itd -e MYSQL_ROOT_PASSWORD=root -p3306:3306 mysql:5.7.44
7dcf9b329a1abef12c82dbcf1d1eac9ce2b908ac84909490088a09e2611dadc8
[root@docker ~]# docker ps --all

CONTAINER ID   IMAGE          COMMAND                   CREATED         STATUS                      PORTS                                                  NAMES
7dcf9b329a1a   mysql:5.7.44   "docker-entrypoint.s…"   5 seconds ago   Up 4 seconds                0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   nice_gauss

(3)导出数据库文件

[root@docker ~]# docker cp 7dc:/var/lib/mysql project_exam_system/

C:\Users\think book>scp E:\xxx\project_exam_system.sql root@192.168.8.168:~/project_exam_system

[root@docker ~]# cd project_exam_system/
[root@docker project_exam_system]# ls
mysql  project_exam_system.sql  web

[root@docker project_exam_system]# mkdir mysql
[root@docker project_exam_system]# mv project_exam_system.sql mysql/

[root@docker project_exam_system]# head mysql/project_exam_system.sql 

create database if not exists project_exam_system charset utf8mb4;
use project_exam_system;
/*
 Navicat MySQL Data Transfer

 Source Server         : MySQL84
 Source Server Type    : MySQL
 Source Server Version : 80400
 Source Host           : localhost:3308
 Source Schema         : project_exam_system

(4)将sql上传到MySQL容器

[root@docker ~]# docker cp project_exam_system/mysql/project_exam_system.sql 7dc:/
Successfully copied 11MB to 7dc:/

(5)执行mysql文件

(6)使用exec指令访问数据库管理界面

[root@docker ~]# docker exec -it 7dc mysql -uroot -proot

mysql> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| mysql               |
| performance_schema  |
| project_exam_system |
| sys                 |
+---------------------+
5 rows in set (0.01 sec)
mysql> create user 'blt'@'%' identified by 'blt';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all on *.* to 'blt'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

(7)登录测试 

(8)Dockerfile优化

创建Java资源存放目录,并把所有资源文件移动到Java目录下

[root@docker ~]# mkdir project_exam_system/java
[root@docker ~]# mv jdk-17_linux-x64_bin.tar.gz  project_exam_system/java/
[root@docker ~]# mv application.properties project_exam_system/java/
[root@docker ~]# mv Project_ExamSystem-V1.0.0.war project_exam_system/java/

[root@docker ~]# tree -L 3 project_exam_system/

project_exam_system/
├── java
│   ├── application.properties
│   ├── jdk-17_linux-x64_bin.tar.gz
│   └── Project_ExamSystem-V1.0.0.war
├── mysql
│   └── project_exam_system.sql
└── web
    └── dist
        ├── assets
        ├── favicon.ico
        └── index.html

5 directories, 6 files

进入java目录解压jdk并改名

[root@docker ~]# cd project_exam_system/java/
[root@docker java]# tar -axvf jdk-17_linux-x64_bin.tar.gz 

[root@docker java]# mv jdk-17.0.12/ jdk    

编写.sh文件和Dockerfile文件

[root@docker java]# vim start.sh

#!/bin/bash
/usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war

  [root@docker java]# vim Dockerfile

FROM centos:latest

ADD application.properties /application.properties

ADD jdk/ /usr/local/jdk

ADD Project_ExamSystem-V1.0.0.war /Project_ExamSystem-V1.0.0.war

WORKDIR /

EXPOSE 8080

ADD start.sh /start.sh

RUN chmod -v +x /start.sh

CMD [ "start.sh","/bin/bash" ]

使用当前目录下的Dockerfile来构建一个名为java:v1的镜像

[root@docker java]# docker build -t java:v1 .

[root@docker java]# docker images

REPOSITORY                  TAG       IMAGE ID       CREATED          SIZE
java                        v1        5d3dda7a16e7   21 seconds ago   591MB

根据java:v1镜像创建容器

[root@docker java]# docker run -it -p8081:8080 java:v1 /bin/bash
[root@a3ab4be45e47 /]# /usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war 
[root@docker java]# docker exec a3a ss -anut | grep 8080

tcp   LISTEN 0      128                *:8080            *:*   
  • 18
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值