当前位置: 首页 > news >正文

就业班 第四阶段(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区别

image-20240529112152607

面试题:

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 提供了一种更便捷的方式&#xff0c;叫作 Dockerfile docker build命令用于根据给定的Dockerfile构建Docker镜像。docker build语法&#xff1a; # docker build [OPTIONS] <PATH | URL | ->1. 常用选项说明 --build-arg&#xff0c;设…...

【运维项目经历|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语句&#xff0c;定量循环&#xff0c;可以遍历一个列表…...

docker命令 docker ps -l (latest)命令在 Docker 中用于列出最近一次创建的容器

文章目录 12345 1 docker ps -l 命令在 Docker 中用于列出最近一次创建的容器。具体来说&#xff1a; docker ps&#xff1a;这个命令用于列出当前正在运行的容器。-l 或 --latest&#xff1a;这个选项告诉 docker ps 命令只显示最近一次创建的容器&#xff0c;不论该容器当前…...

inflight 守恒和带宽资源守恒的有效性

接着昨天的问题&#xff0c;inflight 守恒的模型一定存在稳定点吗&#xff1f;并不是。如果相互抑制强度大于自我抑制强度&#xff0c;系统也会跑飞&#xff1a; 模拟结果如下&#xff1a; 所以一定要记得 a < b。 比对前两个图和后两个图的 a&#xff0c;b 参数关系&am…...

短视频直播教学课程小程序的作用是什么

只要短视频/直播做的好&#xff0c;营收通常都不在话下&#xff0c;近些年&#xff0c;线上自媒体行业热度非常高&#xff0c;每条细分赛道都有着博主/账号&#xff0c;其各种优势条件下也吸引着其他普通人冲入。 然无论老玩家还是新玩家&#xff0c;面对平台不断变化的规则和…...

Open AI又出王炸GPT-4,目测一大波人的饭碗要碎了...

前言 在科技的惊涛骇浪中&#xff0c;每一次技术的飞跃都预示着新时代的曙光。近日&#xff0c;Open AI公司再次震撼业界&#xff0c;推出了其最新力作——GPT-4&#xff0c;这款被誉为“王炸”的语言模型&#xff0c;以其前所未有的智能水平和创造力&#xff0c;不仅在技术圈…...

8086 汇编笔记(八):转移指令的原理

一、操作符 offset 操作符offset在汇编语言中是由编译器处理的符号&#xff0c;它的功能是取得标号的偏移地址 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安装无误&#xff1b; 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 有什么用途&#xff1f;2. 点状字符的特征增强3. Halcon代码 1. dot_image 有什么用途&#xff1f; Enhance circular dots in an image. 这个算子可以增强图像中的圆点特征&#xff0c;例如下面的例子。 2. 点状字符的特征增强…...

代码随想录算法训练营第十五天| 110.平衡二叉树、 257. 二叉树的所有路径、404.左叶子之和

110.平衡二叉树 题目链接&#xff1a;110.平衡二叉树 文档讲讲&#xff1a;代码随想录 状态&#xff1a;还可以 思路&#xff1a;计算左右子树的深度差&#xff0c;递归判断左右子树是否符合平衡条件 题解&#xff1a; public boolean isBalanced(TreeNode root) {if (root n…...

MSP430单片机控制流水灯,Proteus仿真

作品功能 本项目利用MSP430单片机控制一个简单的流水灯&#xff0c;通过按键切换流水灯的模式。用户可以通过按键控制LED灯的方向&#xff0c;从左向右或从右向左依次点亮。 作品的硬件材料 MSP430单片机 具体型号&#xff1a;MSP430G2553 LED灯 数量&#xff1a;8个类型&…...

出售iPhone前的必做步骤:完全擦除个人数据的方法

当您准备在闲鱼上转售旧 iPhone、将其捐赠、送给朋友或通过 Apple 回收之前&#xff0c;您可能会选择执行“恢复”操作来擦除您的数据。但请注意&#xff0c;这一操作并不能真正删除设备中的数据。被“删除”或“格式化”的数据实际上仍存在于 iPhone 中&#xff0c;只是被系统…...

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.后台代码 总结 一、微信小程序开发 目前个人的小程序无法使用手机号码授权登录&#xff0c;可以使用测试号进行开发 二、使用步骤 1.前端代码 代码如下&#xff08;示例&#xff09;&#xff1a; <butto…...

【网络编程开发】1.网络结构 2.IP地址与端口号 3.字节序

网络编程开发 两台计算机要互相传送文件需解决很多问题&#xff1a; 必须有一条传送数据的通路。发起方必须激活通路。要告诉网络如何识别接收方。发起方要清楚对方是否已开机&#xff0c;且与网络连接正常。发起方要清楚对方是否准备好接收和存储文件。若文件格式不兼容&…...

读取文件

自学python如何成为大佬(目录):自学python如何成为大佬(目录)_利用python语言智能手机的默认语言实战一-CSDN博客 在Python中打开文件后&#xff0c;除了可以向其写入或追加内容&#xff0c;还可以读取文件中的内容。读取文件内容主要分为以下几种情况&#xff1a; 1 读取指…...

Allure在jenkins中无法显示的问题

jenkins中使用allure生成报告需要注意工作环境和路径的配置 前提条件&#xff1a; jenkins容器中已安装jdk和allure jenkins中配置全局工具环境&#xff1a; 项目中配置allure路径&#xff1a; 路径来源&#xff1a; Path需要选择相对路径的allure-report、allure-results...

建筑建筑一建考试试题及答案,分享几个实用搜题和学习工具 #其他#职场发展

收录了大量考试类型的题库&#xff0c;大到考公&#xff0c;小到知识竞赛&#xff0c;题库资源算是比较丰富的了。操作起来也不难&#xff0c;我们只需输入题目内容&#xff0c;即可快速搜索出答案&#xff0c;而且它在给出答案的同时还会附带解析。最重要的是&#xff0c;搜题…...

[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 相比&#xff0c;它大幅提升了纯文本检索方面的性能&#xff0c;同…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...