DockerFile文件详细解析

这篇具有很好参考价值的文章主要介绍了DockerFile文件详细解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

DockerFile文件详细解析

所有文章不设限,我们相遇偶然,相散坦然,互不打扰,各自安好,向阳而生

致敬尚硅谷周阳老师,此处内容迁移学习来自于阳哥!

DockerFile是什么

DockerFile是用来构建Docker镜像的文本文件,是一条条构建镜像所需要的指令和参数构成的脚本

dockerfile文件详解,运维部署,docker

构建三步骤

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

DockerFile构建过程解析

DockerFile内容基础知识

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

Docker执行DockerFile的大致流程

  1. Docker从基础镜像运行一个容器
  2. 执行一条指令并且对于容器做出修改
  3. 执行类似docker commit的操作提交一个新的镜像层
  4. Docker再基于刚提交的镜像运行一个新的容器
  5. 执行DockeFile 中的下一条指令直到所有指令都执行完成

小总结

从应用软件的角度而言,DockerFile,Docker镜像和Docker容器分别代表了软件的三个不同阶段

  • DockerFile是软件的原材料
  • Docker镜像是软件的交付品
  • Docker容器则可以认为是软件镜像的运行状态,也是依照镜像运行的容器实例

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

dockerfile文件详解,运维部署,docker

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

DockerFile常用保留字指令

FROM指令

基础镜像,当前镜像是基于那个镜像的,指定一个已经存在的镜像作为模版,第一条必须是from

MAINTAINER 指令

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

RUN 指令

  • 第一种 shell格式

    RUN yum -y install vim

  • 第二种

    exec格式 RUN[“可执行文件”,“参数1”,“参数2”]

RUN实在docker bilid时进行运行

EXPOSE 指令

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

WORKDIR 指令

指定在创建容器后,终端默认进入后的目录

USER 指令

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

ENV 指令

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

ADD 指令

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

COPY 指令

类似ADD,拷贝文件和目录到镜像中

将从构建上下文目录中的<源路径> 的文件/目录复制到新的一层的镜像内的<目标路径>位置

  • 第一种写法

    COPY src dest

  • 第二种写法

    COPY [“src”,‘dest’]

    <src源路径>:源文件或者源目录

    <dest目标路径>:容器内指定的路径,该路径不用事先建好,路径不存在,会自动创建

VOLUME 指令

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

dockerfile文件详解,运维部署,docker

实操案例

自定义镜像mycentosjava8

要求

centos7镜像具备vim+ifconfig+jdk8

jdk下载地址

https://mirrors.yangxingzhen.com/jdk/jdk-8u192-linux-x64.tar.gz

自己可以先下载到宿主机

[root@WangHui WangHui]# wget  https://mirrors.yangxingzhen.com/jdk/jdk-8u192-linux-x64.tar.gz -P  /usr/local/src/

dockerfile文件详解,运维部署,docker

编写

注意啊,镜像加版本号,否则会报错

Dockerfile中 RUN yum -y install vim失败Cannot prepare internal mirrorlist: No URLs in mirrorlist

#拉取基础镜像
FROM centos:7
#设置用户名(非必选)
MAINTAINER wanghui <25459384987@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
#将安装包添加到容器中
ADD jdk-8u192-linux-x64.tar.gz   /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_192
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:$PATH
#暴露端口号
EXPOSE 80
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash
构建

注意啊,下载jdk的时候没有放到和DockerFile同一路径,这个后期会报错,尽管你的DockerFile配置的是绝对路径也没用用的

所以必须安装包和DockerFile同一路径

[root@WangHui WangHui]# cp /usr/local/src/jdk-8u192-linux-x64.tar.gz ./  
[root@WangHui WangHui]# ls
docker-client         docker-engine  docker-latest-logrotate     test2.tar
docker-client-latest  DockerFile     docker-logrotate
docker-common         docker-latest  jdk-8u192-linux-x64.tar.gz
[root@WangHui WangHui]# docker build -f ./DockerFile -t mycentosjava8:1.0.0 .
[+] Building 24.3s (3/10)                                                                              
 => [internal] load build definition from DockerFile                                              0.1s
 => => transferring dockerfile: 834B                                                              0.1s
 => [internal] load .dockerignore                                                                 0.1s
 => => transferring context: 2B                                                                   0.1s
 => [internal] load metadata for docker.io/library/centos:latest                                 15.2s
 => [1/6] FROM docker.io/library/centos@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55  9.0s
 => => resolve docker.io/library/centos@sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55  0.0s
 => => sha256:a1d0c75327776413fa0db9ed3adcdbadedc95a662eb1d360dad82bb913f8a1d1 45.09MB / 83.52MB  9.0s
 => => sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177 762B / 762B        0.0s
 => => sha256:a1801b843b1bfaf77c501e7a6d3f709401a1e0c83863037fa3aab063a7fdb9dc 529B / 529B        0.0s
 => => sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6 2.14kB / 2.14kB    0.0s
 => [internal] load build context                                                                 9.0s
 => => transferring context: 57.94MB 
查看
[root@WangHui WangHui]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED         SIZE
mycentosjava8   1.0.0     af9ec3d7f1c1   2 hours ago     951MB
redis           latest    7614ae9453d1   15 months ago   113MB
[root@WangHui WangHui]#
启动
[root@WangHui WangHui]# docker run -it af9ec3d7f1c1  /bin/bash
[root@1d3ef2bad8fa local]# if 
if         ifconfig   ifenslave  
[root@1d3ef2bad8fa local]# ifconfig 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 13  bytes 1102 (1.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@1d3ef2bad8fa local]# 

虚拟机运行很慢,只能等着,估计两分钟文章来源地址https://www.toymoban.com/news/detail-718773.html

到了这里,关于DockerFile文件详细解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【云原生】Dockerfile文件详解

    本文主要讲解了dockerfile的使用,在文章的最后加了一个dockerfile实现自制镜像的实战,如果你希望使用docker commit来制作镜像可以参考: 手动构建自己的docker容器镜像实战

    2023年04月15日
    浏览(28)
  • docke部署nodejs程序及Dockerfile详解

    重点参考:把一个 Node.js web 应用程序给 Docker 化 Docker部署Node.js的方法步骤(nodejs docker部署) Dockerfile的几个核心命令 FROM 镜像的运行环境,即基础镜像是谁 MAINTAINER 镜像的维护者信息 RUN 基础镜像需要执行哪些命令 ADD 添加文件到镜像中,会自动解压,以及下载网络URL COPY 拷

    2024年02月15日
    浏览(21)
  • 【Docker】个人镜像文件Dockerfile制作详解

    前言 洁洁的个人主页 我就问你有没有发挥! 知行合一,志存高远。 Docker 是一个 开源的应用容器引擎 ,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux或Windows 操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之

    2024年02月13日
    浏览(41)
  • 【Docker】利用Dockerfile制作个人的镜像文件详细讲解

    前言 Docker 是一个 开源的应用容器引擎 ,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux或Windows 操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 📕作者简介: 热爱跑步的恒川 ,致力于

    2024年02月11日
    浏览(43)
  • dockerfile的使用,使用dockerfile部署springboot项目

    Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。 官网:https://docs.docker.com/engine/reference/builder/ 1:每条保留字指令都 必须为大写字母 且后面要跟随至少一个参数 2:指令按照从上到下,顺序执行 3:#表示注释 4:每条指令都会创建

    2024年02月05日
    浏览(33)
  • 六、Dockerfile解析

    课前思考: 分别准备好两个已经写好的.net 程序与springboot程序, 如何让这两个程序在docker 中运行呢? Dockerfile 是用来构建Docker镜像的构建文件 ,是由一系列命令和参数构成的脚本。 构造三个步骤 1.编写Dockerfile文件 2.编译:docker build 3.生成容器:docker run .... 1.每条保留字指

    2024年02月05日
    浏览(28)
  • docker高级(DockerFile解析)

    1、构建三步骤 ·编写Dockerfile文件 ·docker build命令构建镜像 ·docker run依镜像运行容器实例 2、DockerFile构建过程解析 ·Dockerfile内容基础知识 ·1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数 ·2:指令按照从上到下,顺序执行 ·3:#表示注释 ·4:每条指令都会创

    2024年02月10日
    浏览(31)
  • Docker技术入门| Part03:Dockerfile详解(Dockerfile概念、Dockerfile 指令、使用Dockerfile构建镜像)

    Docker镜像原理 Docker镜像是由特殊的文件系统叠加而成 最底端是bootfs,并使用宿主机的bootfs 第二层是root文件系统rootfs,称为base image 然后再往上可以叠加其他的镜像文件 统文件系统(UnionFile System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统的视角,这样就隐

    2024年02月09日
    浏览(46)
  • dockerfile使用记录:在生产中使用dockerfile构建mysql详细教学加案例

    该Dockerfile主要有以下几个部分: FROM mysql:latest:表示该镜像是基于官方MySQL镜像构建的,使用latest标签表示使用最新版本。 ENV MYSQL_ROOT_PASSWORD=123456:设置MySQL的root用户密码为123456,这是一个环境变量。 ENV LANG=C.UTF-8:设置字符集为UTF-8,确保正确的字符处理。 COPY my.cnf /etc/m

    2024年02月14日
    浏览(44)
  • Docker 解析:使用 Dockerfile 自动构建镜像

    简介 Docker 容器是使用 基础 镜像创建的。一个镜像可以是基本的,只包含操作系统的基本要素,也可以包含一个准备好启动的复杂的预构建应用程序堆栈。 在使用 Docker 构建镜像时,每个操作(例如执行的命令,比如 apt-get install)都会形成一个新的层叠在之前的层之上。然

    2024年03月26日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包