4. docker镜像、Dockerfile

发布时间:2026/10/10 10:09:54

4. docker镜像、Dockerfile docker镜像、Dockerfile一、docker镜像1、镜像介绍2、镜像核心技术二、Dockerfile定制镜像1、Dockerfile使用流程1.1 编写Dockerfile1.2、构建镜像1.3 创建容器测试镜像定制操作2、Dockerfile常用指令三、Dockerfile应用1、定制nginx镜像2、定制spring boot类型项目镜像四、jenkins自动发布业务容器1、上传项目代码2、安装配置jenkins2.1 创建容器运行jenkins2.2 安装插件2.3 配置gitee连接2.4 配置git工具2.5 配置maven编译工具2.6 配置jdk2.7 添加业务服务器3、创建任务配置业务发布流程3.1 创建任务一、docker镜像1、镜像介绍分层的文件系统优势节省空间、速度快、重用只读创建容器时会在镜像上面添加一个可写层2、镜像核心技术COW copy on write 写时复制Union fs 联合文件系统overlay2device mapper[rootmartin-host ~]# docker infoClient: Docker Engine - Community Version:26.1.4 Context: default Debug Mode:falsePlugins: buildx: Docker Buildx(Docker Inc.)Version: v0.14.1 Path: /usr/libexec/docker/cli-plugins/docker-buildx compose: Docker Compose(Docker Inc.)Version: v2.27.1 Path: /usr/libexec/docker/cli-plugins/docker-compose Server: Containers:1Running:0Paused:0Stopped:1Images:4Server Version:26.1.4 Storage Driver: overlay2二、Dockerfile定制镜像1、Dockerfile使用流程1.1 编写Dockerfile[rootmartin-host testDockerfile]# lsCentOS-Base.repo Dockerfile[rootmartin-host testDockerfile]# cat DockerfileFROM centos:7 COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo RUN yuminstall-ynet-tools1.2、构建镜像[rootmartin-host testDockerfile]# docker build -t centos:v1 ./1.3 创建容器测试镜像定制操作[rootmartin-host testDockerfile]# docker image lsREPOSITORY TAG IMAGE ID CREATED SIZE centos v1 3e88e2fdb6df56seconds ago 461MB redis latest 7614ae9453d12years ago 113MB centos7eeb6ee3f44bd2years ago 204MB nginx1.18c2c45d5060853years ago 133MB[rootmartin-host testDockerfile]# docker run -tid --nametest1 centos:v1949b757d2b35b4d115a88f69cc8f1d704b6e6fcd34a64d4ecbfc28422e7530aa[rootmartin-host testDockerfile]# docker exec -ti test1 bash[root949b757d2b35 /]# ifconfigeth0:flags4163UP,BROADCAST,RUNNING,MULTICASTmtu1472inet10.88.7.2 netmask255.255.255.0 broadcast10.88.7.255 ether 02:42:0a:58:07:02 txqueuelen0(Ethernet)RX packets8bytes656(656.0B)2、Dockerfile常用指令FROM指定基础镜像镜像不存在构建镜像时自动下载镜像建议尽量选择小容量的镜像 / debian/ ubuntuFROM 镜像名称RUN指定定制命令RUN 命令命令命令CMD定义容器创建时自动执行的命令注意事项:1、前台启动服务的指令2、创建容器时不要自己指定命令会覆盖CMD3、一个Dockerfile中只能有一条CMD指令CMD httpd-DFOREGROUND CMD[httpd,-D,FOREGROUND]// 推荐ENTRYPOINT定义容器创建时自动执行的命令不会被覆盖ENTRYPOINT[httpd,-D,FOREGROUND]COPY复制文件注意只能复制本地文件COPY 源文件 目的文件ADD复制文件注意1、支持本地文件、URL、压缩包会自动解压ADD 源文件 目的文件ADD file01 /tmp/file01 ADD http://nginx.org/download/nginx-1.27.0.tar.gz /tmp ADD jdk-8u91-linux-x64.tar.gz /tmpEXPOSE说明容器服务端口注意1、-P随机发布端口时Dockerfile中必须有EXPOSE指令EXPOSE 端口 端口VOLUME定义持久化存储的目录创建容器时不使用-v明确指定目录会自动生成匿名卷VOLUME 目录ENV定义环境变量ENV 变量名称 值WORKDIR定义当前目录WORKDIR 目录USER指定容器运行的用户USER用户名三、Dockerfile应用1、定制nginx镜像FROM centos:7 COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo RUN yuminstall-ygcc openssl-devel zlib-devel pcre-develmakeADD https://nginx.org/download/nginx-1.27.3.tar.gz /tmp RUNtarxf /tmp/nginx-1.27.3.tar.gz-C/tmpcd/tmp/nginx-1.27.3./configure--prefix/usr/local/nginxmakemakeinstallrm-rf/tmp/nginx* CMD[/usr/local/nginx/sbin/nginx,-g,daemon off;]EXPOSE80/tcp2、定制spring boot类型项目镜像FROM adoptopenjdk/openjdk8:latest COPY statics-1.0-SNAPSHOT.jar /static.jar CMD[java,-jar,/static.jar]EXPOSE8081/tcp四、jenkins自动发布业务容器1、上传项目代码2、安装配置jenkins2.1 创建容器运行jenkins[rootmartin-host ~]# mkdir /jenkins/home -p[rootmartin-host ~]# chmod ow /jenkins/home/[rootmartin-host ~]# docker run -tid --namejenkins --hostnamejenkins --restartalways -v /jenkins/home/:/var/jenkins_home -p 9000:8080 -p 50000:50000 jenkins/jenkinsc339f5e6f90900fabdfa9be5ea6669b94d2d537aa6d6de40bf927dfdf27294c9[rootmartin-host ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c339f5e6f909 jenkins/jenkins/usr/bin/tini -- /u…3seconds ago Up3seconds0.0.0.0:50000-50000/tcp, :::50000-50000/tcp,0.0.0.0:9000-8080/tcp, :::9000-8080/tcp jenkins2.2 安装插件giteeMaven IntergationPublish Over SSH2.3 配置gitee连接2.4 配置git工具2.5 配置maven编译工具2.6 配置jdk[rootmartin-host ~]# tar xf jdk-15.0.2_linux-x64_bin.tar.gz -C /jenkins/home/2.7 添加业务服务器[rootmartin-host ~]# docker exec -ti jenkins bashjenkinsjenkins:/$ jenkinsjenkins:/$ ssh-keygen-trsa jenkinsjenkins:/$ ssh-copy-id root192.168.140.103、创建任务配置业务发布流程3.1 创建任务命令参考dockerrmi demo:1.0dockerrm-fdemocd/test/democateofDockerfileFROM adoptopenjdk/openjdk8:latest COPY *.jar /demo.jar CMD [ java, -jar, /demo.jar ] eofdockerbuild-tdemo:1.0 ./dockerrun-tid--namedemo--hostnamedemo--restartalways-p8080:8080 demo:1.0
延伸阅读

更多相关文章

2026/10/6 18:57:37

5. harbor镜像仓库

harbor镜像仓库一、镜像仓库1、类型2、构建私有仓库的方案二、部署harbor仓库(单机版)1、安装docker(略)2、安装docker-compose工具3、安装harbor4、生成harbor需要的证书、密钥(V3版本证书)4.1 创建CA4.2 创建harbor仓库需要的证书5、编辑harbor配置文件6、启动harbor三、harb…

2026/10/8 15:38:39

魔兽3从60帧到300帧:WarcraftHelper实战指南

魔兽3从60帧到300帧:WarcraftHelper实战指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 魔兽3的60帧上限并不写在渲染管线里&#xff…

2026/10/10 10:06:10

SQL单表查询必备:算术与比较运算符深度解析

1. 项目解读:单表查询里最不起眼却最要命的两个运算符先聊点实在的。很多人学SQL,SELECT和FROM写完就觉得自己会查数据了,结果一到实际需求就卡住:什么“查价格打了八折后还大于一百的商品”“找库存低于五十的畅销书”“把订单金…

2026/10/10 10:06:10

基于机器学习的日化产品销量影响因素分析与预测

“基于机器学习的日化产品销量影响因素的分析与预测”——这是我近期带过的一个毕业设计项目的完整复盘,也是我建议正在选题的同学认真考虑的毕设题目。先把一句话说透:这个题目表面挂的是“机器学习”和“深度学习”两个热门标签,但真正做题…

2026/10/10 10:06:10

高校资产管理系统建设方案:从状态机设计到实施避坑全指南

简介:《高校资产管理系统建设方案》是一份面向高校信息化建设人员、资产管理专员及系统规划者的方案文档,聚焦高校资产管理数字化转型中的系统设计与实施路径。文档以资产设备管理为核心,参照《事业单位国有资产管理暂行办法》和《高等学校固…

2026/10/10 10:06:10

微前端容器标准化:渐进式改造存量基座架构指南

说个我自己的真实经历。去年年中,我们部门接手了一套运行了三年的“微前端”系统,名义上早就完成了微前端改造。结果翻开代码仓库一看,光基座容器就有五个互相不兼容的版本:有的基于 qiankun,有的拿 iframe 简单包了一…

2026/10/10 10:01:09

Java毕设教研室管理系统:从需求拆解到Spring Boot落地实战

每年到了毕设季,“Java毕设教研室管理系统”这个组合就会出现得特别频繁。说实话,这个题目看起来平平无奇,但真要做得像个能上台面的信息化平台,而不是一个凑数的CRUD Demo,里面可以挖的细节比很多同学想象中要多。先把…

2026/10/10 7:31:36

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/9 20:15:56

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/8 6:05:44

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 0:04:53

从逻辑门到计算机:数字电路核心原理与全加器搭建实战

如果你拆过一台旧电脑的主板,盯着那些黑乎乎的小芯片看上一会儿,可能会冒出同一个疑问:这堆引脚密集的元件,到底是怎么“变”出那么复杂的应用的?答案并不在某个神秘的部件里,而是在所有芯片内部都在反复使…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑