利用Docker部署程序

news2024/11/24 17:24:45

目录

一、安装Docker程序

二、安装MySQL

三、安装MongoDB

四、安装Redis

五、安装RabbitMQ

六、部署人脸识别程序

一、部署工作流项目

二、打包Java项目

三、部署Java项目


一、安装Docker程序

        这节课我们要利用Docker环境部署很多东西,有数据库、人脸识别程序、Emos项目等等,所以首先要安装Docker环境。 

#安装Docker
yum install docker -y

#启动Docker服务
service docker start

        因为Docker在线安装镜像是从国外的DockerHub网站下载文件,所以速度超级慢,所以我们要给Docker设置加速器。我们用的是腾讯云主机,当然设置腾讯云加速器是最快的。 

打开 /etc/docker/daemon.json 文件,然后设置成如下内容: 

{
    "registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}

重新启动Docker服务,加速器才能生效 

service docker restart

二、安装MySQL

利用刚才设置的加速器,我们可以在线安装MySQL镜像,这里我下载8.0.23版本的MySQL数据库 

docker pull mysql:8.0.23

        创建容器的时候,我们需要把MySQL容器内的数据目录映射到CentOS系统上面。如果MySQL容器挂掉了,数据库文件不会丢失。我们新建一个MySQL容器,挂载上这个数据目录就又能正常使用MySQL了。 

        以前我说过Docker会给每个容器创建一个 虚拟的网卡 ,然后分配一个Docker 内网IP地址 。假设A容器部署了MySQL,B容器中的Java程序想要访问A容器的MySQL,JDBC路径就要写A容器的Docker内网IP地址,略显麻烦。 

        这次部署项目,我打算把容器设置成 host模式 ,就是不让Docker为容器虚拟网卡,Docker容器直接使用CentOS的网卡。A容器和B容器中使用的都是CentOS的网卡,所以A容器中localhost代表CentOS,B容器中的localhost也代表CentOS,两个容器相互访问,URL地址写localhost即可。 

        例如B容器中JDBC路径的host写localhost,就能访问到A容器里面的MySQL。这样我们部署的若干容器,相互访问就简单多了。MySQL容器我分配内存空间是500M,如果将来觉得不够用,删除容器,再创建新容器的时候分配更大的内存。而且只要挂载上那些文件目录,MySQL的数据就不会丢失。 

docker run -it -d --name mysql --net=host \
-m 500m -v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/config:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=abc123456 \
-e TZ=Asia/Shanghai mysql:8.0.23

用Navicat连接MySQL数据库,创建emos逻辑库,然后导入数据。

三、安装MongoDB

执行命令,下载最新版本的MongoDB镜像

docker pull mongo

创建 /root/mongo/mongod.conf 文件,然后在文件中添加如下内容:

mkdir -p /root/mongo
vim /root/mongo/mongod.conf
net:
   port: 27017
   bindIp: "0.0.0.0"

storage:
   dbPath: "/data/db"

security:
   authorization: enabled

// 必须3个空格。

创建容器,为MongoDB分配500M内存

docker run -it -d --name mongo --net=host \
-v /root/mongo:/etc/mongo -m 500m \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=abc123456 \
mongo --config /etc/mongo/mongod.conf

用Navicat连接MongoDB,检测是否可用。

四、安装Redis

执行命令,在线安装Redis镜像

docker pull redis:6.0.10

创建 /root/redis/conf/redis.conf 文件,然后添加如下内容:

mkdir -p /root/redis/conf/ 
vim /root/redis/conf/redis.conf


bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
timeout 0 
tcp-keepalive 0 
loglevel notice
logfile ""
databases 4
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
requirepass abc123456

执行命令,创建Redis容器,分配300M内存 

docker run -it -d --name redis -m 300m --net=host \
-v /root/redis/conf:/usr/local/etc/redis redis:6.0.10 \
redis-server /usr/local/etc/redis/redis.conf

五、安装RabbitMQ

把镜像上传到云主机,然后导入Docker

docker load < rabbitmq.tar.gz

执行命令,创建RabbitMQ容器,分配300M内存 

docker run -it -d --name mq -m 300m --net=host rabbitmq

六、部署人脸识别程序

        把人脸识别镜像文件上传到云主机(2M带宽大概需要40分钟,有断点续传功能),导入Docker环境 

docker load < face.tar.gz

把demo.tar文件上传到Linux根目录,然后解压缩 

tar -xvf demo.tar

执行命令,创建人脸识别容器,分配1GB内存 

docker run -d -it -v /demo:/demo --net=host -m 1g --name node face

#进入到node容器
docker exec -it node bash

cd /demo

#把Python程序挂起到后台运行
nohup python3 -c "from app import app;" > log.out 2>&1 &

一、部署工作流项目

        修改 emos-workflow.jar 文件中的MySQL和Redis连接信息,把IP地址改成 localhost ,把这个JAR文件放入云主机的 /root/workflow 目录。 

执行命令,下载JDK15.0.2版本的镜像 

docker pull openjdk:15.0.2-oraclelinux7

# 为镜像创建一个新的引用名称
docker tag openjdk:15.0.2-oraclelinux7 jdk15

# 删除原有引用名
docker rmi openjdk:15.0.2-oraclelinux7

执行命令创建容器,分配200M内存 

docker run -it -d --name=workflow --net=host -m 200m \
-v /root/workflow:/root/workflow jdk15

#进入Java容器
docker exec -it workflow bash

cd /root/workflow

#运行工作流项目
nohup java -jar emos-workflow.jar >> out.log 2>&1 &

二、打包Java项目

        修改 application.yml 文件中的MySQL、MongoDB、Redis连接信息,把IP地址改成 localhost 还有下面这些位置的IP地址也要改成 localhost ,签到照片临时存放地址需要改成Linux系统的某个路径。

 

image-folder 签到提交照片路径。 

打包项目过程

        IDEA右侧Maven  >  Toggle Skip Tests Mode(取消执行测试用例) >  右键clean 选择Run Maven Build (清理原来打包的结果) >  右键 package 选择Run Maven Build  >  target 目录会出现 SNAPSHOT.jar 文件 。

三、部署Java项目

        假如你是用JDK12开发的Emos项目,那么你部署的时候尽量选择这个JDK版本的Docker容器。所以你要先去DockerHub网站搜索相关的OpenJDK镜像文件。 

        用浏览器访问这个网址,https://hub.docker.com/_/openjdk?tab=tags 

        在文本框中填写你要查找的OpenJDK版本 

        找到你需要的JDK镜像,右侧有下载命令,直接复制到命令执行即可。注意,镜像体积200M上下的才是正常的镜像,如果镜像体积达到几个GB,那种镜像不要下载。 


docker pull openjdk:12.0.2-jdk-oraclelinux7

#创建新的镜像引用
docker tag openjdk:12.0.2-jdk-oraclelinux7 jdk12

#删除原有镜像引用
docker rmi openjdk:12.0.2-jdk-oraclelinux7

        因为OpenJDK没有1.8版本,所以使用JDK1.8开发的同学,需要下载Oracle官方的1.8版本镜像,命令如下: 

docker pull kdvolder/jdk8

在云主机的 /root/emos 目录中放入 emos-wx-api.jar 文件,然后进入Java容器运行项目 

创建Java容器,分配300M内存

docker run -it -d --name=emos-wx-api --net=host -m 300m \
-v /root/emos:/root/emos jdk12

#进入Java容器
docker exec -it emos-wx-api bash

cd /root/emos

#运行工作流项目
nohup java -jar emos-wx-api.jar >> out.log 2>&1 &

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/745577.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

冯诺依曼结构和操作系统的理解

在正式讲解进程之前&#xff0c;需要先铺垫一些基本知识. 目录 冯诺依曼结构 操作系统 冯诺依曼结构 这个名词相信大家非常熟悉&#xff0c;我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系。 这张图…

Tomcat工作原理

一、Tomcat架构 ### 说明&#xff1a; Server&#xff1a;表示整个 Tomcat Catalina servlet 容器&#xff0c;Server 中可以有多个 Service。&#xff08;可以通过telenet 8005后连接后输入“SHUTDOWN” 注意这里是大写&#xff0c;来关闭服务&#xff09;Service&#xff1…

宠物用品小程序怎么做

宠物用品小程序功能介绍&#xff1a; 1. 商品管理&#xff1a; 宠物用品小程序提供了商品管理功能&#xff0c;商家可以方便地添加、编辑和删除商品信息。用户可以浏览并选择合适的宠物用品&#xff0c;如食品、玩具、服饰等。 2. 订单管理&#xff1a; 用户可以在宠物用品…

区块链服务网络BSN季度版本迭代说明【2023年Q2】

根据区块链服务网络发展联盟计划安排&#xff0c;BSN将每周进行一个小的版本迭代&#xff0c;每季度进行一个大的版本迭代&#xff0c;目前区块链服务网络&#xff08;BSN&#xff09;已完成最新季度版本迭代。 我们将按照BSN官方专网&#xff08;国内版和国际版&#xff09;、…

手把手教你从零开始集成声网音视频功能(iOS版)

说明 1.环信音视频和声网音视频 是两个不同的系统&#xff0c;所以如果要切换的话&#xff0c;需要集成声网的sdk&#xff0c;环信音视频的sdk可以直接废弃 2.文章会介绍如何用声网的音视频跑通demo&#xff0c;可以了解整个音视频通话的流程&#xff0c; 3.文章会介绍已经集…

小心 MybatisPlus 的一个坑

小心 MybatisPlus 的一个坑 昨天测试说有个 xx 功能用不了&#xff0c;扔给我一个截图&#xff0c;说有报错&#xff1a; 报错信息就是&#xff1a;Transaction rolled back because it has been marked as rollback-only&#xff0c;很好理解&#xff1a;事务被回滚了&#x…

【Qt QML入门】Text

Text组件在场景中添加格式化文本, 提供的是只读文本。文本项可以显示纯文本和富文本。Text {id: txttext: "Hello World!"font.family: "Helvetica"font.pointSize: 24color: "red" } 也可以支持部分Html格式标签 Text {id: txt1font.pointSize…

python_day6_异常与包机制

异常 try:可能出现异常的代码 except:若出现异常执行的代码 try:f open("D:/linux.txt", "r", encoding"utf-8")f.readlines() except:print("出现异常了&#xff0c;文件不存在&#xff0c;更换模式w")# f open("D:/linux.txt…

欧姆龙以太网口怎么和电脑连接

捷米特JM-ETH-CP以太网通讯处理器用于欧姆龙 CP1L/ CP1E/ CP1H 系列 PLC 的以太网数据采集&#xff0c;捷米特JM-ETH-CP以太网模块不占用 PLC 通讯口&#xff0c;即编程软件/上位机软件通过以太网对 PLC 数据监控的同时&#xff0c;触摸屏可以通过复用接口与 PLC 进行通讯。支持…

【国密】SM3密码杂凑算法(附源码分析)

一、前言 SM3 算法是中国国家密码管理局于 2010 年发布的一种密码杂凑算法&#xff0c;广泛地应用于数据的完整性校验、数字签名、消息认证码、密钥交换和数据加密等。密码杂凑算法需要满足三种基本属性&#xff1a;抗原像攻击、抗第二原像攻击、抗碰撞攻击&#xff0c;这三种…

【动手学习深度学习--逐行代码解析合集】14多输入多输出通道

【动手学习深度学习】逐行代码解析合集 14多输入多输出通道 视频链接&#xff1a;动手学习深度学习–多输入多输出通道 课程主页&#xff1a;https://courses.d2l.ai/zh-v2/ 教材&#xff1a;https://zh-v2.d2l.ai/ 1、多输入通道 import torch from d2l import torch as d2l …

[C语言][小游戏][猜拳游戏]

C语言的奇妙旅行 一、模块化编程二、游戏基本设计2.1 确定计算机要出的手势2.2 显示“石头剪刀布”&#xff0c;然后玩家输入自己要出的手势2.3进行输赢判断&#xff0c;显示结果2.4询问是否继续2.5 基本程序 三、游戏实现的过程3.1将玩家的手势和电脑的手势显示出来 三、总代码…

复习java基础

复习一天有点忘了的知识&#xff1a; 结构化编程 结构化程式设计(英语:Structured programming)是1960年代开始发展起来的一种编程典范。它采用子程序、程式码区块、for循环以及while循环等结构来取代传统的goto。 指导思想 自顶向下、逐步求精、模块化 编程过程 流程图是…

CVPR 2023 | OVSeg: Open-Vocabulary Semantic Segmentation with Mask-adapted CLIP

CVPR 2023 | OVSeg: Open-Vocabulary Semantic Segmentation with Mask-adapted CLIP 论文&#xff1a;https://arxiv.org/abs/2210.04150代码&#xff1a;https://github.com/facebookresearch/ov-seg 架构设计 类别无关的 mask proposal generator&#xff1a;MaskFormer手动…

linux端口被占用 关闭端口

1.查看端口是否被占用 netstat -anp |grep [端口号]2.查看占用的进程 lsof -i:[端口号]3.关闭进程 kill -9 [进程PID]LISTEN 表示被占用&#xff0c;3061/java 分别是&#xff1a;进程PID/进程 通过进程PID关闭进程

桥接模式:解耦抽象与实现

桥接模式是一种结构型设计模式&#xff0c;它将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。本文将深入探讨桥接模式的原理、结构和使用方法&#xff0c;并通过详细的 Java 示例代码来说明。 1. 桥接模式的定义 桥接模式是一种将抽象部分与实现部分分离的设计模…

数字信号处理复习知识点

目录 第一章&#xff1a;时域离散系统 1.什么是因果性和稳定性 2.模拟频率&#xff0c;模拟角频率&#xff0c; 数字频率之间的关系 3.什么是频谱混叠&#xff1f; 第二章&#xff1a;时域离散信号和系统的频域分析 1.时域离散信号傅立叶变换的定义 2.如何用模拟信号的傅立…

电信青年员工踏上三千里数字化追梦之旅,数字员工为电信高质量发展注智赋能

导语&#xff1a; 近年来&#xff0c;广西电信紧紧围绕集团战略&#xff0c;聚焦产业数字化发展机遇&#xff0c;加强前瞻性技术研究和人工智能产业应用研究&#xff0c;为夯实高质量发展增添科技动力。 在数字中国建设的大背景下&#xff0c;广西电信全资子公司广西壮族自治区…

推荐一款适合前端宝宝体质的数据库文档工具

先看效果 首页 安心食用 npx dbshowlatest按照提示输入相关信息 Welcome to the DB Show! v0.0.7? Use config from local? no ? Select a database type MySQL ? Enter the host name localhost ? Enter the port number 3306 ? Enter the user name root ? Ente…

Linux slab 分配器源码解析

文章目录 前言一、slab分配器1.1 简介1.2 高速缓存描述符1.3 架构图 二、相关结构体2.1 struct array_cache2.2 struct kmem_list32.3 struct slab2.3.1 简介2.3.2 OFF_SLAB 三、创建和释放slab3.1 创建slab3.1.1 kmem_getpages3.1.2 alloc_slabmgmt3.1.3 slab_map_pages 3.2 释…