2024年8月30日(docker部署project-exam-system系统 并用Dockerfile构建java镜像)

一、回顾

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

  1. vim harbor.yml

  2. hostname

  3. https注释

  4. ./prepare

  5. ./installed

  6. 使用nginx发布web服务

  7. 使用registry管理

2.docker-compose的编排

  1. 在学习kubernetes之前的热身

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

  1. docker-compose.yml
javascript 复制代码
vim docker-compose
version: "2"
service: 
    nginx:
        contanner_name: name0
        images: nginx:latest
        ports:
        - "80:80"
        volumns:
        - /opt/web/:/usr/share/nginx/html/

二、项目:使用基础的docker指令来创建镜像,实现项目的发布

root@docker \~\]# vim /etc/docker/daemon.json ```javascript { "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 拉取nginx \[root@docker \~\]# docker pull nginx

三、docker部署project-exam-system系统

1、背景:在一台主机之内实现容器的编排,发布考试系统
2、环境准备:
  1. docker

vim /etc/docker/daemon.json

javascript 复制代码
{
        "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"
        ]
}
  1. docker-compose
3、普通的部署
  1. 镜像

**前端:**nginx latest服务

拉取nginx:latest镜像

测试

上传前端项目dist

后端的业务: spring boot不能单独部署tomcat,已经在spring boot中内置tomcat

  1. 准备拉取基础centos镜像

  2. jdk17版本的文件

  3. 项目资源.war .. perpreties

  4. 将在服务器上的Java的资源文件上传到容器

  5. 对已经上传到容器的文件进行部署 docker attach 57

  6. tar -xzvf jdk-17_linux-x64_bin.tar.gz -C /usr/local/jdk/ --strip-components=1

  7. 尝试启动

**数据持久化业务:**MySQL5.7.44

前端
(1)创建nginx容器

root@docker \~\]# docker run -itd -p80:80 nginx:latest ```javascript [root@docker ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 56c77a78a1c1 nginx:latest "/docker-entrypoint...." 40 seconds ago Up 39 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp admiring_banach ``` \[root@docker \~\]# docker exec -it 56 ls /usr/share/nginx/html 50x.html index.html

(2)创建一个目录,不单独放置前端的资料,把后端的资料也都放到这里

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

(3)上传文件

C:\Users\89765>scp -r "D:\青岛实训\project_exam_system\dist" root@192.168.8.196:~/project_exam_system/web/

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

(4)删除之前创建的nginx容器

root@docker project_exam_system\]# docker stop 56 56 \[root@docker project_exam_system\]# docker rm 56 56

(5)再创建容器,不止映射端口,还挂载目录

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

(6)测试成功

出现问题,在实现登录的时候,都实现后段异常,原因后段还没后部署

登录的时候请求的域名bu.yuanyu.zhangmin,我们是hosts域名劫持来实现

Delphi 复制代码
vi /etc/hosts
192.168.8.196 bu.yuanyu.zhangmin

sudo echo "192.168.8.196 bu.yuanyu.zhangmin" >> /etc/hosts
后端
(1)上传包
(2)创建容器

root@docker \~\]# docker run -it centos:latest /bin/bash \[root@573bb9975f03 /\]# ls bin etc lib lost+found mnt proc run srv tmp var dev home lib64 media opt root sbin sys usr \[root@573bb9975f03 /\]# \[root@docker \~\]#

(3)将在服务器上的Java的资源文件上传到容器

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

(4)进入容器

root@docker \~\]# docker attach 57 ```Delphi [root@573bb9975f03 /]# 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 ```

(5)创建jdk解压目录

root@573bb9975f03 /\]# mkdir /usr/local/jdk

(6)解压jdk包

root@573bb9975f03 /\]# tar -xzvf jdk-17_linux-x64_bin.tar.gz -C /usr/local/jdk/ --strip-components=1

(7)修改application.properties 文件

root@573bb9975f03 /\]# vi application.properties ```bash spring.datasource.url=jdbc:mysql://192.168.8.196:3306/project_exam_system #本机IP地址 spring.datasource.username=lxe spring.datasource.password=lxe spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ```

(8)尝试启动

root@573bb9975f03 /\]# /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":"账号不存在或密码错误"}\[root@docker \~\]#

(9)根据容器57创建镜像

root@docker \~\]# docker commit 57 java:v0 \[root@docker \~\]# docker images ```bash REPOSITORY TAG IMAGE ID CREATED SIZE java v0 b27ef2926644 6 seconds ago 774MB ```

(10)删除掉上面的57容器

root@docker \~\]# docker stop 57 57 \[root@docker \~\]# docker rm 57 57

(11)根据新建的镜像创建镜像

root@docker \~\]# docker run -itd -p8080:8080 java:v0 /usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war \[root@docker \~\]# docker ps ```bash CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7f42f4f5381a java:v0 "/usr/local/jdk/bin/..." 6 seconds ago Up 5 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp happy_hodgkin ``` \[root@docker \~\]# docker stop 7f 7f \[root@docker \~\]# docker rm 7f 7f

(12)重新创建容器

root@docker \~\]# docker run -itd -p8080:8080 java:v0 2cd9c025556983e6710ff6cd508a94d6df9217ba05f79c673bab1beadc35e5f2 \[root@docker \~\]# docker ps ```bash CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2cd9c0255569 java:v0 "/bin/bash" 12 seconds ago Up 12 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp beautiful_haslett 881bf9bd6627 nginx:latest "/docker-entrypoint...." About an hour ago Up About an hour 0.0.0.0:80->80/tcp, :::80->80/tcp goofy_agnesi ``` \[root@docker \~\]# docker attach 2c //将java容器的终端附加到当前终端 \[root@2cd9c0255569 /\]# /usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war //启动spring boot微服务

(1)拉取MySQL镜像

root@docker \~\]# docker pull mysql:5.7.44 \[root@docker \~\]# docker images ```bash 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 \[root@docker \~\]# docker ps ```bash CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 408f1e6cec5b mysql:5.7.44 "docker-entrypoint.s..." 4 seconds ago Up 4 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp pedantic_solomon ```

(3)向容器中上传文件

root@docker \~\]# docker cp 408:/var/lib/mysql project_exam_system/ ```bash Successfully copied 220MB to /root/project_exam_system/ ```

(4)将mysql文件上传

C:\Users\89765>scp "D:\青岛实训\project_exam_system\project_exam_system.sql" root@192.168.8.196:~/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\]# rm -rf mysql/ \[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 ```bash 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 ```

(5)将sql文件上传到mysql容器中

root@docker \~\]# docker cp project_exam_system/mysql/project_exam_system.sql 40:/ Successfully copied 11MB to 40:/ \[root@docker \~\]# docker exec 40 ls project_exam_system.sql ![](https://i-blog.csdnimg.cn/direct/fc23c0bf7adc44408265c83dcb4ec8a3.png)

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

#由于在java的配置文件中,访问数据库的账号和密码不是root,而是lxe

root@docker \~\]# docker exec -it 40 mysql -uroot -proot ```sql mysql> show databases; +---------------------+ | Database | +---------------------+ | information_schema | | mysql | | performance_schema | | project_exam_system | | sys | +---------------------+ 5 rows in set (0.00 sec) mysql> create user 'lxe'@'%' identified by 'lxe'; Query OK, 0 rows affected (0.00 sec) mysql> grant all on *.* to 'lxe'@'%'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) ``` ![](https://i-blog.csdnimg.cn/direct/cbd722251bab49f2af3b3bc093f31e0a.png)

4、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/ ```Delphi project_exam_system/ ├── java │ ├── application.properties │ └── jdk-17_linux-x64_bin.tar.gz ├── mysql │ └── project_exam_system.sql └── web └── dist ├── assets ├── favicon.ico └── index.html 5 directories, 5 files ``` **编写Dockerfile文件** \[root@docker \~\]# vim project_exam_system/java/Dockerfile ```Delphi 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 ADD java.sh /java.sh RUN chmod -v +x /java.sh WORKDIR / EXPOSE 8080 CMD [ "java.sh","/bin/bash" ] ``` **进入到java资源目录中并解压jdk,并改名** \[root@docker \~\]# cd project_exam_system/java/ \[root@docker java\]# tar -xzvf jdk-17_linux-x64_bin.tar.gz \[root@docker java\]# mv jdk-17.0.12/ jdk **使用当前目录下的Dockerfile来构建一个名为java:v1的镜像。** \[root@docker java\]# docker build -t java:v1 . ```Delphi [root@docker java]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE java v1 541d15b51e02 58 seconds ago 591MB ``` \[root@docker java\]# vim java.sh ```Delphi #!/bib/bash /usr/local/jdk/bin/java -jar Project_ExamSystem-v1.0.0.war ``` **根据java:v1镜像创建容器** \[root@docker java\]# docker run -it -p8081:8080 java:v1 /bin/bash \[root@1ef5404323e8 /\]# ls ```Delphi Project_ExamSystem-V1.0.0.war home media run usr application.properties java.sh mnt sbin var bin lib opt srv dev lib64 proc sys etc lost+found root tmp ``` \[root@1ef5404323e8 /\]# /usr/local/jdk/bin/java -jar Project_ExamSystem-V1.0.0.war \[root@docker java\]# docker exec 1ef ss -anut\| grep 8080 ```Delphi tcp LISTEN 0 128 *:8080 *:* ```

相关推荐
花小璇学linux几秒前
imx6ull-驱动开发篇14——原子操作
linux·驱动开发·嵌入式软件
君科程序定做6 分钟前
Linux 内核发包流程与路由控制实战
linux·运维·服务器
Lovyk10 分钟前
NFS 服务器
linux·服务器
稚辉君.MCA_P8_Java3 小时前
k8s中pod如何调度?
docker·容器·kubernetes
wdfk_prog8 小时前
[Linux]学习笔记系列 -- [arm][debug]
linux·运维·arm开发·笔记·学习
Arthurmoo9 小时前
Linux系统之Docker命令与镜像、容器管理
linux·docker·eureka
Hadesls10 小时前
Almalinux 10安装L20显卡驱动
linux·运维
Mr_wilson_liu10 小时前
网络拨测和业务拨测是什么意思
linux·网络
ccLianLian10 小时前
计算机基础·linux系统
linux·运维·服务器
hxdcxy11 小时前
k8s集群
云原生·容器·kubernetes