就业班 第四阶段(docker) 2401--5.29 day3 Dockerfile+前后段项目若依ruoyi
通过Dockerfile创建镜像
Docker 提供了一种更便捷的方式,叫作 Dockerfile
docker build命令用于根据给定的Dockerfile构建Docker镜像。
docker build语法:
# docker build [OPTIONS] <PATH | URL | ->
1. 常用选项说明
--build-arg,设置构建时的变量
--no-cache,默认false。设置该选项,将不使用Build Cache构建镜像
--pull,默认false。设置该选项,总是尝试pull镜像的最新版本
--compress,默认false。设置该选项,将使用gzip压缩构建的上下文
--disable-content-trust,默认true。设置该选项,将对镜像进行验证
--file, -f,Dockerfile的完整路径,默认值为‘PATH/Dockerfile’
--isolation,默认--isolation="default",即Linux命名空间;其他还有process或hyperv
--label,为生成的镜像设置metadata
--squash,默认false。设置该选项,将新构建出的多个层压缩为一个新层,但是将无法在多个镜像之间共享新层;设置该选项,实际上是创建了新image,同时保留原有image。
--tag, -t,镜像的名字及tag,通常name:tag或者name格式;可以在一次构建中为一个镜像设置多个tag
--network,默认default。设置该选项,Set the networking mode for the RUN instructions during build
--quiet, -q ,默认false。设置该选项,Suppress the build output and print image ID on success
--force-rm,默认false。设置该选项,总是删除掉中间环节的容器
--rm,默认--rm=true,即整个构建过程成功后删除中间环节的容器
示例:
docker build -t newrain/bbauto:v2.1 .docker build 是docker创建镜像的命令
-t 是标识新建的镜像属于 newrain的 bbauto镜像
:v2 是tag
"."是用来指明 我们的使用的Dockerfile文件当前目录的
2.1、 创建镜像所在的文件夹和Dockerfile文件
[root@docker ~]# mkdir sinatra
[root@docker ~]# cd sinatra/
[root@docker sinatra]# touch Dockerfile
2.2、 在Dockerfile文件中写入指令,每一条指令都会更新镜像的信息例如:
[root@docker sinatra]# vim Dockerfile
#This is a comment
FROM daocloud.io/library/centos:7
MAINTAINER newrain newrain@docker
RUN yum install -y wget
RUN touch a.txt
RUN mkdir /test
格式说明:
命令要大写,"#"是注解。
每一个指令后面需要跟空格,语法。
FROM 命令是告诉docker 我们的镜像什么从哪里下载。
MAINTAINER 是描述 镜像的创建人。 maintainer
RUN 命令是在镜像内部执行。就是说他后面的命令应该是针对镜像可以运行的命令。
2.3、创建镜像
命令:
# docker build -t newrain/centso:7 . docker build 是docker创建镜像的命令
详细执行过程:
[root@docker sinatra]# docker build -t newrain/centos:7 .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM daocloud.io/library/centos
latest: Pulling from library/centos
d8d02d457314: Pull complete
Digest: sha256:a36b9e68613d07eec4ef553da84d0012a5ca5ae4a830cf825bb68b929475c869
Status: Downloaded newer image for daocloud.io/library/centos:latest---> 67fa590cfc1c
Step 2/4 : MAINTAINER newrain newrain@docker---> Running in aab3d80939d8
Removing intermediate container aab3d80939d8---> 12bae7d75a23
Step 3/4 : RUN yum update && yum install -y epel*---> Running in ad83c387c60f
Loaded plugins: fastestmirror, ovl
Determining fastest mirrors* base: mirrors.aliyun.com* extras: mirrors.aliyun.com* updates: mirrors.aliyun.com
Resolving Dependencies
--> Running transaction check
---> Package audit-libs.x86_64 0:2.8.4-4.el7 will be updated
---> Package audit-libs.x86_64 0:2.8.5-4.el7 will be an update
2.4、创建完成后,从镜像创建容器


前后端分离项目
前后端分离项目
ruoyi
java spring boot maven
vue nodejs
浏览器 => nginx 前端 => 后端
nginx 代码 配置文件
java java包
maven 打包java
node 打包前端
mysql 数据导入
redis
nginx 代码 配置文件
java java包
maven 打包java
node 打包前端
mysql 数据导入
redis
git clone https://gitee.com/y_project/RuoYi-Vue.git && cd RuoYi-Vue
1、准备数据库
docker run -itd --name ruoyi-mysql -v ./sql:/docker-entrypoint-initdb.d -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=ry-vue mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
2、准备redis
docker run -itd --name ruoyi-redis
3、准备打包java
cd RuoYi-Vue
docker run -it --rm -v .:/opt/app -v /root/.m2:/root/.m2 -w /opt/app maven:3.8.8-sapmachine-11 mvn package
4、准备打包前端
cd ruoyi-ui
docker run -it --rm -v .:/opt/app -w /opt/app node:18.20.3-alpine3.20 /bin/sh -c “npm install --registry http://registry.npmmirror.com && npm run build:prod”
5、打包好的内容
java : ruoyi-admin/target
前端 : ruoyi-ui/dist
6、整理打包好的内容
mkdir -p /opt/ruoyi-xa2401/{ruoyi-java,ruoyi-nginx}
cp ruoyi-admin/target/java包 /opt/ruoyi-xa2401/ruoyi-java
vim /opt/ruoyi-xa2401/ruoyi-java/Dockerfile
FROM java:8u111-jdk
COPY ./ruoyi-admin.jar /opt
CMD [“java”,“-jar”,“/opt/ruoyi-admin.jar”]
cp -r ruoyi-ui/dist /opt/ruoyi-xa2401/ruoyi-nginx
cp -r nginx.conf /opt/ruoyi-xa2401/ruoyi-nginx # nginx配置文件在最后面
vim opt/ruoyi-xa2401/ruoyi-nginx/Dockerfile
FROM nginx:1.16.1
COPY dist /usr/share/nginx/dist
COPY nginx.conf /etc/nginx/nginx.conf
CMD [“nginx”,“-g”,“daemon off;”]
7、构建镜像并运行
在java的目录执行java 在nginx目录执行nginx
docker build -t ruoyi-java:1.0 .
docker build -t ruoyi-nginx:1.0 .
docker run -it --name ruoyi-java --rm --link=ruoyi-mysql:mysql.ruoyi --link=ruoyi-redis:redis.ruoyi ruoyi-java:v1.0
docker run -it --name ruoyi-nginx --link=ruoyi-java:java.host -p 80:80 ruoyi-nginx:1.0
nginx配置文件
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - r e m o t e u s e r [ remote_user [ remoteuser[time_local] “KaTeX parse error: Double superscript at position 34: … '̲status b o d y b y t e s s e n t " body_bytes_sent " bodybytessent"http_referer” ’
‘“ h t t p u s e r a g e n t " " http_user_agent" " httpuseragent""http_x_forwarded_for”’;
access_log /var/log/nginx/access.log main;
charset utf-8;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;include /etc/nginx/mime.types;
default_type application/octet-stream;server {listen 80;server_name localhost;#charset koi8-r;#access_log /var/log/nginx/host.access.log main;location / {root /usr/share/nginx/dist;try_files $uri $uri/ /index.html;index index.html index.htm;}location /prod-api/{proxy_pass http://java.host:8080/; #注意这里的写法proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}
总结
Dockerfile
在执行命令的时候,必须在dockerfile这个目录下才可以,会从这个目录找Dockerfile
默认的是Dockerfile ,如果选择其他文件,需要加参数 docker build -t myss:1.0 -f ./Dockerfiletest .
.是构建上线关系的,为了构建镜像
在构建的时候退出了,有断点续传
RUN里面命令都没有缓存
CMD和ENTRYPOINT区别

面试题:
1、dockerfile中都有哪些语法
2、add和copy有什么区别
宿主机路径 镜像路径
copy是吧宿主机路径复制到镜像路径里面
add是吧宿主机复制过去并解压 如果下载的是url 的话就不会解压
3、CMD和entrypoint的区别
都是在启动容器的时候执行的
如果在Dockerfile定义CMD 执行docker run -it test:1 echo 123 然后查看docker ps -a那个命令就会出现也就是覆盖CMD里面的命令
如果是entrypoint 执行 docker run -it test:1 echo 123就会添加到后面
我们应该先写entrypoint 然后写cmd
4、dockerfile优化
编译一个简单的nginx成功以后发现好几百M。
1、RUN 命令要尽量写在一条里,每次 RUN 命令都是在之前的镜像上封装,只会增大不会减小2、每次进行依赖安装后,记得yum clean all【centos】
#yum clean all 清除缓存中的rpm头文件和包文件3、选择比较小的基础镜像。alpine
D里面的命令
如果是entrypoint 执行 docker run -it test:1 echo 123就会添加到后面
我们应该先写entrypoint 然后写cmd
4、dockerfile优化
编译一个简单的nginx成功以后发现好几百M。
1、RUN 命令要尽量写在一条里,每次 RUN 命令都是在之前的镜像上封装,只会增大不会减小2、每次进行依赖安装后,记得yum clean all【centos】
#yum clean all 清除缓存中的rpm头文件和包文件3、选择比较小的基础镜像。alpine
相关文章:
就业班 第四阶段(docker) 2401--5.29 day3 Dockerfile+前后段项目若依ruoyi
通过Dockerfile创建镜像 Docker 提供了一种更便捷的方式,叫作 Dockerfile docker build命令用于根据给定的Dockerfile构建Docker镜像。docker build语法: # docker build [OPTIONS] <PATH | URL | ->1. 常用选项说明 --build-arg,设…...
【运维项目经历|026】Redis智能集群构建与性能优化工程
🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专家博主 💊交流社区:CSDN云计算交流社区欢迎您的加入! 目…...
Linux编程for、while循环if判断以及case语句用法
简介 语法描述if条件语句if else条件判断语句if else-if else多条件判断语句for循环执行命令while循环执行命令until直到条件为真时停止循环case ... esac多选择语句break跳出循环continue跳出当前循环 1. for 循环 for语句,定量循环,可以遍历一个列表…...
docker命令 docker ps -l (latest)命令在 Docker 中用于列出最近一次创建的容器
文章目录 12345 1 docker ps -l 命令在 Docker 中用于列出最近一次创建的容器。具体来说: docker ps:这个命令用于列出当前正在运行的容器。-l 或 --latest:这个选项告诉 docker ps 命令只显示最近一次创建的容器,不论该容器当前…...
inflight 守恒和带宽资源守恒的有效性
接着昨天的问题,inflight 守恒的模型一定存在稳定点吗?并不是。如果相互抑制强度大于自我抑制强度,系统也会跑飞: 模拟结果如下: 所以一定要记得 a < b。 比对前两个图和后两个图的 a,b 参数关系&am…...
短视频直播教学课程小程序的作用是什么
只要短视频/直播做的好,营收通常都不在话下,近些年,线上自媒体行业热度非常高,每条细分赛道都有着博主/账号,其各种优势条件下也吸引着其他普通人冲入。 然无论老玩家还是新玩家,面对平台不断变化的规则和…...
Open AI又出王炸GPT-4,目测一大波人的饭碗要碎了...
前言 在科技的惊涛骇浪中,每一次技术的飞跃都预示着新时代的曙光。近日,Open AI公司再次震撼业界,推出了其最新力作——GPT-4,这款被誉为“王炸”的语言模型,以其前所未有的智能水平和创造力,不仅在技术圈…...
8086 汇编笔记(八):转移指令的原理
一、操作符 offset 操作符offset在汇编语言中是由编译器处理的符号,它的功能是取得标号的偏移地址 codesg segmentstart: mov ax,offset start ;相当于 mv ax,0s: mov ax,offset s ;相当于 mv ax,3codesg endsend start 二、jmp 指令 jmp为无条件…...
win 系统 cmd 命令从私库上传,下载jar包
1. 确保maven环境变量或者maven安装无误; 2.私库下载 命令 mvn dependency:get -DgroupId<your_group_id> -DartifactId<your_artifact_id> -Dversion<your_version> -Dpackagingjar -Dfile<path_to_your_jar_file> -Durl<your_privat…...
dots_image 增强图像中的圆点特征
dots_image 增强图像中的圆点特征 1. dot_image 有什么用途?2. 点状字符的特征增强3. Halcon代码 1. dot_image 有什么用途? Enhance circular dots in an image. 这个算子可以增强图像中的圆点特征,例如下面的例子。 2. 点状字符的特征增强…...
代码随想录算法训练营第十五天| 110.平衡二叉树、 257. 二叉树的所有路径、404.左叶子之和
110.平衡二叉树 题目链接:110.平衡二叉树 文档讲讲:代码随想录 状态:还可以 思路:计算左右子树的深度差,递归判断左右子树是否符合平衡条件 题解: public boolean isBalanced(TreeNode root) {if (root n…...
MSP430单片机控制流水灯,Proteus仿真
作品功能 本项目利用MSP430单片机控制一个简单的流水灯,通过按键切换流水灯的模式。用户可以通过按键控制LED灯的方向,从左向右或从右向左依次点亮。 作品的硬件材料 MSP430单片机 具体型号:MSP430G2553 LED灯 数量:8个类型&…...
出售iPhone前的必做步骤:完全擦除个人数据的方法
当您准备在闲鱼上转售旧 iPhone、将其捐赠、送给朋友或通过 Apple 回收之前,您可能会选择执行“恢复”操作来擦除您的数据。但请注意,这一操作并不能真正删除设备中的数据。被“删除”或“格式化”的数据实际上仍存在于 iPhone 中,只是被系统…...
npm yarn 更换国内源以及node历史版本下载地址
npm 更换国内源 npm config set registryhttps://registry.npmmirror.com npm config set electron_mirrorhttps://registry.npmmirror.com/electron/yarn 更换国内源 yarn config set registry https://registry.npmmirror.comnode历史版本下载地址 https://nodejs.org/dow…...
微信小程序手机号码授权登录
文章目录 一、微信小程序开发二、使用步骤1.前端代码2.后台配置3.后台代码 总结 一、微信小程序开发 目前个人的小程序无法使用手机号码授权登录,可以使用测试号进行开发 二、使用步骤 1.前端代码 代码如下(示例): <butto…...
【网络编程开发】1.网络结构 2.IP地址与端口号 3.字节序
网络编程开发 两台计算机要互相传送文件需解决很多问题: 必须有一条传送数据的通路。发起方必须激活通路。要告诉网络如何识别接收方。发起方要清楚对方是否已开机,且与网络连接正常。发起方要清楚对方是否准备好接收和存储文件。若文件格式不兼容&…...
读取文件
自学python如何成为大佬(目录):自学python如何成为大佬(目录)_利用python语言智能手机的默认语言实战一-CSDN博客 在Python中打开文件后,除了可以向其写入或追加内容,还可以读取文件中的内容。读取文件内容主要分为以下几种情况: 1 读取指…...
Allure在jenkins中无法显示的问题
jenkins中使用allure生成报告需要注意工作环境和路径的配置 前提条件: jenkins容器中已安装jdk和allure jenkins中配置全局工具环境: 项目中配置allure路径: 路径来源: Path需要选择相对路径的allure-report、allure-results...
建筑建筑一建考试试题及答案,分享几个实用搜题和学习工具 #其他#职场发展
收录了大量考试类型的题库,大到考公,小到知识竞赛,题库资源算是比较丰富的了。操作起来也不难,我们只需输入题目内容,即可快速搜索出答案,而且它在给出答案的同时还会附带解析。最重要的是,搜题…...
[240607] Jina AI 发布多模态嵌入模型 | PHP 曝新漏洞 | TypeScript 5.5 RC 发布公告
目录 Jina AI 多模态嵌入模型 - jina-clip-v1PHP 漏洞 CVE-2024-4577TypeScript 5.5 RC 发布公告 Jina AI 多模态嵌入模型 - jina-clip-v1 jina-clip-v1 是 Jina AI 最新推出的多模态嵌入模型。与 OpenAI CLIP 相比,它大幅提升了纯文本检索方面的性能,同…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...
2025-06-08-深度学习网络介绍(语义分割,实例分割,目标检测)
深度学习网络介绍(语义分割,实例分割,目标检测) 前言 在开始这篇文章之前,我们得首先弄明白,什么是图像分割? 我们知道一个图像只不过是许多像素的集合。图像分割分类是对图像中属于特定类别的像素进行分类的过程,即像素级别的…...
