6、DockerFile解析与微服务

2、DockerFile解析

2.1 是什么?
DockerFile是用来构建Docker的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本
官网:https://docs.docker.com/engine/reference/builder/
构建三步骤
​ 1、编写Dockerfile文件
​ 2、docker bulid命令构建镜像
​ 3、docker run依镜像运行容器实例

2.2 DockerFlie构建过程解析
2.2.1 Dockerfile内容基础知识
1、每条保留字指令都必须为大写字母且后面要跟随至少一个参数

2、指令按照从上到下,顺序执行

3、#表示注释

4、每条指令都会创建一个新的镜像层并对镜像进行提交

2.2.2 Docker执行DockerFile大致流程
1、docker从基础镜像运行一个容器

2、执行一条指令并对容器作出修改

3、执行类似docker commit的操作提交一个新的镜像层

4、docker再基于刚提交的镜像运行一个新容器

5、执行dockerfile中的下一条指令直到所有指令都执行完成

2.2.3 小总结
从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,

  • Dockerfile是软件的原材料

  • Docker镜像是软件的交付品

  • Docker容器则可以认为是软件镜像的运行态,也即依照镜像运行的容器实例

Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。

1、Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等;

2、Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行 Docker镜像时会真正开始提供服务;

3、Docker容器,容器是直接提供服务的。

2.3 DockerFlie常用保留字指令
FROM:基础镜像,当前镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是FROM

MAINTAINER:镜像维护者的姓名和邮箱地址

RUN:容器在构建时需要运行的命令;有两种格式:shell格式、exec格式;RUN是在docker build时运行
EXPOSE:当前容器对外暴露的端口

WORKDIR:指定在创建容器后,中断默认登录的进来的工作目录,一个落脚点

USER:指定该镜像是以什么样的用户去执行,如果不指定,默认是root

ENV:用来在构建镜像的过程中配置环境变量

VOLUME:数据容器卷,用于数据保存和持久化工作

ADD:将宿主机目录下的文件拷贝进镜像,且会自动处理url和解压tar包

COPY:类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置

CMD:指定容器启动后要干的事
注意:Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换

​ 和RUN之间的区别:CMD是在docker run时运行;RUN是在docker build时运行

ENTRYPOINT:也是用来指定一个容器启动时要运行的命令

​ ENTRYPOINT可以和CMD一起用,一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参。

​ 当指定了ENTRYPOINT后,CMD的含义就发生了变化,不再是直接运行其命令而是将CMD的内容作为参数传递给ENTRYPOINT指令,他两个组合会变成“”
2.4 案例
2.4.1 自定义镜像mycentosjava8
1、要求:Centos具备vim+ifconfig+jdk8

JDK下载的镜像地址

2、编写

​ 准备编写Dockerfile文件(D大写)

FROM centos
#FROM centos:centos7
#实际操作时,centos最新版有问题,这里改成centos7就可以执行成功了
MAINTAINER xie<xie@126.com>ENV MYPATH /usr/local
WORKDIR $MYPATH#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATHEXPOSE 80CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

3、构建

docker build -t 新镜像名字:TAG .

2.4.2 虚悬镜像
1、是什么?

仓库名、标签都是的镜像,俗称dangling image

[root@centos100 test]# docker images
REPOSITORY              TAG       IMAGE ID       CREATED         SIZE

2、写一个案例

2.1、vim Dockerfile

from ubuntu
CMD echo 'action is success

2.2、docker build .

3、查看所有虚悬镜像

docker image ls -f dangling=true

4、删除

docker image prune

2.4.3 自定义镜像myUbuntu
1、要求:Ubuntu+vim+ifconfig+jdk8

2、编写Dockerfile文件

from ubuntu
maintainer xie<xie@163.com>
env MYPATH /usr/local
workdir $MYPATHrun apt-get update
run apt-get install -y vim
run apt-get install -y net-tools
run mkdir /usr/local/java
add jdk-8u171-linux-x64.tar.gz /usr/local/javaenv JAVA_HOME /usr/local/java/jdk1.8.0_171
env JRE_HOME $JAVA_HOME/jre
env CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
env PATH $JAVA_HOME/bin:$PATHexpose 80
cmd echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

3、构建

docker build -t myubuntu:1.8 .

3. Docker微服务实战
3.1 通过IDEA创建一个普通的微服务模块

yml配置

server:
port: 6001

创建一个简单的Controller

@RestController
public class OrderController {@Value("${server.port}")private String port;Random random = new Random();@RequestMapping("/order/docker")public String helloDocker() {return "hello docker " + "\t" + port + random.nextInt(1000000);}@RequestMapping(value = "/order/index", method = RequestMethod.GET)public String index() {return "端口号:" + port + "\t" + random.nextInt(1000000);}
}

其余部分都是springboot自动生成的代码

之后通过maven打包,上传到centos上

3.2 通过Dockerfile发布微服务部署到Docker中
1、编写Dockerfile文件

# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER xigua
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为xigua_docker.jar
# test-0.0.1-SNAPSHOT.jar为打包好的jar文件
ADD test-0.0.1-SNAPSHOT.jar xie_docker.jar
# 运行jar包
RUN bash -c 'touch /xigua_docker.jar'
ENTRYPOINT ["java","-jar","/zzyy_docker.jar"]
#暴露6001端口作为微服务
EXPOSE 6001

2、构建镜像

docker build -t xigua_docker:1.8 .

3、运行容器

docker run -d -p 6001:6001 xigua_docker:1.8

4、访问测试

使用curl 127.0.0.1:6001/order/index可以测试连接

也能直接使用浏览器访问

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s单节点部署(仅master)

1.脚本部署 #/bin/bash hostnamectl set-hostname k8s-master1 echo "172.19.16.10 k8s-master1" >> /etc/hosts systemctl stop firewalld systemctl disable firewalldsed -i s/enforcing/disabled/ /etc/selinux/config setenforce 0swapoff -acat > /…

浅谈AVL树

文章目录 1.介绍1.1定义1.2来源1.3概念1.特性2.平衡因子[ Balance Factor-- _bf ] 2.BST>AVL1.示例分析2.情况分类3.代码剖析3.1左左型-右单旋3.2右右型-左单旋3.3左右型-左右旋3.4右左型:右左旋3.5总图 3.完整代码3.1AVLTree.h3.2Test.cpp 1.介绍 1.1定义 AVL树 – 平衡二…

RabbitMQ(15672) 消息中间件 NOTE

目录 1、初识 RabbitMQ 消息队列 1.1 MQ 四大核心概念 1.2 消息的发送&#xff08;无交换机态&#xff09; 1.3 关于消息自动重新入队 1.3.1 消息的常见应答方法&#xff08;R&#xff09; 1.4 关于 RabbitMQ 的持久化、不公平分发以及预取值 2、RabbitMQ 消息的发布确认…

centos7用docker安装WireGuard教程

PS:本文章用于帮助组建自己内网或者公司组网操作,该教程不涉及翻墙操作. 1、 检查centos内核版本 uname -r2、升级内核 下载脚本上传到服务器运行脚本进行升级内核 链接&#xff1a;https://pan.baidu.com/s/1vYmqVy2St3nFnJWGPIwdOw 提取码&#xff1a;owac 3、安装WireG…

云原生Kubernetes:K8S安全机制

目录 一、理论 1.K8S安全机制 2.Authentication认证 3.Authorization授权 4.Admission Control准入控制 5.User访问案例 6.ServiceAccount访问案例 二、实验 1.Admission Control准入控制 2.User访问案例 3.ServiceAccount访问案例 三、问题 1.生成资源报错 2.镜…

uniapp瀑布流:他的数据是纵向渲染,怎么实现动态上拉加载数据?

不喜勿喷&#xff0c;非常感谢 准备数据&#xff1a;首先&#xff0c;你需要有一些数据&#xff0c;这些数据将会在瀑布流中渲染。你可以将这些数据存储在一个数组中&#xff0c;或者从服务器请求获取。 创建页面&#xff1a;在UniApp中创建一个页面&#xff0c;用于展示纵向…

7.2 怎样定义函数

7.2.1 为什么要定义函数 主要内容&#xff1a; 为什么要定义函数 C语言要求所有在程序中用到的函数必须“先定义&#xff0c;后使用”。这是因为在调用一个函数之前&#xff0c;编译系统需要知道这个函数的名字、返回值类型、功能以及参数的个数与类型。如果没有事先定义&…

多叉树+图实现简单业务流程

文章目录 场景整体架构流程业务界面技术细节小结 场景 这次遇到一个需求,大致就是任务组织成方案,方案组织成预案,预案可裁剪调整.预案关联事件等级配置,告警触发预案产生事件.然后任务执行是有先后的,也就是有流程概念. 整体架构流程 方案管理、预案管理构成任务流程的基础条…

k8s-实战——基于nfs实现动态存储

部署nfs服务 基于Centos7.9版本创建动态存储注意k8s版本应低于v1.24版本高k8s版本ServiceAccount需要手动创建secrets并关联相关sa部署流程 创建NFS共享服务、采用单独的节点用于nfs服务独占安装nfs-utils和rpcbindnfs客户端和服务端都安装nfs-utils包通过部署化脚本安装k8s集群…

nginx 多层代理 + k8s ingress 后端服务获取客户真实ip 配置

1.nginx http 七层代理 修改命令空间&#xff1a; namespace: nginx-ingress : configmap&#xff1a;nginx-configuration kubectl get cm nginx-configuration -n ingress-nginx -o yaml添加如上配置 compute-full-forwarded-for: “true” forwarded-for-header: X-Forwa…

java通过接口转发文件(上传下载)

java接口转发上传的文件 RequestMapping(value "/XXXX/fileUpload", method RequestMethod.POST) public String getFileUpload2(RequestParam("file") MultipartFile file, HttpServletRequest request) public static String hotMapPost3(String ur…

.balckhoues-V-XXXXXXX勒索病毒数据怎么处理|数据解密恢复

引言&#xff1a; 随着网络犯罪的不断演进&#xff0c;勒索病毒已成为当前数字时代的威胁之一&#xff0c;其中包括.balckhoues-V-XXXXXXX勒索病毒。本文将深入介绍.balckhoues-V-XXXXXXX勒索病毒的特点、数据恢复方法以及预防措施&#xff0c;以帮助您更好地理解和应对这一威…

pyqt实现简易浏览器

需要的软件包如下&#xff1a; Package Version ----------------- ------- pip 23.2.1 PyQt5 5.15.9 PyQt5-Qt5 5.15.2 PyQt5-sip 12.12.2 PyQtWebEngine 5.15.6 PyQtWebEngine-Qt5 5.15.2 setuptools 65.5.1…

NPDP产品经理认证怎么报名?考试难度大吗?

PMDA&#xff08;Product Development and Management Association&#xff09;是美国产品开发与管理协会&#xff0c;在中国由中国人才交流基金会培训中心举办NPDP&#xff08;New Product Development Professional&#xff09;考试&#xff0c;该考试是产品经理国际资格认证…

Spring实例化源码解析之ComponentScanAnnotationParser(四)

上一章我们分析了ConfigurationClassParser&#xff0c;配置类的解析源码分析。在ComponentScans和ComponentScan注解修饰的候选配置类的解析过程中&#xff0c;我们需要深入的了解一下ComponentScanAnnotationParser的parse执行流程&#xff0c;SpringBoot启动类为什么这么写&…

WinPcap4.1.3安装失败解决方法,A newer version of winpcap...

WinPcap4.1.3安装失败解决方法&#xff0c;A newer version of winpcap… 如图所示&#xff0c;提示本地安装有更高版本的WinPcap时&#xff0c;按如下操作即可解决。 找到相应文件&#xff0c;扩展名修改成如下&#xff1a; C:\Windows\SysWOW64 的wpcap.dll改成 wpcap.dll.…

tomcat乱码解决

解决乱码 1、修改bin\catalina.bat配置文件 修改tomcat的配置文件&#xff0c;找到tomcat路径下的\bin目录下的catalina.bat文件&#xff0c;修改 set “JAVA_OPTS%JAVA_OPTS% %JSSE_OPTS% -Dfile.encodingUTF-8 -Dsun.jnu.encodingUTF-8 ” 2、修改conf\logging.properties配置…

【Verilog 教程】6.5 Verilog避免Latch

关键词&#xff1a;触发器&#xff0c;锁存器 Latch 的含义 锁存器&#xff08;Latch&#xff09;&#xff0c;是电平触发的存储单元&#xff0c;数据存储的动作取决于输入时钟&#xff08;或者使能&#xff09;信号的电平值。仅当锁存器处于使能状态时&#xff0c;输出才会随着…

使用 Velocity 模板引擎的 Spring Boot 应用

使用 Velocity 模板引擎的 Spring Boot 应用 模板引擎是构建动态内容的重要工具&#xff0c;特别适用于生成HTML、邮件内容、报告和其他文本文档。Velocity是一个强大的模板引擎&#xff0c;它具有简单易用的语法和灵活性。本文将介绍如何在Spring Boot应用中使用Velocity模板…

erlang练习题(三)

题目一 查询列表A是否为列表B的前缀 解答 isPrefix([], List2) -> io:format("A is prefix of B ~n");isPrefix([H1 | ListA], [H2 | ListB]) ->case H1 H2 oftrue -> isPrefix(ListA, ListB);false -> io:format("A is not prefix of B ~n&quo…