高可用篇_A Docker容器化技术_IV Dockerfile的基本概念和应用

原创作者:田超凡(程序员田宝宝)

版权所有,引用请注明原作者,严禁复制转载

DockerFile 解析

一个镜像文件到底是如何创建?

  1. dockerfile 描述出镜像文件需要的一些依赖配置和环境变量 执行命令
  2. 将我们dockerfile 文件打包成一个镜像文件
  3. 直接使用我们的容器运行到该镜像文件。

步骤:

  1. 需要手动编写一个dockerfile文件
  2. 将该dockerfile  docker build 自定义成一个镜像文件
  3. docker run 运行容器

Centos镜像文件

docker run -it centos

DockerFile编写规范

A.#描述注释

B.指令必须要大写,后面至少需要带至少一个参数;

C.指令是按照从上到下,顺序执行;

DockerFile指令

  1. FROM 指定父镜像:  基于哪个镜像image构建  指定基础镜像,必须为第一个命令
  2. MAINTAINER :维护者
  3. RUN: 容器创建的时候执行一段命令   构建镜像时执行的命令
  4. ADD: 将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
  5. COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
  6. CMD:构建容器后调用,也就是在容器启动时才进行调用。 .sh执行文件
  7. ENV: 设置环境变量
  8. EXPOSE: 指定于外界交互的端口
  9. VOLUME  用于指定持久化目录
  10. WORKDIR 设置进入容器时的路径 默认访问的目录

Tomcat-----jdk环境

进入tomcat 容器----/data

redis容器/data

/

DockerFile案例

Base镜像(scratch) docker hub中的镜像都是通过base镜像中安装和配置需要的软件构建的。

构建自己centos镜像

docker run -it centos

  1. 需求定制修改centos根目录;
  2. 实现支持vim插件;

yum -y install vim

  1. 需要自己制作一个dockerfile文件
  2. 继承docker hub中的centos
  3. 在docker hubcentos 上加入以下两个功能

A.进入容器中 默认访问目录/usr

B.实现支持vim插件

需要将该dockerfile文件打包成一个镜像文件 交给我们容器执行

定制CentOS镜像

FROM  centos

MAINTAINER tcf-tcf

ENV  MYPATH /usr

WORKDIR $MYPATH

RUN yum -y install vim

EXPOSE 80

CMD /bin/bash

Dockerfile→使用docker 将该Dockerfile实现打包成镜像文件→

容器运行该镜像文件。

docker build---将该Dockerfile实现打包成镜像文件

将该dockerfile文件上传到linux服务器中

使用docker build -f Dockerfile -t mycs:1 .

Dockerfile ------配置文件

mycs----打包镜像文件名称

1 tag 版本号码

docker run -it mycs:1

将springboot项目打包部署
  1. 基于docker原生方式 部署我们的springboot项目

Dockerfile

2.dockercompose----- 容器编排技术

springboot项目----变成镜像文件---容器运行

  1. 将我们springboot项目---打成一个jar包

2.定义dockerfile文件-----描述出springboot项目 配置依赖和环境变量

JDK

注意:springboot内置嵌入我们的tomcat服务器 所以不需要额外的tomcat容器来

运行。

原生方式运行我们的jar包

Java- jar指令

1需要先将我们外部jar,拷贝到容器中

2容器运行成功执行java -jar

3将该dockerfile文件打包成镜像文件-

步骤:

  1. 将springboot项目打包;
  2. 制作dockerfile文件;
  1. 继承我们的jdk环境
  2. 将我们本地的jar包拷贝到容器中
  3. Java -jar

  1. 将dockerfile文件打包成镜像文件;
  2. 运行该镜像文件即可;

将springboot项目打包

mvn clean package

制作dockerfile文件
# 基础镜像使用javaFROM java:8# 作者MAINTAINER www.tcf.com# VOLUME 指定了临时文件目录为/tmp# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmpVOLUME /tmp# jar包添加到容器中并更名为tcf.jarADD tcf-thymeleaf-1.0-SNAPSHOT.jar tcf.jar# 运行jarRUN bash -c 'touch /tcf.jar'ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/tcf.jar"]#暴露8080端口EXPOSE 8080

打包成镜像文件

docker build -f Dockerfile -t tcf-member:1 .

docker build -f Dockerfile -t tcf-member:1 .

启动容器

docker run -p 8070:8080   tcf-member:1

本文部分素材转载自蚂蚁课堂

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

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

相关文章

glib交叉编译

Glib交叉编译 逸一时,误一世。 —— 田所浩二「夏夜银梦」 交叉编译 GLib 涉及到在一个平台上生成能够在另一个平台上运行的目标文件。在这种情况下,我们将会在一台主机(通常是开发机器)上使用交叉编译工具链来构建 GLib 库&#…

从历年315曝光案例,看APP隐私合规安全

更多网络安全干货内容:点此获取 ——————— 随着移动互联网新兴技术的发展与普及,移动APP的应用渗透到人们的衣食住行方方面面,衍生出各类消费场景的同时,也带来了无数的个人隐私数据泄露、网络诈骗事件。 历年来&#xff…

grpc python实现异步调用(不用grpc异步接口)

grpc python实现异步调用[不用grpc异步接口] 1.infer_session.proto2.生成Python库函数3.infer_session_server.py4.infer_session_client.py5.common.py6.运行7.输出 grpc同步调用更简单,但是在处理复杂任务时,会导致请求阻塞,影响吞吐。当然,可以采用grpc异步接口解决,本方采…

机器人在果园内行巡检仿真

文章目录 创建工作空间仿真果园场景搭建小车模型搭建将机器人放在仿真世界中创建工作空间 mkdir -p ~/catkin_ws/src cd ~/catkin_ws仿真果园场景搭建 cd ~/catkin_ws/src git clone https://gitcode.com/clearpathrobotics/cpr_gazebo.git小车模型搭建 DiffBot是一种具有两个…

【English Learning】Day16

2024/03/18 和小录打卡的第16天 目录 Words & phrases Words & phrases weakness a sign of weakness 懦弱的表现strengthens and weaknesses 优点和缺点a weakness for 对---迷恋qualify qualify for the Olympics 取得参加奥运会资格gloomy a gloomy room 昏暗的房间…

Java 快速幂

在Java中,实现快速幂算法可以极大地提高计算大整数幂次的效率。快速幂算法的基本思想是,将幂次转化为二进制形式,然后利用二进制位的特性,通过不断平方和乘法操作来得到结果。 以下是一个Java实现的快速幂算法: java…

Vmware虚拟机配置虚拟网卡

背景 今天同事咨询了我一个关于虚拟机的问题,关于内网用Vmware安装的虚拟机,无法通过本机访问虚拟上的Jenkins的服务。   验证多次后发现有如下几方面问题。 Jenkins程序包和JDK版本不兼容(JDK1.8对应Jenkins不要超过2.3.57)虚…

信号量——生产消费者模型

前文 在这一篇博客(信号量博客)中我曾经提及过信号量的知识,而当对信号量进行提炼总结时,大致是以下三点: 1. 信号量本质是一个计数器(代表资源的数量) 2. 申请信号量本质就是对资源的一种预定机…

final关键字

final关键字 基本介绍final使用细节 基本介绍 final 中文意思:最后的,最终的。 final 可以修饰类、属性、方法和局部变量。 在某些情况下会使用到final: 1) 当不希望类被继承时,可以用 final 修饰; // 如…

Python--成员方法、@staticmethod将成员方法静态化、self参数释义

在 Python 中,成员方法是指定义在类中的函数,用于操作类的实例对象。成员方法通过第一个参数通常命名为 self,用来表示调用该方法的实例对象本身。通过成员方法,可以实现类的行为和功能。 成员方法的定义 在类中定义成员…

深入理解数据结构树

文章目录 一、树是什么二、树的相关概念三、树常见类型四、树的应用应用场景五、树的代码实现 一、树是什么 数据结构树是一种非线性的数据结构,它由节点和边组成。树的节点之间通过边连接,形成层次结构。树的顶部节点称为根节点,每个节点可以…

【Linux】Linux上代码的编译与调试

目录 Linux上常用的编译器gcc\g 如何使用gcc/g 编译过程: 如何使用gcc编译? 进行预处理 进行编译 进行汇编 进行链接 函数库 函数库的分类 gcc选项 Linux调试器-gdb的使用 gdb的常用参数 Linux项目自动化构建工具make/Makefile 原理 利用…

MYSQL日志 redo_log更新流程 bin_log以及bin_log数据恢复

Redo_log写入策略 Redo log的Innodb_flush_log_at_trx_commit:: 这个参数有三个取值 取值为0:每次事务提交时,只是把redo_log留在 redo log buffer中,宕机会丢失数据; 取值为1(默认值):每次事…

1.中医学习-总论

目录 1.为什么要学中医 2.什么是中医 介绍 中医例子1: 中医例子2: 中医最高境界“大道至简” 中医讲究的是本质 中医核心:阴阳、表里、寒热、虚实 ​编辑医不叩门 3.阴阳 1.一天中的阴阳 2.一年中的阴阳 3.阴阳之间的关系 4.阴阳四季的变化 …

解决:visio导出公式为pdf图片乱码问题

今天需要将Visio编辑好的以后的图输出pdf,但是点击保存后公式部分一直乱码,如下图所示 保存为pdf后会变成: 解决方案:保存时点击文件下方的快速打印,存到桌面,不要直接点击保存

代码随想录算法训练营第二十五天|216.组合总和III,17.电话号码的字母组合

216.组合总和III 题目 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。 说明: 所有数字都是正整数。 解集不能包含重复的组合。 示例 1: 输入: k 3, n 7 输出: [[1,2,4]] 示例 2: 输入…

24计算机考研调剂 | 【官方】山东师范大学(22自命题)

山东师范大学2024年拟接收调剂 考研调剂信息 调剂专业目录如下: 计算机技术(085404)、软件工程(085405) 补充内容 我校2024年硕士研究生调剂工作将于4月8日教育部“中国研究生招生信息网”(https://yz.ch…

【模板题】:并查集

【模板】并查集 题目描述 如题,现在有一个并查集,你需要完成合并和查询操作。 输入格式 第一行包含两个整数 N , M N,M N,M ,表示共有 N N N 个元素和 M M M 个操作。 接下来 M M M 行,每行包含三个整数 Z i , X i , Y i Z_i,X_i,Y_i Zi​,Xi​,Yi​ 。 当 Z i …

mysql 常见问题

1、count(*) 、 count(1) 和 count(字段)区别 在MySQL中,COUNT(*)、COUNT(1) 和 COUNT(字段) 是用于统计行数的函数,它们的主要区别在于: COUNT(*):会统计符合条件的所有行的数量,不管这些行中…

深入了解JVM底层原理

一、JVM内存结构 1、方法区:存储编译后的类、常量等(.class字节码文件) 2、堆内存:存储对象 3、程序计数器:存储当前执行的指令地址(计算机处理器(CPU)正在执行的下一条指令在内存…