Dockerfile简介和基础实践
文章目录
- 1、Dockerfile简介
- 1.1、Dockerfile解决的问题
- 1.2、docker build 构建流程
- 1.3、关键字介绍
- 2、Dockerfile 实践
- 2.1、基本语法实践 --- golang
- 2.1.1 问题检查
- 2.2、基本语法实践 --- gcc
- 总结
1、Dockerfile简介
Dockerfile是一个创建镜像所有命令的文本文件, 包含了一条条指令和说明, 每条指令构建一层, 通过
docker build命令,根据Dockerfile的内容构建镜像,因此每一条指令的内容, 就是描述该层如何构建.有了
Dockefile, 就可以制定自己的docker镜像规则,只需要在Dockerfile上添加或者修改指令, 就可生成
docker 镜像.
1.1、Dockerfile解决的问题
Dockerfile 包含了镜像制作的完整操作流程,其他开发者可以通过 Dockerfile 了解并复现制作过程
Dockerfile 中的每一条指令都会创建新的镜像层,这些镜像可以被 Docker Daemon 缓存。再次制作镜
像时,Docker 会尽量复用缓存的镜像层(using cache),而不是重新逐层构建,这样可以节省时间和
磁盘空间
Dockerfile 的操作流程可以通过docker image history [镜像名称]查询,方便开发者查看变更记录
1.2、docker build 构建流程
docker build命令会读取Dockerfile的内容,并将Dockerfile的内容发送给 Docker 引擎,最终 Docker
引擎会解析Dockerfile中的每一条指令,构建出需要的镜像。
第一步,docker build会将 context 中的文件打包传给 Docker daemon。如果 context 中有.dockerignore文件,则会从上传列表中删除满足.dockerignore规则的文件。注意:如果上下文中有相当多的文件,可以明显感受到整个文件发送过程。这里有个例外,如果.dockerignore文件中有.dockerignore或者Dockerfile,docker build命令在排除文件时会忽略掉这两个文件。如果指定了镜像的 tag,还会对 repository 和 tag 进行验证。
第二步,docker build命令向 Docker server 发送 HTTP 请求,请求 Docker server 构建镜像,请求中
包含了需要的 context 信息。
第三步,Docker server 接收到构建请求之后,会执行以下流程来构建镜像:
- 创建一个临时目录,并将 context 中的文件解压到该目录下。
- 读取并解析 Dockerfile,遍历其中的指令,根据命令类型分发到不同的模块去执行。
- Docker 构建引擎为每一条指令创建一个临时容器,在临时容器中执行指令,然后 commit 容器,生成一个新的镜像层。
- 最后,将所有指令构建出的镜像层合并,形成 build 的最后结果。最后一次 commit 生成的镜像 ID就是最终的镜像 ID。
为了提高构建效率,docker build默认会缓存已有的镜像层。如果构建镜像时发现某个镜像层已经被缓存,就会直接使用该缓存镜像,而不用重新构建。如果不希望使用缓存的镜像,可以在执行dockerbuild命令时,指定–no-cache=true参数。
Docker 匹配缓存镜像的规则为:遍历缓存中的基础镜像及其子镜像,检查这些镜像的构建指令是否和当前指令完全一致,如果不一样,则说明缓存不匹配。对于ADD、COPY指令,还会根据文件的校验和(checksum)来判断添加到镜像中的文件是否相同,如果不相同,则说明缓存不匹配。
这里要注意,缓存匹配检查不会检查容器中的文件。比如,当使用RUN apt-get -y update命令更新了容器中的文件时,缓存策略并不会检查这些文件,来判断缓存是否匹配。
最后,可以通过docker history命令来查看镜像的构建历史
1.3、关键字介绍
2、Dockerfile 实践
2.1、基本语法实践 — golang
(1)创建文件夹,存放Dockerfile。注意,默认Dockerfile文件的首字母要大写,当不指定Dockerfile时docker会自动去匹配。
mkdir example1
cd example1
vim Dockerfile
(2)Dockerfile输入如下内容:
FROM golang:1.18
MAINTAINER fly
ENV env1=v1
ENV env2=v2
LABEL myhello 1.0.0
LABEL env prod
RUN git clone https://gitee.com/nickdemo/helloworld.git
WORKDIR helloworld
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app .
EXPOSE 80
CMD ["./app","--param1=p1","--param2=p2"]
说明:
- FROM golang:1.18 表示使用golang语言v1.18版本的基础镜像。
- ENV设置容器的环境变量,一般是v1和v2。
- LABEL 可以设置多个。
- RUN设置编译时运行的脚本,可以有多个。
- WORKDIR类似于cd命令,WORKDIR helloworld是进入helloworld目录。
- CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app . 是golang编译命令,go可以和c语言配合使用
- CGO_ENABLED=0表示不打开CGO功能;
- app是编译出来的文件名,后面的.表示编译到当前路径。
(3)执行docker build命令。要注意带有的“.” ,这是上下文,不可缺少。
docker build -t hello:1.0.0 -f Dockerfile .
如果出现如下情况,编译不通过是因为没有设置golang的环境代理,因为golang服务器基本在国外,所以需要设置代理。
Sending build context to Docker daemon 2.048kB
Step 1/11 : FROM golang:1.18
1.18: Pulling from library/golang
32de3c850997: Pull complete
fa1d4c8d85a4: Pull complete
c796299bbbdd: Pull complete
81283a9569ad: Pull complete
c768848b86a2: Pull complete
160a777925fe: Pull complete
1be94824532a: Pull complete
Digest: sha256:00d63686b480f6dc866e93ddc4b29efa2db03274a687e6495c2cfbfe615d638e
Status: Downloaded newer image for golang:1.18---> fffd0d9a59da
Step 2/11 : MAINTAINER fly---> Running in 115307734b60
Removing intermediate container 115307734b60---> 563fafbaa215
Step 3/11 : ENV env1=v1---> Running in cdc078b0e0f4
Removing intermediate container cdc078b0e0f4---> 00cf872c162e
Step 4/11 : ENV env2=v2---> Running in 9c5d21d9827a
Removing intermediate container 9c5d21d9827a---> 675573fda93f
Step 5/11 : LABEL myhello 1.0.0---> Running in 835edee10587
Removing intermediate container 835edee10587---> 7fe90336bfc0
Step 6/11 : LABEL env prod---> Running in 6b9a149d8760
Removing intermediate container 6b9a149d8760---> 1f518a4de736
Step 7/11 : RUN git clone https://gitee.com/nickdemo/helloworld.git---> Running in 3836f92a0cc1
Cloning into 'helloworld'...
Removing intermediate container 3836f92a0cc1---> 497dfec57d8f
Step 8/11 : WORKDIR helloworld---> Running in 8f33d51a24f9
Removing intermediate container 8f33d51a24f9---> 581cbde35690
Step 9/11 : RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app .---> Running in ac2e563f44aa
go: downloading github.com/gomodule/redigo v1.8.9
go: downloading github.com/spf13/viper v1.12.0
hello/composeRedis.go:6:2: github.com/gomodule/redigo@v1.8.9: Get "https://proxy.golang.org/github.com/gomodule/redigo/@v/v1.8.9.zip": dial tcp 142.251.42.241:443: i/o timeout
hello/printConfig.go:5:2: github.com/spf13/viper@v1.12.0: Get "https://proxy.golang.org/github.com/spf13/viper/@v/v1.12.0.zip": dial tcp 142.251.42.241:443: i/o timeout
The command '/bin/sh -c CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app .' returned a non-zero code: 1
(4)Dockerfile中设置代理:
MAINTAINER fly
ENV env1=v1
ENV env2=v2
LABEL myhello 1.0.0
LABEL env prod
RUN git clone https://gitee.com/nickdemo/helloworld.git
WORKDIR helloworld
RUN go env -w GOPROXY="https://proxy.golang.com.cn,https://goproxy.cn,direct"
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app .
EXPOSE 80
CMD ["./app","--param1=p1","--param2=p2"]
(5)再次执行docker build命令。
docker build -t hello:1.0.0 -f Dockerfile .
成功结果:
Sending build context to Docker daemon 2.048kB
Step 1/12 : FROM golang:1.18---> fffd0d9a59da
Step 2/12 : MAINTAINER fly---> Using cache---> 563fafbaa215
Step 3/12 : ENV env1=v1---> Using cache---> 00cf872c162e
Step 4/12 : ENV env2=v2---> Using cache---> 675573fda93f
Step 5/12 : LABEL myhello 1.0.0---> Using cache---> 7fe90336bfc0
Step 6/12 : LABEL env prod---> Using cache---> 1f518a4de736
Step 7/12 : RUN git clone https://gitee.com/nickdemo/helloworld.git---> Using cache---> 497dfec57d8f
Step 8/12 : WORKDIR helloworld---> Using cache---> 581cbde35690
Step 9/12 : RUN go env -w GOPROXY="https://proxy.golang.com.cn,https://goproxy.cn,direct"---> Running in aa3d7b78e3ea
Removing intermediate container aa3d7b78e3ea---> 228d20762041
Step 10/12 : RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o app .---> Running in 0b4899bd2333
go: downloading github.com/gomodule/redigo v1.8.9
go: downloading github.com/spf13/viper v1.12.0
go: downloading github.com/fsnotify/fsnotify v1.5.4
go: downloading github.com/mitchellh/mapstructure v1.5.0
go: downloading github.com/spf13/afero v1.8.2
go: downloading github.com/spf13/cast v1.5.0
go: downloading github.com/spf13/jwalterweatherman v1.1.0
go: downloading github.com/spf13/pflag v1.0.5
go: downloading golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a
go: downloading golang.org/x/text v0.3.7
go: downloading github.com/subosito/gotenv v1.3.0
go: downloading github.com/hashicorp/hcl v1.0.0
go: downloading gopkg.in/ini.v1 v1.66.4
go: downloading github.com/magiconair/properties v1.8.6
go: downloading github.com/pelletier/go-toml/v2 v2.0.1
go: downloading gopkg.in/yaml.v3 v3.0.0
go: downloading github.com/pelletier/go-toml v1.9.5
Removing intermediate container 0b4899bd2333---> 8a0543eb5966
Step 11/12 : EXPOSE 80---> Running in 5de109cc2133
Removing intermediate container 5de109cc2133---> 11f4f6f09a9e
Step 12/12 : CMD ["./app","--param1=p1","--param2=p2"]---> Running in 49caece0cdf7
Removing intermediate container 49caece0cdf7---> 308a6e93a8ff
Successfully built 308a6e93a8ff
Successfully tagged hello:1.0.0
(6)查看docker images。发现有了hello:1.0.0。
fly@fly:~/wokspace/example1$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello 1.0.0 308a6e93a8ff About a minute ago 1.08GB
golang 1.18 fffd0d9a59da 41 hours ago 965MB
nginx latest ac8efec875ce 2 weeks ago 142MB
nongtengfei/mynginx 1.0.0 ac8efec875ce 2 weeks ago 142MB
localhost:5000/mynginx 1.0.0 ac8efec875ce 2 weeks ago 142MB
registry 2 81c944c2288b 5 weeks ago 24.1MB
(7)运行镜像。
docker run -p 80:80 --name myhello hello:1.0.0
执行结果:
fly@fly:~/wokspace/example1$ docker run -p 80:80 --name myhello hello:1.0.0
into main
也可以后台执行:
docker run -p 80:80 -d --name myhello hello:1.0.0
然后使用curl访问:
$ curl http://localhost:80/print/env
env list : env1 = v1 and env2 = v2
2.1.1 问题检查
上述制作的镜像有什么问题?
- 镜像非常大,什么都没做就是1.08GB。不方便传输。
- 使用了git软件,这个在golang的基础镜像默认有的,但是如果是是gcc环境,可能就没有这个git软件。
- 构建时传输了上下文,但是上下文基本没有用到。
2.2、基本语法实践 — gcc
(1)创建文件夹,存放Dockerfile。注意,默认Dockerfile文件的首字母要大写,当不指定Dockerfile时docker会自动去匹配。
mkdir example2
cd example2
vim Dockerfile
(2)Dockerfile输入如下内容:
FROM gcc
MAINTAINER fly
COPY ./hello.c ./
RUN pwd
LABEL myhello 1.0.0
LABEL env prod
RUN gcc hello.c -o hello
CMD ["./hello"]
(3)创建hello.c并输入内容:
#include <stdio.h>
int main(int argc,char **argv)
{printf("hello world\n");return 0;
}
(4)构建镜像:
docker build -t myhelloc .
执行结果:
Sending build context to Docker daemon 3.072kB
Step 1/8 : FROM gcc
latest: Pulling from library/gcc
32de3c850997: Already exists
fa1d4c8d85a4: Already exists
c796299bbbdd: Already exists
81283a9569ad: Already exists
60b38700e7fb: Pull complete
0db15631b022: Pull complete
becc68bc09a5: Pull complete
c369162968fc: Pull complete
ce5ec26c51fc: Pull complete
Digest: sha256:6c101c7698a6ebe5cd153182889ffc9ab2f7192bf96a06fe292806116fdaafba
Status: Downloaded newer image for gcc:latest---> e94a76bddd72
Step 2/8 : MAINTAINER fly---> Running in e193e6e7dac1
Removing intermediate container e193e6e7dac1---> afa92db551f4
Step 3/8 : COPY ./hello.c ./---> 87b51ccd7de3
Step 4/8 : RUN pwd---> Running in 569f3ddfaf53
/
Removing intermediate container 569f3ddfaf53---> 2ee756f47004
Step 5/8 : LABEL myhello 1.0.0---> Running in 2deaebd60838
Removing intermediate container 2deaebd60838---> 1610bf7d0792
Step 6/8 : LABEL env prod---> Running in ce840c209a93
Removing intermediate container ce840c209a93---> b6158d8d3aac
Step 7/8 : RUN gcc hello.c -o hello---> Running in 6f01803e28b1
Removing intermediate container 6f01803e28b1---> 6c9223360ad5
Step 8/8 : CMD ["./hello"]---> Running in 9127f8f3e413
Removing intermediate container 9127f8f3e413---> a88d99f3d8e8
Successfully built a88d99f3d8e8
Successfully tagged myhelloc:latest
(5)执行镜像:
docker run myhelloc
执行结果:
fly@fly:~/wokspace/example2$ docker run myhelloc
hello world
如果是后台执行,可以通过docker log 查询到输出的hello world。
总结
- 构建镜像时,选择上下文要注意,不要包含有不要用到的内容,通常使用项目的根目录作为上下文即可。
- COPY命令时,基本上是“./*”开始,没有绝对路径,因为构建的时候上下文已经发送到守护进程,不在宿主机了。
- go语言和c语言编译的区别,主要在FROM部分,依赖的基础环境;另外,编译命令也不一样。
相关文章:

Dockerfile简介和基础实践
文章目录 1、Dockerfile简介1.1、Dockerfile解决的问题1.2、docker build 构建流程1.3、关键字介绍 2、Dockerfile 实践2.1、基本语法实践 --- golang2.1.1 问题检查 2.2、基本语法实践 --- gcc 总结 1、Dockerfile简介 Dockerfile是一个创建镜像所有命令的文本文件, 包含了一…...

3分钟 docker搭建 帕鲁服务器
1. 安装docker 1.安装依赖环境 yum -y install yum-utils device-mapper-persistent-data lvm22.设置镜像源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3.安装docker 3.1 yum makecache fast yum install docker-ce …...

[BUUCTF 2018]Online Tool(特详解)
这段代码块检查请求中是否设置了HTTP_X_FORWARDED_FOR头部。如果设置了,它将REMOTE_ADDR设置为HTTP_X_FORWARDED_FOR的值。这通常用于处理Web服务器位于代理后面的情况。 如果URL中未设置host参数,它使用highlight_file(__FILE__);来显示PHP文件的源代码…...

Qt Design Studio+Pyside项目
Qt Design Studio设计出的项目结构有多个层级的目录,我们直接用类似Qt Creator工具的方式加载main.qml文件时会报错提示module "content" is not installed,将content加入importPath后还是报同样的错误。 Qt Design Studio生成的文件包含了.qm…...

软件门槛之算法
软件门槛之算法 1.背景2.算法定义3.特征4.基本要素5.常用设计模式6.常用实现方法7.复杂度时间复杂度空间复杂度8.分类9.算法常用的一些工具10.算法的检验标准1.背景 一入行业深似海 再回首已是白发生! 工作这么多年了,感觉算法是比较难搞的。 写代码最重要的可能是框架和算法…...

第八篇【传奇开心果系列】beeware的toga开发移动应用示例:实现消消乐安卓手机小游戏
传奇开心果博文系列 系列博文目录beeware的toga开发移动应用示例系列博文目录一、项目目标二、安装依赖三、初步实现四、扩展思路五、实现游戏逻辑示例代码六、实现界面设计示例代码七、实现增加关卡和难度示例代码八、实现存档和排行榜示例代码九、实现添加特殊方块和道具示例…...

【MySQL】MySQL内置函数--日期函数/字符串函数/数学函数/其他相关函数
文章目录 1.日期函数2.字符串函数3.数学函数4.其它函数 1.日期函数 MySQL中内置了一下函数: 函数名称描述current_date()当前日期current_time()当前时间current_timestamp()当前时间戳date(datetime)返回datetime参数的日期部分date_add(date,interval d_value_t…...

应急响应红蓝工程师白帽子取证Linux和windows入侵排查还原攻击痕迹,追溯攻击者,以及各种木马和病毒以及恶意脚本文件排查和清除
应急响应红蓝工程师白帽子取证Linux入侵排查还原攻击痕迹,追溯攻击者,以及各种木马和病毒以及恶意脚本文件排查和清除。 一般服务器被入侵的迹象,包括但不局限于:由内向外发送大量数据包(DDOS肉鸡)、服务器资源被耗尽(挖矿程序)、不正常的端口连接(反向shell等)、服务…...

vue项目使用element-plus
介绍 1.element Plus 是一套基于 Vue.js 的组件库,是对饿了么团队的 Element UI 组件库的升级版本。Element Plus 的目标是提供一套更为现代、更好用的 Vue.js UI 组件。 导入 1.1 执行命令: npm install element-plus --save 1.2 在main.js中做如下配置import E…...

Fastbee物联网项目新手快速入门
一,前提条件 后端环境准备如下: 正式环境推荐硬件资源最低要求4c8G,硬盘40G。JDK 1.8.0_2xx (需要小版本号大于200) 。Maven3.6.3。(IDEA启动时使用IDEA默认自带的版本即可)。 启动fastbee之前,请先确定…...

Linux 网络流量相关工具
本文聚焦于网络流量的查看、端口占用查看。至于网络设备的管理和配置,因为太过复杂且不同发行版有较大差异,这里就不赘述,后面看情况再写。 需要注意的是,这里列出的每一个工具都有丰富的功能,流量/端口信息查看只是其…...

KMP算法关于next数组详解
j1234567abcabcdnext[j]0111234 要求j7的时候,next数组为多少,j7的时候,就是看i6的时候前缀和后缀的关系(因为求7的时候,和7没有关系,和7的前面有关系) 当i6的时候,j3,…...

【Docker】数据持久化 挂载
Docker的镜像是只读的,但是容器是可写的,我们可以将数据写入到容器,不过一旦容器删除数据将会丢 失,那么有什么办法能将数据进行持久化存储呢? ——在宿主机上开辟一块地方,存储内容和docker容器的存储内…...

redis-主从复制
1.主从复制 1.1简介 主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主 1.2作用 1、数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。 2、故…...

知识产权如何转为实缴资本,实操
网上已传疯了,相关部门要求企业注册资本认缴的必须在5年内完成实缴,这一下子引起企业老板们着急了。以前公司注册时,很多老板因为是认缴资本,完全凭脑袋一拍,写上注册资金5000万,有的甚至写上几个小目标。现…...

docker-compose安装
一、docker-compose是什么 Docker Compose是一个用来定义和运行复杂应用的Docker工具。 一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。 Compose 通过一个配置文件来管理多个Docker容器,在配置文件…...

「 典型安全漏洞系列 」06.路径遍历(Path Traversal)详解
引言:什么是路径遍历?如何进行路径遍历攻击并规避常见防御?如何防止路径遍历漏洞。 1. 简介 路径遍历(Path Traversal)是一种安全漏洞,也被称为目录遍历或目录穿越、文件路径遍历。它发生在应用程序未正确…...

【Android Gradle 插件】Gradle 参考文档收集
Android Plugin DSL Reference 参考文档 Android Plugin DSL Reference 参考文档 : Android Studio 构建配置官方文档 : 配置 build | Android Studio | Android Developers 添加构建依赖项 参考文档 : https://developer.android.google.cn/studio/build/dependencies …...

Controller的部分注解
目录 1.增加 用到注解 1.1RequestBody注解解析: 2.查询方法当中参数不用注解! 3.起售停售用到注解 3.1PathVariable解析 4.删除菜品注解 4.1RequestParam 5.修改用到的注解 5.1修改分两步 用到两个注解 6:总结 1.增加 用到注解…...

CMake简明教程 笔记
推荐B站视频:1.1 Cmake构建项目的流程_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1xa4y1R7vT?p1&vd_sourcea934d7fc6f47698a29dac90a922ba5a3 >>目录 1)CMake初体验 CMake构建流程Windows下使用CMake构建项目Linux下使用CMake构…...

使用 sorted set 实现令牌桶限流
业务场景为限制消息发送,要求每天不超过一次,每七天不超过三次。 Redission 的 RRateLimiter 虽然功能完备且支持自定义限流配置,但是每个限流器都需要维护三个 key,并且 lua 脚本中的判断逻辑较为复杂。 见:Redisso…...

云上高可用系统-韧性设计模式
一、走近韧性设计模式 (一)基本概念 韧性设计模式是一系列在软件工程中用于提高系统韧性的设计原则、策略、实践和模式。韧性(Resilience)在这里指的是系统对于各种故障、异常和压力的抵抗能力,以及在遭受这些挑战后…...

【保姆级教程】Windows11下go-zero的etcd安装与初步使用
【Go-Zero】Windows11下etcd的安装与初步使用 大家好 我是寸铁👊 总结了一篇Windows11下etcd的安装与初步使用的文章✨ 喜欢的小伙伴可以点点关注 💝 前言: 在使用etcd 前,我们需要了解一下etcd 是什么,为什么使用etcd…...

golang通过go-git下载gitlab源码
1 申请令牌 方法1:具体项目下申请: 方法2:全局申请 2 获取token 3 下载代码 package mainimport ("fmt""os""github.com/go-git/go-git/v5" )func main() {_, err : git.PlainClone("/tmp/foo",…...

探索Pyecharts之美-绘制多彩旭日图的艺术与技巧【第37篇—python:旭日图】
文章目录 引言准备工作绘制基本旭日图调整颜色和样式添加交互功能定制标签和标签格式嵌套层级数据高级样式与自定义进阶主题:动态旭日图数据源扩展:外部JSON文件总结 引言 数据可视化在现代编程中扮演着重要的角色,而Pyecharts是Python中一个…...

c++ QT 信号的个人理解 信号就是独立文件调用的一种“协议”
一. 简介 就我个人来理解,信号槽机制与Windows下消息机制类似,消息机制是基于回调函数,Qt中用信号与槽来代替函数指针,使程序更安全简洁。 信号和槽机制是 Qt 的核心机制,可以让编程人员将互不相关的对象绑定在一起&a…...

C#语法(关键字)
C#关键字 关键字是C#编译器预定义的保留字。这些关键字不能作为标识符,但是,如果您想要用它们做标识符,在这个前面加个字符做前缀。 保留关键字abstractasbaseboolbreakbytecasecatchcharcheckedclassconstcontinuedecimaldefaultdelegated…...

让B端管理软件既美观又实用的解决方案来了
hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 让B端管理软件既美观又实用的解决方案来了 在当今数字化时代,B端管理软件已…...

npm run dev,vite 配置 ip 访问
启动项目通过本地 ip 的方式访问 方式一.通过修改 package.json "scripts": {"dev": "vite --host 0.0.0.0",}, 方式二.通过修改 vite.config.ts export default defineConfig({plugins: [vue(), vueJsx()],server: { // 配置 host 与 port 方…...

实验3:数据显示输出
1、实验目的: 掌握将内存单元存储的数据显示输出到显示器的方法。 2、实验内容: 将内存单元存储的字节数据(例如 56H)的16进制数的低位输出到显示器并显示。 3、实验要求: (1)运行程序后&a…...