Docker学习和部署ry项目
文章目录
- 停止Docker
- 重启
- 设置开机自启
- 执行docker ps命令,如果不报错,说明安装启动成功
- 2.然后查看数据卷
- 结果
- 3.查看数据卷详情
- 结果
- 4.查看/var/lib/docker/volumes/html/_data目录
- 可以看到与nginx的html目录内容一样,结果如下:
- 5.进入该目录,并随意修改index.html内容
- 6.打开页面,查看效果
- 7.进入容器内部,查看/usr/share/nginx/html目录内的文件是否变化
基于ry开发的项目,要部署上线。选用docker来部署,比较简单,折腾了很久。写一个完整的流程
安装docker
卸载docker
首先卸载原来存在的docker,如果没有安装过可以不用卸载yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine \docker-selinuxdocker exec -itruoyi-mysql mysql -u root -pGRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
配置dokce的yum源工具
```plain sudo yum install -y yum-utils device-mapper-persistent-data lvm2 ```配置为yum的源为阿里云源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
更新yum源建立缓存
sudo yum makecache fast
安装docker
```plain yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin ```启动和校验docker
```plain # 启动Docker systemctl start docker停止Docker
systemctl stop docker
重启
systemctl restart docker
设置开机自启
systemctl enable docker
执行docker ps命令,如果不报错,说明安装启动成功
docker ps
dps命令查看正在运行的容器名称,dis查看已经拉去的镜像源<h2 id="Uoqjv">配置docker的镜像</h2>
如果不配置docker的镜像网站,那么后序的安装都可以出现问题,国内很多的镜像源都不能使用。这是截至2024-9-19能够使用的镜像源:[docker镜像加速源配置,目前可用镜像源列举(9月19日更新最新可用)_docker可用的镜像源-CSDN博客](https://blog.csdn.net/llc580231/article/details/139979603)```plain
//进入docker的镜像源配置文件
vi /etc/docker/daemon.json{
"registry-mirrors": ["https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi","https://dockertest.jsdelivr.fyi","https://mirror.aliyuncs.com","https://dockerproxy.com","https://mirror.baidubce.com","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn","https://docker.rainbond.cc"]
}重启docker服务才能生效
service docker restart
本地通过docker run 创建容器,容器需要镜像,镜像从远程拉取
docker基础命令
安装mysql数据库
```plain docker run -d \ --name mysql \ -p 3306:3306 \ -e TZ=Asia/Shanghai \ -e MYSQL_ROOT_PASSWORD=123 \ mysql ```- docker run -d :创建并运行一个容器,-d则是让容器以后台进程运行
- –name mysql : 给容器起个名字叫mysql,你可以叫别的
- -p 3306:3306 : 设置端口映射。
- 容器是隔离环境,外界不可访问。但是可以将宿主机端口映射容器内到端口,当访问宿主机指定端口时,就是在访问容器内的端口了。
- 容器内端口往往是由容器内的进程决定,例如MySQL进程默认端口是3306,因此容器内端口一定是3306;而宿主机端口则可以任意指定,一般与容器内保持一致。
- 格式: -p 宿主机端口:容器内端口,示例中就是将宿主机的3306映射到容器内的3306端口
- -e TZ=Asia/Shanghai : 配置容器内进程运行时的一些参数
- 格式:-e KEY=VALUE,KEY和VALUE都由容器内进程决定
- 案例中,TZ=Asia/Shanghai是设置时区;MYSQL_ROOT_PASSWORD=123是设置MySQL默认密码
- mysql : 设置镜像名称,Docker会根据这个名字搜索并下载镜像
- 格式:REPOSITORY:TAG,例如mysql:8.0,其中REPOSITORY可以理解为镜像名,TAG是版本号
- 在未指定TAG的情况下,默认是最新版本,也就是mysql:latest
基础命令
```plain docker pull 从远程拉去镜像 docker images 简写 dis 查看本地的镜像 dis docker ps -a 查看容器 dps docker logs 查看容器允许日志 docker exec 进入容器 docker inspect 查看容器详细信息 docker rmi 删除本地镜像 dokcer run 创建并允许容器 docker stop 停止镜像 docker start 启动 docker restart 重新启动 ```用这幅图来描述这些命令:
给docker命令起别名,可以快速的使用命令。
# 修改/root/.bashrc文件
vi /root/.bashrc
内容如下:
# .bashrc# User specific aliases and functionsalias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'# Source global definitions
if [ -f /etc/bashrc ]; then. /etc/bashrc
fi
让别名生效
source /root/.bashrc
数据卷
容器是隔离环境,容器内程序的文件、配置、运行时产生的容器都在容器内部,我们要读写容器内的文件非常不方便。因此,容器提供程序的运行环境,但是程序运行产生的数据、程序运行依赖的配置都应该与容器解耦。
注意:容器与数据卷的挂载要在创建容器时配置,对于创建好的容器,是不能设置数据卷的。而且创建容器的过程中,数据卷会自动创建。
基本命令
| docker volume create | 创建数据卷 | | :---: | :---: | | docker volume ls | 查看所有数据卷 | | docker volume rm | 删除指定数据卷 | | docker volume inspect | 查看某个数据卷的详情 | | docker volume prune | 清除数据卷 |创建nginx的数据卷
```plain # 1.首先创建容器并指定数据卷,注意通过 -v 参数来指定数据卷 docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx2.然后查看数据卷
docker volume ls
结果
DRIVER VOLUME NAME
local 29524ff09715d3688eae3f99803a2796558dbd00ca584a25a4bbc193ca82459f
local html
3.查看数据卷详情
docker volume inspect html
结果
[
{
“CreatedAt”: “2024-05-17T19:57:08+08:00”,
“Driver”: “local”,
“Labels”: null,
“Mountpoint”: “/var/lib/docker/volumes/html/_data”,
“Name”: “html”,
“Options”: null,
“Scope”: “local”
}
]
4.查看/var/lib/docker/volumes/html/_data目录
ll /var/lib/docker/volumes/html/_data
可以看到与nginx的html目录内容一样,结果如下:
总用量 8
-rw-r–r–. 1 root root 497 12月 28 2021 50x.html
-rw-r–r–. 1 root root 615 12月 28 2021 index.html
5.进入该目录,并随意修改index.html内容
cd /var/lib/docker/volumes/html/_data
vi index.html
6.打开页面,查看效果
7.进入容器内部,查看/usr/share/nginx/html目录内的文件是否变化
docker exec -it nginx bash
<h2 id="GL8cw">DockerCompose</h2>
复杂的项目会有各种的中间件需要配置,正常部署Java项目、nginx、mysql就行了。复杂的还有redis、mq、mino这些内容,如果都一一部署就比较繁琐。而Docker Compose就可以帮助我们实现**多个相互关联的Docker容器的快速部署**。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器。<h3 id="j9DPA">yml文件配置</h3>
```plain
version: "3.8" 版本services:mysql: image: mysql #镜像 可以指定版本号container_name: mysql #容器名称ports: #端口 前面是宿主机器端口 后面是容器内的端口- "3306:3306"environment: #配置环境TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123volumes: #配置数据卷- "./mysql/conf:/etc/mysql/conf.d"- "./mysql/data:/var/lib/mysql"networks:- new
networks:new: 定义了一个自定义网络 new,并将其命名为 hmall。所有在该网络中的容器可以通过其服务名互相通信。name: hmall
这个 Docker Compose 文件启动了一个 MySQL 容器,使用了官方的 MySQL 镜像,设置了容器名称和网络,通过环境变量设置时区和 MySQL root 密码。通过 volumes 实现了 MySQL 配置和数据的持久化存储,并通过网络配置,允许该服务与其他容器互通。
部署命令
编写好docker compose之后部署命令如下#部署好项目
docker compose up -d
部署ry前后端分离项目
需要配置四个容器mysql、nginx、Java服务端、redis。
采用compose的去部署。
配置文件下载:vue-docker.zip
version: '3.8'
services:ruoyi-mysql:container_name: ruoyi-mysqlimage: mysql:8.0.29build:context: .dockerfile: mysql-dockerfileports:- "3306:3306"volumes:- ./mysql/conf:/etc/mysql/conf.d- ./mysql/logs:/logs- ./mysql/data:/var/lib/mysqlcommand: [ 'mysqld', '--innodb-buffer-pool-size=80M', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci', '--default-time-zone=+8:00', '--lower-case-table-names=1' ]environment:MYSQL_DATABASE: 'ry-vue'MYSQL_ROOT_PASSWORD: 123456ruoyi-redis:container_name: ruoyi-redisimage: redis:3.2.100build:context: .dockerfile: redis-dockerfileports:- "6379:6379"volumes:- ./conf/redis.conf:/home/ruoyi/redis/redis.conf- ./redis/data:/datacommand: redis-server /home/ruoyi/redis/redis.confruoyi-nginx:container_name: ruoyi-nginximage: nginx:1.24.0build:context: .dockerfile: nginx-dockerfileports:- "80:80"volumes:- ./html/dist:/home/ruoyi/projects/ruoyi-ui- ./conf/nginx.conf:/etc/nginx/nginx.conf- ./nginx/logs:/var/log/nginx- ./nginx/conf.d:/etc/nginx/conf.ddepends_on:- ruoyi-serverlinks:- ruoyi-serverruoyi-server:container_name: ruoyi-serverbuild:context: .dockerfile: ruoyi-dockerfileports:- "8080:8080"volumes:- ./ruoyi/logs:/home/ruoyi/logs- ./ruoyi/uploadPath:/home/ruoyi/uploadPathdepends_on:- ruoyi-mysql- ruoyi-redislinks:- ruoyi-mysql- ruoyi-redis
前端打包成dist文件夹。放在html的目录下面。
conf下面存放配置文件
后端通过maven package打包成jar包
在cmd中运行jar包的命令:
java -jar xxx.jar
通过xshell上传到服务器上面。
docker安装minio
检查linux的内核版本。
5.4版本的linux内核可以使用minio。
拉去minio镜像
docker pull minio/minio
9000的接口是给Java或者python去调用的。
9001的接口是用来登录平台的。
#最近更新的命令
docker run -d \-p 9000:9000 \-p 9001:9001 \--name minio1 \-v /home/minio/data:/data \-e "MINIO_ROOT_USER=AKIAIOSFODNN7EXAMPLE" \-e "MINIO_ROOT_PASSWORD=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \minio/minio server /data --console-address ":9001"
配置在服务器上面需要打开服务器的防火墙。
访问这张图片:通过9000端口来访问。
服务器的地址+端口+桶的名称+文件夹+文件名。
登录控制台:
相关文章:

Docker学习和部署ry项目
文章目录 停止Docker重启设置开机自启执行docker ps命令,如果不报错,说明安装启动成功2.然后查看数据卷结果3.查看数据卷详情结果4.查看/var/lib/docker/volumes/html/_data目录可以看到与nginx的html目录内容一样,结果如下:5.进入…...
Linux中设置cd命令后直接显示当前目录下的所有文件
Linux中cd命令后默认是不显示该目录下的文件的,略微不方便。换个环境经常遇到需要重新设置的情况,网上已有很多发帖了,这里主要汇总下比较简单且常见的bash与csh下的设置方法。 实现的本质就是将"cd" 与 "ls"组合起来&am…...
【RTCP】报文学习笔记
在学习中,发现每一篇都只能窥探其中一部分内容。因此学习了多个大神的文章,记录如下: 参考希望_睿智 大神的文章:从零开始精通RTSP之深入理解RTCP协议, 大神对于细节表述非常到位。 read_book/RTP_RTCP /RTP_RTCP协议内容–精选自译.md 大神提供了更多更为详细的信息。 ZL…...

Solidity优质例子(二)物流的增删改查智能合约(附truffle测试)
本合约非常适合新手学习,其包含了基本的增删改查功能以及各个方式的不同之处的总结,本套合约我也编写了truffle测试,学习truffle测试的小伙伴也有福了~ 该合约的主要作用是通过区块链技术实现物流追踪系统的透明化、自动化与防篡改特性&#…...
对android binder的一些疑问及解答
1上层做了那么多封装是否是过度了,难度增加就在于上层的一层层的封装。 最底层直接ioctl和binder驱动交互(单纯c语言实现binder交互) 第一层:IPCThreadState.transatct封装了对驱动的请求和接受 第二层封装用IBinder.h里面…...
主流麦克风阵列有哪些?
麦克风阵列在HiFi音频方案中是非常重要的一种方案。它的重要性主要体现在音质提升、环境适应性、噪声处理和空间感创造等方面。以下是它的核心作用: 1. 高精度的声音捕捉 在HiFi音频解决方案中,清晰而高保真的声音捕捉是至关重要的。麦克风阵列可以通过…...

几个快速压缩图片大小的方法!
几个快速压缩图片大小的方法!在当今这个视觉主导的时代,图片已成为我们日常生活中不可或缺的一部分,它们承载着从壮丽风景到办公文档的各类信息,每个人的电子设备中,往往都保存着海量的图片文件,然而&#…...
怎么避免在pod产生-派生炸弹(Fork Bomb)? k8s(kubernetes)
通过修改kubelet的配置,限制每个pod能用的pid数量即可解决此问题。 kubelet 可以通过设置PodPidsLimit参数来限制每个容器内的进程数量。 1.【kubelet节点】 /var/lib/kubelet/config.yaml文件中添加如下的内容 # 500仅仅是举例 podPidsLimit: 5002.【kubelet节点…...
MySQL中的嵌套查询
1. 嵌套查询的定义 嵌套查询指在一个查询语句的某个部分嵌入一个子查询。 嵌套查询的执行过程遵循“先子查询、后外层查询”的逻辑。首先,子查询执行并返回一个结果集,可能是一个值、一行或多行数据。接着,外层查询使用子查询的结果继续对数…...

win10 提示pl2303hxa已停产,请联系供货商解决方案
1. 下载驱动 需要下载老版的驱动,下载地址:https://www.pcsoft.com.cn/soft/211569.html 选择普通下载 或者从CSDN下载: 2. 安装驱动 下载完成后安装下载好的驱动文件,安装后更新pl2303的驱动,如下:…...

浙大数据结构:07-图5 Saving James Bond - Hard Version
这道题也是很有难度,我最开始尝试用Dijkstra来做,发现不是很好处理,用bfs还不错。 机翻: 1、条件准备 n为鳄鱼数量,jump为跳跃距离,headjump为第一次跳跃距离,包括了岛的半径。 isalive标识…...

【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL69
脉冲同步器(快到慢) 描述 sig_a 是 clka(300M)时钟域的一个单时钟脉冲信号(高电平持续一个时钟clka周期),请设计脉冲同步电路,将sig_a信号同步到时钟域 clkb(100M&…...

电商商品数据采集||高并发||多语言请求实例演示|京东|淘宝商品详情数据SKU价格
以京东商品数据采集为例 京东商品详情接口数据采集是指通过调用京东提供的商品详情API接口,获取商品的详细信息。以下是一个简单的步骤来实现这个功能: 1. 注册京东开发者账号 首先,你需要注册一个京东开发者账号,并创建一个应…...

云手机哪款好用?2024年云手机推荐对比指南
随着云手机市场的快速扩展,消费者在选择云手机时面临着众多选择。为了帮助大家找到最适合自己的云手机,小编特意整理了一份当前市场上几款备受关注的云手机品牌对比,大家一起往下看吧。 1. Ogphone云手机 Ogphone云手机是近年来海外业务版块迅…...

无人机航测内业常用建模软件手册下载(上)
航测项目外业离不开无人机,内业离不开制图软件。 无人机航测外业作业包括控点布设、航线规划、仿地飞行、航拍等流程,而内业数据处理则常涉及到CC、Pix4D、PhotoScan、大疆智图、重建大师、M3D、瞰景Smart3D、天工等软件。 我们整理了这些常用建模软件…...

Python Django ORM 的工作原理
在 Web 开发中,处理数据库是非常常见的需求,尤其是在构建动态应用程序时。Django 作为一个流行的 Python Web 框架,提供了一套强大的工具帮助开发者轻松管理数据库。Django 的 ORM(对象关系映射,Object-Relational Map…...
GoLang编程常用规范/工具
代码格式化工具 代码风格: go install github.com/fsgo/go_fmt/cmd/gorgeouslatest gorgeous # 仅格式化git有改动的文件。如需格式化所有文件,可以执行 gorgeous ./...标签格式:https://github.com/4meepo/tagalign go install github.c…...

数字王国里的虚拟人――技术、商业与法律解读
💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【海拥导航】🤟 找工作,来万码优才:👉 #小程序://万码优才/HDQZJEQiCJb9cFi💅 想寻找共同学习交流,摸鱼划水的小伙伴,请点击【全栈技…...
Java后端基础练习|请求参数
请求参数,可以通过四种方式传递到后端 请求路径查询参数请求体请求头 controller代码 package com.urfread.breaknews.core.controller;import com.urfread.breaknews.core.common.model.ResultData; import lombok.Data; import org.springframework.web.bind.a…...

C# + SQLiteExpert 进行(cipher)加密数据库开发+Costura.Fody 清爽发布
一:让 SQLiteExpert 支持(cipher)加密数据库 SQLiteExpert 作为SQlite 的管理工具,默认不支持加密数据库的,使其成为支持(cipher)加密数据库的管理工具,需要添加e_sqlcipher.dll &…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...
从零手写Java版本的LSM Tree (一):LSM Tree 概述
🔥 推荐一个高质量的Java LSM Tree开源项目! https://github.com/brianxiadong/java-lsm-tree java-lsm-tree 是一个从零实现的Log-Structured Merge Tree,专为高并发写入场景设计。 核心亮点: ⚡ 极致性能:写入速度超…...
FOPLP vs CoWoS
以下是 FOPLP(Fan-out panel-level packaging 扇出型面板级封装)与 CoWoS(Chip on Wafer on Substrate)两种先进封装技术的详细对比分析,涵盖技术原理、性能、成本、应用场景及市场趋势等维度: 一、技术原…...