当前位置: 首页 > news >正文

Dockerfile讲解

Dockerfile

  • 1. 构建过程解析
  • 2. Dockerfile常用保留字指令
  • 3. 案例
    • 3.1. 自定义镜像mycentosjava8
    • 3.2. 虚悬镜像
  • 4. Docker微服务实战

dockerfile是用来构建docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
dockerfile定义了进程需要的一切东西,涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等;
image.png
官网:https://docs.docker.com/engine/reference/builder/

UnionFS(联合文件系统): Unin文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a sindle virtual flesystem)。 Union文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

1. 构建过程解析

构建三步骤:

  1. 编写dockerfile文件
  2. docker build命令构建镜像
  3. docker run依镜像运行容器实例

基础知识:

  1. 每条保留字指令都必须为大写字母且后面要跟随至少一个参数

image.png
像图中这种ADD,ENV,COPY等就叫保留字指令

  1. 指令按照从上到下,顺序执行
  2. #表示注释
  3. 每条指令都会创建一个新的镜像层并对镜像进行提交

docker 执行 dockerfile 的大致流程:

  1. docker从基础镜像运行一个容器
  2. 执行一条指令修改容器
  3. 执行类似docker commit的操作提交一个新的镜像层
  4. docker再基于刚提交的镜像运行一个新容器
  5. 执行dockerfile中的下一条指令直到所有指令执行完成
  • docker commit 提交容器副本使之成为一个新的镜像:docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]

使用dockerfile构建docker镜像,再用镜像生成容器

2. Dockerfile常用保留字指令

参考tomcat8的Dockerfile入门 https://github.com/docker-library/tomcat/blob/master/9.0/jdk8/corretto-al2/Dockerfile
image.png

  1. FROM

基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from
如.
image.png

  1. MAINTAINER

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

  1. RUN

容器构建时需要运行的命令,在 docker build时运行
有两种格式:

  • shell格式

RUN <命令行命令>
命令行命令等同于在终端操作的shell命令

例: RUN yum -y install vim

  • exec格式

RUN [“可执行文件”,“参数1",“参数2”]

例:RUN [“./test.php”,“dev”,“offline”] ,等价于 RUN ./test.php dev offline

如.
image.png

  1. EXPOSE

当前容器对外暴露出的端口

  1. WORKDIR

指定在创建容器后,终端默认登录进来的工作目录,一个落脚点
image.png
如上图这个/,就是默认的工作目录
如.
image.png

  1. USER

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

  1. ENV

用来在构建镜像过程中设置环境变量

ENV MY_PATH /usr/mytest
这个环境变量可以在后续的任何RUN指令中使用,如同在命令前指定了环境变量前缀一样,也可以在其他指令中直接使用这些环境变量

例:WORKDIR $MY_PATH 指定了登录后的默认工作目录为/usr/mytest

如.
image.png

  1. VOLUME

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

  1. ADD

将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
相比于COPY命令多了个解压功能

  1. CMD

指定容器启动后的要干的事情,与RUN的区别是CMD时在docker run时运行
CMD指令的格式和RUN相似,也是两种格式:

  • shell格式:CMD <命令>
  • exec格式:CMD [“可执行文件”,“参数1",“参数2” …]
  • 参数列表模式:CMD [“参数1",“参数2” …] 在指定了ENTRYPOINT指令后,用CMD指定具体的参数

Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换

如.
image.png

  1. ENTRYPOINT

格式:ENTRYPOINT [“”,“”,“”,…]

也是用来指定一个容器启动时要运行的命令
类似于CMD指令,但是ENTRYPOINT不会被docker run 后面的命令覆盖,而且这些命令行参数会被当作参数送给ENTRYPOINT指令指定的程序

ENTRYPOINT可以和CMD一起用,一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参。
当指定了ENTRYPOINT后,CMD的含义就发生了变化,不再是直接运行其命令而是将CMD的内容作为参数传递给ENTRYPOINT指令,他两个组合会变成"<ENTRYPOINT>"<CMD>"
image.png

3. 案例

3.1. 自定义镜像mycentosjava8

centos7镜像具备vim+ifconfig+jdk8

  1. 创建文件夹myfile,将jdk压缩包传到当前目录下

jdk压缩包要与Dockerfile文件在同一目录下
image.png

  1. 创建Dockerfile文件,编辑内容]

Dockerfile文件中的D一定是大写

FROM centos:7
MAINTAINER zy<2351950143@qq.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-8u341-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u341-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_341
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
  1. 构建镜像

最后有一个点别忘了

docker build -t centosjava8:1.0 .

构建完成:
image.png
查看创建的镜像:
image.png

  1. 运行镜像
docker run -it 镜像ID /bin/bash

image.png

3.2. 虚悬镜像

仓库名和版本号都为none的就是虚悬镜像
image.png
查看所有的虚悬镜像

docker image ls -f dangling=true

删除所有虚悬镜像

docker image prune

image.png

4. Docker微服务实战

  1. 新建一个普通微服务模块

端口为6001,只有一些简单的接口
image.png
本机测试没问题
image.png
打包并把他放进虚拟机目录里
image.png

  1. 通过dockerfile发布微服务部署到docker容器

编写Dockerfile文件:

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

构建:
别忘了最后的点

docker build -t zy_docker:1.1 .

image.png
image.png

运行容器:

docker run -d -p 6001:6001 661bf8447553

image.png

测试:
image.png

相关文章:

Dockerfile讲解

Dockerfile 1. 构建过程解析2. Dockerfile常用保留字指令3. 案例3.1. 自定义镜像mycentosjava83.2. 虚悬镜像 4. Docker微服务实战 dockerfile是用来构建docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本。 dockerfile定义了进程需要的一切东西&…...

Ansible及其优势是什么?

Ansible是一款极其简单的开源的自动化运维工具&#xff0c;基于Python开发&#xff0c;集合了众多运维工具(puppet, cfengine, chef, func, fabric)的优点。实现了批量系统配置&#xff0c;批量程序部署&#xff0c;批量运行命令等功能。同时Ansible是基于模块工作&#xff0c;…...

使用群晖Docker搭建HomeAssistant并实现异地公网访问家中智能设备

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 使用群晖Docker搭建HomeAssistant并实现异地公网访问 文章目录 使…...

重塑生成式AI时代数据战略,亚马逊云科技re:Invent大会Swami主题演讲

re:lnvent 2023 Swami Sivasubramanian主题演讲&#xff0c;数据、AI和人类共进共生&#xff0c;重塑生成式AI时代的数据战略。 赋能人才加持生成式AI必备能 生成式AI创新中心&#xff1a;解决生成式AI工程化挑战。 Amazon Bedrock平台PartyRock&#xff1a;生成式AI应用程序实…...

【恋上数据结构】哈夫曼树学习笔记

哈夫曼树 哈夫曼编码&#xff08;Huffman Coding&#xff09; 哈夫曼编码&#xff0c;又称为霍夫曼编码&#xff0c;它是现代压缩算法的基础 假设要把字符串 [ABBBCCCCCCCCDDDDDDEE] 转成二进制编码进行传输。 可以转成 ASCII 编码 (6569&#xff0c;10000011000101) &…...

前端下拉框select标签的插件——select2.js

本文采用的是select2 版本&#xff1a;Select2 4.0.6-rc.1。 可以兼容IE8及以上。亲测过。 官网&#xff1a;Getting Started | Select2 - The jQuery replacement for select boxes 一、认识select2.js 1、使用插件&#xff0c;首先要引入别人的插件了&#xff0c;你可以选…...

【MySQL的基本命令{DML 和 DDL}】

MySQL的基本命令 {DML 和 DDL} MySQL的基本命令展示所有数据库展示某个数据库中所有的表切换到某个数据库查看当前在哪个数据库查询一张表的全部数据新建一个数据库新建一张表插入一条数据删除一个表删除一个库描述表的信息展示表的创建sql代码展示库的创建sql代码导出数据 &am…...

unity3d模型中缺失animation

在 模型的Rig-Animationtype 设置成Legacy https://tieba.baidu.com/p/2293580178...

搭建自己的wiki知识库【转】

有前端基础&#xff0c;会Markdown、会HTML和CSS&#xff0c;选择 Hexo 有Vue基础可以选择 vuePress 或者 vitePress 会Go可以选择 Hugo 会Rust可以选择 Zola 会Ruby可以选择 Jekyll 会PHP可以考虑使用 WordPress 其他开源项目&#xff1a;docsify、GitBook 详见&#xff1a;如…...

【笔记】常用的Linux命令之解压缩:tar、zip、rar 命令

1、tar 常用压缩和解压缩 # 压缩文件 file1 和目录 dir2 到 test.tar.gz tar -zcvf test.tar.gz file1 dir2 # 解压 test.tar.gz&#xff08;将 c 换成 x 即可&#xff09; tar -zxvf test.tar.gz 额外知识&#xff1a;查看压缩文件内容 # 列出压缩文件的内容 tar -ztvf test…...

谈谈MYSQL索引

基本介绍 索引是帮助MySQL高效获取数据的数据结构&#xff0c;主要是用来提高数据检索的效率&#xff0c;降低数据库的IO成本&#xff0c;同时通过索引列对数据进行排序&#xff0c;降低数据排序的成本&#xff0c;也能降低了CPU的消耗。 通俗来说, 索引就相当于一本书的目录,…...

线程中出现异常的处理

目录 前言 正文 1.线程出现异常的默认行为 2.使用 setUncaughtExceptionHandler() 方法进行异常处理 3.使用 setDefaultUncaughtExceptionHandler() 方法进行异常处理 4.线程组内处理异常 5.线程异常处理的优先性 总结 前言 在紧密交织的多线程环境中&#xff0c;异…...

点击元素以外的事件监听

在项目中&#xff0c;我们经常会遇到需要监听目标元素以外的区域被点击或鼠标移入移出等需求。 例如下面我们有一个表格里面嵌套表单的组件 我希望点击n行的时候&#xff0c;n行的元素变成表单元素进行输入或者选择&#xff0c; 当我点击其他其他区域n行又会恢复成数据展示…...

猫头虎分享ubuntu20.04下VSCode无法输入中文解决方法

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…...

tcpdump使用心得

参考原文 https://danielmiessler.com/p/tcpdump/ 几个用例 tcpdump -i eth0 显示eth0网卡当前所有的抓包情况eth0是网卡名&#xff0c;可以通过ifconfig获得&#xff0c;也可以通过 tcpdump -D 显示当前可以监听的网卡 -i 参数表示接口&#xff0c;后跟要监听的网卡 tcpdu…...

QJsonObject 是 Qt 框架中用于表示 JSON 对象的类

QJsonObject 是 Qt 框架中用于表示 JSON 对象的类。 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;常用于在不同平台和语言之间传输和存储数据。QJsonObject 类提供了一种方便的方式来创建、解析和操作 JSON 对象。 以下是…...

kafka3.6.0部署

部署zk https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.9.1/apache-zookeeper-3.9.1.tar.gz tar -xf apache-zookeeper-3.9.1.tar.gz -C /apps cd /apps/ && ln -s apache-zookeeper-3.9.1 zookeeper 修改配置bash grep -vE ^$|^# conf/zo…...

MybatisPlus批量插入(伪批量),增强为真实批量插入

项目基于优秀开源项目&#xff1a;若依 项目背景&#xff1a;项目中牵扯到数据批量导入&#xff0c;为提高性能&#xff0c;先考虑将MybatisPlus伪批量插入增强为真实批量插入 MybatisPlus源码&#xff1a; MybatisPlus支持批量插入&#xff0c;但是跟踪源码发现底层是将批量…...

【零基础入门Python】Python If Else流程控制

✍面向读者&#xff1a;所有人 ✍所属专栏&#xff1a;零基础入门Pythonhttps://blog.csdn.net/arthas777/category_12455877.html Python if语句 Python if语句的流程图 Python if语句示例 Python If-Else Statement Python if else语句的流程图 使用Python if-else语句 …...

新手零基础学习彩铅画,彩铅快速入门教程合集

一、教程描述 画画是很美好的一件事情&#xff0c;你可以把你想到的&#xff0c;或者看到的都画下来&#xff0c;照相机可以拍下任何你看到的&#xff0c;但是你想到的任何事物&#xff0c;只能通过绘画的方式来表达。本套教程是非常不错的&#xff0c;彩铅的小视频教程&#…...

如何在Windows上快速安装安卓应用:APK Installer终极指南

如何在Windows上快速安装安卓应用&#xff1a;APK Installer终极指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经想要在Windows电脑上运行安卓应用&…...

数据分析实习面试准备全攻略:专业知识+项目深挖+行为面试,职卓科技的面试辅导体系

摘要数据分析实习面试通常包含三大模块&#xff1a;专业知识考察&#xff08;SQL、Python、统计学基础&#xff09;、项目深挖&#xff08;业务理解、技术选择、问题解决&#xff09;、行为面试&#xff08;团队协作、学习能力、职业规划&#xff09;。很多学员在面试中表现不佳…...

从极坐标栅格到地面点云:一种基于坡度与邻域一致性的分割实践

1. 极坐标栅格构建&#xff1a;自动驾驶的"地面扫描仪" 想象你正在玩一款赛车游戏&#xff0c;车辆需要自动识别哪些是能开的平坦路面&#xff0c;哪些是必须绕开的障碍物。现实中自动驾驶车辆面临同样的挑战&#xff0c;而极坐标栅格就是它的"地面扫描仪"…...

【力扣100题】22. 矩阵置零

一、题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0&#xff0c;则将其所在行和列的所有元素都设为 0。请使用原地算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]]示例 2&#xff1a; …...

从零到一:在STM32F103上构建FatFs文件系统并驱动W25Q64 Flash

1. 硬件准备与环境搭建 在开始构建FatFs文件系统之前&#xff0c;我们需要先准备好硬件环境。我手头用的是STM32F103C8T6最小系统板&#xff0c;搭配一块W25Q64 Flash芯片。这块Flash芯片容量为8MB&#xff0c;通过SPI接口通信&#xff0c;正好适合用来做文件存储介质。 首先得…...

Meta发布最大视觉模型:DSG架构如何重构视觉理解范式

1. 项目概述&#xff1a;这不是一次普通更新&#xff0c;而是一次视觉理解边界的重写“Meta Just Updated the Largest Computer Vision Model in History”——这个标题乍看像科技媒体的快讯标题&#xff0c;但如果你在CV领域摸爬滚打过几年&#xff0c;第一反应不是点开链接&…...

从ShareGPT项目拆解现代全栈开发:Next.js、Serverless与Chrome扩展实战

1. 项目概述与核心价值如果你和我一样&#xff0c;经常在ChatGPT里进行一些天马行空的对话&#xff0c;从构思一部科幻小说的世界观&#xff0c;到一步步推导一个复杂的编程问题&#xff0c;再到让它扮演苏格拉底和你辩论哲学&#xff0c;这些对话记录本身就是宝贵的数字资产。…...

ctf show web入门54

这道题目是 ctf.show 中典型的 命令执行&#xff08;RCE&#xff09;绕过 题。虽然看起来过滤非常严密&#xff0c;但只要理清了它的过滤规则&#xff0c;就能找到生存空间。过滤规则拆解 代码通过 preg_match 过滤了以下内容&#xff08;/i 表示不区分大小写&#xff09;&…...

初次使用Taotoken平台从注册到完成API调用的全程指引

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 初次使用Taotoken平台从注册到完成API调用的全程指引 对于初次接触大模型API的开发者而言&#xff0c;从注册平台到成功发出第一个…...

Sketch Find and Replace插件终极指南:如何快速批量替换设计文本

Sketch Find and Replace插件终极指南&#xff1a;如何快速批量替换设计文本 【免费下载链接】Sketch-Find-And-Replace Sketch plugin to do a find and replace on text within layers 项目地址: https://gitcode.com/gh_mirrors/sk/Sketch-Find-And-Replace 你是否曾…...