进阶Docker3:Dokerfile构建镜像

目录

Dockerfile

构建基础镜像

基本机构

命令:

命令解释:

准备工作

创建镜像

上传镜像


Dockerfile

Dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像,另外,使 用Dockerfile 去构建镜像好比使用 pom 去构建 maven 项目一样,有异曲同工之妙。

构建基础镜像

centos
alpine
jeanblanchard/alpine-glibc 使用这个
1. 空间大小差异, alpine 默认 5M 左右, centos 等都在 200M 左右。
2. 默认软件包差异, alpine 选用 busybox centos 等则是 bash+coreutils 几件套。
3. alpine 中,国际化组件被优化掉了。
4. 还有一点, alpine 中选用的都是 最简依赖 ,这点和 archlinux 比较像,举个例子,
openssh 包不会自带 pam 插件,于是他也就不支持 ldap 。这点我给 alpinelinux 官方提过
issue 。和 php 不一样, php 可以做成 php-pdo php-dom 的包,然后动态加载共享库。
openssh 不行, 没带就是没写
5. glibc 差异, alpine 选用 musl centos 等选用 glibc ,其他的倒还好, libc 的差异对开发很重
要。

基本机构

Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行。
一般的, Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。

命令:

基础镜像信息:FROM
维护者信息:MAINTAINER
镜像操作命令: RUN ENV COPY ADD EXPOSE WORKDIR ONBUILD USER
VOLUME

命令解释:

FROM centos
MAINTAINER 2196707417@qq.com
WORKDIR /test    cd/test
ENY 环境变量
CPOY spring.jar /test
CPOY和ADD的区别:ADD不仅可以赋值还会默认解压;
如果仅仅是把本地的文件拷贝到容器镜像中, COPY 命令是最合适不过的。其命令的格式
为: COPY <src> <dest>
ADD 命令的格式和 COPY 命令相同,也是: ADD <src> <dest>
区别: ADD 解压压缩文件并把它们添加到镜像中

准备工作

创建文件夹上传 jdk 的安装包 , 和在同级目录下编写 Dockerfile 文件
编写 Dockerfile 文件
示例
#1.指定基础镜像,并且必须是第一条指令
FROM centos:latest
#2.指明该镜像的作者和其电子邮件
MAINTAINER xx "xx@qq.com"
#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /usr/local/java
#4.一个复制命令,把jdk安装文件复制到镜像中,注意:jdk*.tar.gz使用的是相对路径
ADD jdk-8u221-linux-x64.tar.gz /usr/local/java/
#5.配置环境变量
ENV JAVA_HOME=/usr/local/java/jdk1.8.0_221
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
#容器启动时需要执行的命令
#CMD ["java","-version"]

创建镜像

我们可以通过jdk和jre,还有不同的操作系统centos和 jeanblanchard/alpine-glibc 构建不同大小的镜像,因为镜像需要部署很多个,所以镜像越小越好;下面是不同版本的镜像大小也不同。

FROM centos
MAINTAINER 2196707417@qq.com
WORKDIR /test	
COPY spring.jar /test


配置jdk环境变量

FROM centos
MAINTAINER 2196707417@qq.com
WORKDIR /test	
COPY spring.jar /test/
ADD jdk-8u221-linux-x64.tar.gz /test
ENV JAVA_HOME=/test/jdk1.8.0_221
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH


配置自动运行jar包 #CMD ["java","-version"]

FROM centos
MAINTAINER 2196707417@qq.com
WORKDIR /test	
COPY spring.jar /test/
ADD jdk-8u221-linux-x64.tar.gz /test
ENV JAVA_HOME=/test/jdk1.8.0_221
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
#CMD ["java","-version"]


优化镜像
jdk jre

FROM centos
MAINTAINER 2196707417@qq.com
WORKDIR /test	
COPY spring.jar /test/
ADD jre-8u391-linux-x64.tar.gz /test
ENV JAVA_HOME=/test/jre1.8.0_391
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
#CMD ["java","-version"]


优化操作系统 centos换jeanblanchard/alpine-glibc

FROM jeanblanchard/alpine-glibc
MAINTAINER 2196707417@qq.com
WORKDIR /test	
COPY spring.jar /test/
ADD jre-8u391-linux-x64.tar.gz /test
ENV JAVA_HOME=/test/jre1.8.0_391
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
#CMD ["java","-version"]



编写完成 Dockerfile 之后,可以通过 docker build 命令来创建镜像
根据当前路径得Dockerfile 路径构建镜像
docker build -t spring:v1 .

docker run -it spring:v1
处在哪个目录? \test
目录下有什么文件? spring.jar 

运行镜像
docker run -itd --name s1 -p 8080:8080 spring:v5
注:注意最后有个点,代表使用当前路径的 Dockerfile 进行构建 

上传镜像

在阿里云搜索容器镜像服务创建镜像和仓库order_service

 控制台登录

 给镜像取个别名

docker tag 52c4827a87e1 registry.cn-hangzhou.aliyuncs.com/zking_docker/order_service:v1

上传镜像到阿里云order_service仓库

 docker push registry.cn-hangzhou.aliyuncs.com/zking_docker/order_service:v1

删除镜像

 docker rmi registry.cn-hangzhou.aliyuncs.com/zking_docker/order_service:v1

下载阿里云仓库order_sercice 镜像

 docker pull registry.cn-hangzhou.aliyuncs.com/zking_docker/order_service:v1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/322698.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3.hadoop HA-QJM 安装

目录 概述实践一主两从解压配置文件hadoop-env.shcore-site.xmlhdfs-site.xmlyarn-site.xmlmapred-site.xmlworkers分发环境变量 格式化启动 hdfs启动 yarn验证bug zookeeperHAcore-site.xml hdfs-site.xml改为配置分发执行验证 HA 结束 概述 环境&#xff1a;hadoop 3.3.6 jd…

springboot项目启动时横幅修改

正常情况下&#xff0c;springboot启动时的横幅&#xff08;banner&#xff09;长这样 自定义banner 在resource下创建banner.txt&#xff0c;写入想要修改的内容即可 程序无bugSpring Boot Version: ${spring-boot.version}// _ooOoo_ …

提振信心,夯实信任,可持续发展见增长

近日&#xff0c;品牌ESG研究咨询机构MKTforGOOD发布《2024中国ESG消费报告》。这是MKTforGOOD持续第三年监测中国新世代对可持续消费的态度。在这三年的特殊时光里&#xff0c;累计近6000名受访者与MKTforGOOD一起深思消费的意义&#xff0c;分享他们对于在日常的消费生活中看…

IOS高德地图SDK接入-Swift

申请key 这个要前往高德开发平台注册成为个人开发者然后在控制台创建一个应用&#xff1a; 高德开发平台 注册步骤就不写了&#xff0c;写一下创建应用的步骤&#xff1a; 1、点击应用管理——>我的应用 2、点击右上角的创建新应用 3、输入内容&#xff1a; 4、点击添加ke…

SQL语句错误this is incompatible with sql_mode=only_full_group_by解决方法

一、原理层面 这个错误发生在mysql 5.7.5 版本及以上版本会出现的问题&#xff1a; mysql 5.7.5版本以上默认的sql配置是:sql_mode“ONLY_FULL_GROUP_BY”&#xff0c;这个配置严格执行了"SQL92标准"。 很多从5.6升级到5.7时&#xff0c;为了语法兼容&#xff0c;大部…

什么是google算法?

谷歌算法本身指的是谷歌针对搜索引擎做的规定 要想在别人的地盘玩&#xff0c;那肯定要了解这个地盘的规定&#xff0c;不然做了什么违反了规定&#xff0c;谷歌肯定不会让你继续玩下去 要想做谷歌&#xff0c;那肯定要了解谷歌的算法&#xff0c;然而谷歌的算法也不是一成不变…

【学习笔记】Flowable - 01 - 工作流 快速上手

一、准备 1.1 环境准备 JDK8 Flowable6 (6.3 or 6.7.2) Postgresql (MySQL同样支持) 1.2 学习视频资料 波哥&#xff1a;2023年Flowable详细讲解波哥&#xff1a;2022年Flowable教程-基础篇Flowable BPMN 用户手册 中文官方网站官方github源码 1.3 流程设计器 IDEA低版…

【CFP-专栏3】多领域SCI/EI快刊,1个月录用,12天见刊,1个月检索!

一、材料科学类SCI 【期刊概况】IF:3.0-4.0, JCR3区&#xff0c;中科院4区&#xff1b; 【大类学科】材料科学&#xff1b; 【检索情况】SCI在检&#xff1b; 【录用周期】2-3个月左右录用&#xff1b; 【接收领域】低温环境下新型生物降解材料的开发相关研究均可&#xf…

net8 rdl rdlc ssrs报表设计器表头合并单元格(垂直合并)

报表设计器下载地址 https://www.microsoft.com/zh-cn/download/details.aspx?id53613 或者从vs扩展插件安装 打开报表设计器&#xff0c;插入矩阵表格&#xff08;只有这个才能支持表头单元格合并&#xff09; 在列单元右建&#xff0c;插入行&#xff0c;根据实际需要添加…

怎样通过交换机封锁MAC地址

第一步&#xff1a;查询该IP所对应的MAC地址 display arp | include ip地址 第二步&#xff1a;封锁mac地址 mac-address blackhole mac地址 vlan 所属vlan-id 以上操作即可封锁

Robot Framework之python脚本调用

目录 目录结构 ​编辑 Python函数作为关键字 一、通过Import Library关键字在*** Test Cases ***中引用python脚本 ​编辑 二、通过Library关键字在*** Settings ***中引入python脚本 Python类作为测试库 一、通过Library关键字在*** Settings ***引入python脚本中的类 …

如何实现一个好用的全链路多测试环境(HTTP篇)

这里是weihubeats,觉得文章不错可以关注公众号小奏技术&#xff0c;文章首发。拒绝营销号&#xff0c;拒绝标题党 背景 随着公司的发展&#xff0c;研发的系统和开发人员会变得越来越多。但是测试环境却始终只有一个&#xff0c;所以久而久之&#xff0c;我们就发现研发经常遇…

载誉前行!科士达新能源荣获光能杯卓越解决方案奖项

1月10日&#xff0c;由索比光伏网主办的“光能杯”光伏行业颁奖典礼在苏州隆重举行&#xff0c;科士达新能源凭借深厚的技术实力、强大的创新力、优质的产品及解决方案、丰富的项目经验等&#xff0c;斩获“卓越光储充一体化解决方案“殊荣。 作为智慧能源领域全场景解决方案供…

数据结构排序算法总结

直接插入排序 折半插入排序 希尔排序 冒泡排序 快速排序 选择排序 堆排序 归并排序 1.直接插入排序 前面的有序 后面的无序&#xff0c;无序元素插入到前面的有序列表中 int len nums.length, i 1, j 0;for(i1; i<len; i){int ele nums[i];// 插入过程for(j i…

深信服技术认证“SCSA-S”划重点:逻辑漏洞

为帮助大家更加系统化地学习网络安全知识&#xff0c;以及更高效地通过深信服安全服务认证工程师考核&#xff0c;深信服特别推出“SCSA-S认证备考秘笈”共十期内容&#xff0c;“考试重点”内容框架&#xff0c;帮助大家快速get重点知识~ 划重点来啦 *点击图片放大展示 深信服…

springboot设置统一响应头——无效?接口无响应?

背景 对接一个关联方系统&#xff0c;我这边需要提供几个接口。对方要求&#xff0c;这些接口有统一的响应格式&#xff0c;并且有统一的响应头。统一的响应头包含如下&#xff1a; {"TT-Encrypt":"noaction","Content-Encoding":"gzip&q…

v-if 实现不同的状态样式

目录 一、实现思路 二、实现步骤 案例一&#xff1a; ①view部分展示 ②JavaScript 内容 ④ 效果展示 案例二&#xff1a; ①view部分展示 ②JavaScript 内容 ④ 效果展示 ​编辑 一、实现思路 通过v-for循环获取数据并进行判断该条记录中status的状态 给不同的状态赋值&am…

FDTD2018a安装问题记录

FDTD2018a安装问题记录 目录问题解决方案 目录 问题 解决方案 电脑名字如果是中文改成英文

【数据结构】C语言实现顺序栈

顺序栈的C语言实现 导言一、栈的分类二、顺序栈2.1 顺序栈的数据类型2.2 顺序栈的初始化2.3 栈的判空2.5 顺序栈的进栈2.6 顺序栈的出栈2.7 顺序栈的查找2.8 顺序栈的另一种实现方式2.9 顺序栈的销毁 结语 导言 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff0…

【数学建模美赛M奖速成系列】数据可视化(二)

数据可视化&#xff08;二&#xff09; 写在前面百分比堆叠线条图优点缺点实现pythonmatlab 火山图优点实现pythonmatlab 最后 写在前面 上一篇文章为大家分享了山脊图和气泡图的绘图方法与代码&#xff0c;这里学姐为继续为大家分享百分比堆叠线条图和火山图&#xff0c;包含…
最新文章