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

11.Dockerfile简介

1.是什么?

dockerfile是用来构建镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。

构建三步骤

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

2.dockerfile构建过程解析

1)dockerfile内容的基础知识

  1. 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
  2. 指令按照从上到下,顺序执行
  3. #表示注释
  4. 每条指令都会创建一个新的镜像层并对镜像进行提交

2)Docker执行dockerfile的大致流程

docker从基础镜像运行一个容器

执行一条指令并对容器做出修改

执行类似docker commit的操作提交一个镜像

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

执行dockerfile中的一条指令直到所有指令都执行成功

3)总结

  1. Dockerfile,需要定义一个Dockerile,Dockerle定义了进程需要的一切东西。Dockerile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等:
  2. Docker镜像,在用Dockerfile定义-个文件之后,docker build时会产生个Docker镜像,当运行 Docker镜像时会真正开始提供服务
  3. Docker容器,容器是直接提供服务的。

3.dockerfile常用的保留字指令

参考tomcat8的dockerfile入门:GitHub - docker-library/tomcat: Docker Official Image packaging for Apache Tomcat

  1. 1)FROM——基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from。
  2. 2)MAINTAINER——镜像维护者的名字和邮箱地址(这个镜像是谁做的)
  3. 3)RUN——容器构建的时候需要运行的命令/两种形式(shell格式、exec格式)/RUN是在docker build的时候运行
  4. 4)EXPORT——当前容器对外暴露的接口
  5. 5)WORKDIR——指定在创建容器后,终端默认登录的进来的工作目录,落脚点
  6. 6)USER——指定该镜像以什么样的用户去执行,如果不指定,默认为root
  7. 7)ENV——设置配置过程中的环境变量,可以在后续的任何RUN指令使用,这就如同在命令前面指定了环境变量前缀一样,也可以在其他指令中直接使用这些环境变量。
  8. 8)ADD——将宿主机目录下的文件拷贝进镜像且会自动处理url和解压tar压缩包
  9. 9)COPY——类似于ADD,拷贝文件和目录到镜像中。
  10. 10)VOLUME——相当于-v参数
  11. 11)CMD —
    1. 指定容器启动之后要干的事情
    2. 注意
      1. dockerfile中可以多个cmd指令,但是只有一个生效,cmd会被docker run之后的参数替换
    3. 它和RUN命令的区别

  1. ENTPYPOINT
    1. 类似于cmd指令,但是ENTPYPOINT不会被docker run后面的指令覆盖,而且这些指令行参数会被当做参数送给ENTPYPOINT指令指定的程序

实际操作1:

Centos7镜像具备vim+ifconfig+jdk24

下面是我运行的centos的容器,可以发现没有这些东西

编写

首先要去下载一个jdk24包

上传到我们的服务器上

1.编写

[root@iZgw05jp5bgqy10yqsb1heZ myfile]# cat dockerfile

FROM centos

MAINTAINER yyyy@123.com

ENV MYPATH /usr/local

WORKDIR $MYPATH

#安装vim编辑器

RUN yum -y install vim

#安装ifconfig命令查看

RUM yum -y install net-tools

#安装java及lib库

RUN yum -y install glibc.i686

RUN mkdir /usr/local/java

#ADD是相对路径jar,需要把jdk-24_linux-x64_bin.tar.gz添加到与dockerfile文件同一文件夹下

ADD jdk-24_linux-x64_bin.tar.gz /usr/local/java/

#配置java环境变量

ENV JAVA_HOME /usr/local/java/jdk-24_linux-x64_bin

ENV PATH $JAVA_HOME/bin:$PATH

ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

EXPOSE 80

CMD echo $MYPATH

CMD echo "success---------------ok"

CMD /bin/bash

报错了,这里是因为指令错误

报错,这里是因为更新源的问题

这里我修改dockerfile文件,提前修改源的地址

#备份一下原来的源文件

RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

#换源

RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

清理缓存并重新生成

RUN yum clean all

RUN yum makecache

再次报错,原来是备份的地址出错了,查看一下正确的地址

原来

重新修改了一下

#备份一下原来的源文件

RUN mv /etc/yum.repos.d/CentOS-Linux-BaseOS.repo /etc/yum.repos.d/CentOS-Base.repo.backup

#换源

RUN curl -o /etc/yum.repos.d/CentOS-Linux-BaseOS.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

清理缓存并重新生成

RUN yum clean all

RUN yum makecache

再次报错

这里还是因为源的原因,所以我这里直接删除所有旧的源

这里我用的centos8,与以往的centos7还源不同,

mv /etc/yum.repos.d/CentOS-Linux-BaseOS.repo CentOS-Linux-BaseOS.repo.bak

mv /etc/yum.repos.d/CentOS-Linux-AppStream.repo CentOS-Linux-AppStream.repo.bak

mv /etc/yum.repos.d/CentOS-Linux-Extras.repo CentOS-Linux-Extras.repo.bak

后面实在没找到问题,我重新搞了一个容器,实操换源

尝试yum -y install vim

成功了

总结命令

#备份

mkdir /etc/yum.repos.d/repo.backup

mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repo.backup

下载阿里云的源

curl -o /etc/yum.repos.d/CentOS-Linux-BaseOS.repo http://mirrors.aliyun.com/repo/Centos-8.repo

上面那个错误是我忘记把中文注释了

下面是成功建立新镜像

docker images

可以看到构建成功

进去看有没有java环境,发现没有,我检查发现,因为环境变量的路径配错了,修改为正确的环境变量就有了

什么是虚悬镜像?

就是在构建或者删除镜像的时候出现一些错误,导致仓库和标签都是none

单独查看虚悬镜像

docker image ls -f dangling=true

删除虚悬镜像

docker image prune

http://www.lryc.cn/news/602720.html

相关文章:

  • 神经网络CNN、RNN、Transform
  • Avalonia的自定义边框窗口
  • opencv 模块裁剪 按需安装指定模块
  • 火线、零线、地线
  • ICPC 2024 网络赛(I)
  • 网络与信息安全有哪些岗位:(3)安全运维工程师
  • C++算法实例精讲
  • Solidity基础(教程④-ERC-4626收益金库)
  • nvim编辑器
  • unisS5800XP-G交换机配置命令之登录篇
  • Parasoft Virtualize用服务虚拟化加速银行系统的软件测试
  • uni-app switch(开关选择器) BUG
  • [免费]【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts)【论文+源码+SQL脚本】
  • 从像素到频率:OpenCV傅里叶变换
  • Java面试宝典:MySQL事务和事务的隔离级别
  • map循环遍历
  • 学习 字节UI TARS GUI Agent
  • 为什么bert是双向transformer
  • 无人机气动设计模块解析
  • html转word下载
  • NVDB-CAVD 杯汽车信息安全系列赛事
  • 基于Java的汽车商城系统设计与实现
  • 汽车膨胀水箱(副水箱)液位传感器的作用
  • 小鹏汽车AI测试
  • stm32开发 -- TFTLCD相关
  • API产品升级丨全知科技发布「知影-API风险监测平台」:以AI重构企业数据接口安全治理新范式
  • JavaWeb 入门:HTML 基础与实战详解(Java 开发者视角)
  • 分数函数的实用性及与数据密度的关系解析
  • ffmpeg-7.1.1 下载安装 windows 版,MP4 转 m3u8 切片,遇到报错 Unrecognized option ‘vbsf‘的解决办法
  • SD卡简介与驱动开发