docker高级(DockerFile解析)

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

1、构建三步骤

·编写Dockerfile文件
·docker build命令构建镜像
·docker run依镜像运行容器实例

2、DockerFile构建过程解析

·Dockerfile内容基础知识
·1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数
·2:指令按照从上到下,顺序执行
·3:#表示注释
·4:每条指令都会创建一个新的镜像层并对镜像进行提交
·Docker执行Dockerfile的大致流程
·(1)docker从基础镜像运行一个容器
·(2)执行一条指令并对容器作出修改
·(3)执行类似docker commit的操作提交一个新的镜像层
·(4)docker再基于刚提交的镜像运行一个新容器
·(5)执行dockerfile中的下一条指令直到所有指令都执行完成

从应用软件的角度来看,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容器,容器是直接提供服务的。

3、DockerFile常用保留字指令

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

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

·RUN
·容器构建时需要运行的命令
·两种格式
·shell格式

RUN yum -y install vim
	exec格式

docker高级(DockerFile解析),docker,eureka,java

·RUN是在 docker build时运行

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

·WORKDIR
·指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点

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

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

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

比如:WORKDIR $MY_PATH

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

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

·COPY src dest
·COPY [“src”, “dest”]
·<src源路径>:源文件或者源目录
·<dest目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。

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

·CMD
·指定容器启动后的要干的事情

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

·它和前面RUN命令的区别
·CMD是在docker run 时运行。
·RUN是在 docker build时运行。

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

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

·在执行docker run的时候可以指定 ENTRYPOINT 运行所需的参数。
·注意
·如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。

docker高级(DockerFile解析),docker,eureka,java

4、自定义镜像mycentosjava8

·要求
·Centos7镜像具备vim+ifconfig+jdk8

·JDK的下载镜像地址
·官网

下载地址:
https://www.oracle.com/java/technologies/downloads/#java8

·编写
·准备编写Dockerfile文件

FROM centos:7
MAINTAINER zzyy
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:$PATH
EXPOSE 80
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

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

docker build -t centosjava8:1.5 .

·注意,上面TAG后面有个空格,有个点
·运行
·docker run -it 新镜像名字:TAG

 docker run -it centosjava8:1.5 /bin/bash

5、再体会下UnionFS(联合文件系统)

UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

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

·Dockerfile写一个

vim Dockerfile

from ubuntu
CMD echo 'action is sucess'

#构建
docker build .

docker高级(DockerFile解析),docker,eureka,java
查看

docker image ls -f dangling=true

删除

docker image prune

虚悬镜像已经失去存在价值,可以删除

docker高级(DockerFile解析),docker,eureka,java

总结

docker高级(DockerFile解析),docker,eureka,java文章来源地址https://www.toymoban.com/news/detail-686390.html

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

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

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

相关文章

  • 【Docker】5、Dockerfile 自定义镜像(镜像结构、Dockerfile 语法、把 Java 项目弄成镜像)

    镜像结构 Dockerfile 语法 构建 Java 项目 ① 之前使用的镜像都是 DockerHub 官方提供的 ② 开发者需要将自己的微服务制作为镜像 镜像 是由 应用程序 及其需要的 系统函数库 、 环境 、 配置 、 依赖 打包而成。 📝 镜像是 分层结构 ,每一层称为一个 Layer 1️⃣ BaseImage 层:包含基

    2024年02月03日
    浏览(44)
  • Docker DockerFile部署java jar项目包,以及Mysql,Redis

    Docker 运行环境要求系统为 64 位、 Linux 系统内核版本为  3.8 以上 1.1 搭建gcc环境 (gcc是编程语言译器) yum -y install gcc yum -y install gcc-c++ 1.2 安装需要的软件包 yum install -y yum-utils 1.3 装镜像仓库 因为docker的服务器是在国外, 所以有时候从仓库中下载镜像的时候会连接被拒绝或者连

    2024年02月05日
    浏览(47)
  • 探索Docker-Compose:从基础到高级命令全解析

    在当今的软件开发过程中, 容器化 已成为一种重要的技术趋势。它允许开发者将应用及其所有依赖项打包在一起,确保应用在各种环境中都能一致地运行。 Docker 作为容器化技术的代表,提供了一个轻量级、便捷的平台来创建、部署和运行容器化应用。然而,当我们需要管理

    2024年01月18日
    浏览(41)
  • 【jenkins】idea+jenkins+docker+dockerfile+compose流水线部署java应用

    目录 整体架构 环境准备 安装docker以及docker-compose jenkins安裝 maven安装 portainer面板安装 sonarqube安装  在项目中增加dockerfile和compose.yml脚本  Dockerfile脚本内容 compose.yml脚本内容 jenkins安装必要插件 jenkins增加流水线任务 增加pipeline任务job  增加pipeline脚本 WXWork Notification Plugin 

    2024年02月16日
    浏览(63)
  • Docker基础(镜像的结构,Dockerfile语法介绍,基于Ubuntu镜像来构建一个Java应用)

    要想自己构建镜像,必须先了解镜像的结构。 镜像之所以能让我们快速跨操作系统部署应用而忽略其运行环境、配置,就是因为镜像中包含了程序运行需要的系统函数库、环境、配置、依赖。 因此,自定义镜像本质就是依次准备好程序运行的基础环境、依赖、应用本身、运

    2024年02月20日
    浏览(49)
  • 【Java】微服务——Docker容器部署(docker安装,docker配置镜像加速,DockerHub,docker基本操作,Dockerfile自定义镜像.Docker-Compose)

    微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。 在数百上千台服务中重复部署,环境不一定一致,会遇到各种问题 1.1.1.应用部署的环境问题 大型项目组件较多,运

    2024年02月04日
    浏览(56)
  • Docker自定义java镜像(解决java:8镜像不支持arm64/aarch64的问题)(附带Dockerfile参数介绍)

    arm64/aarch64的云服务器、已经安装好docker、已经安装好对应版本且可以使用的jdk、服务器上有该jdk的安装包 (如:jdk-8u311-linux-aarch64.tar.gz) #打包镜像 注意有后缀 . Dockerfile的命令ADD:将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包 (1)基础 每一条保留

    2024年02月09日
    浏览(39)
  • DockerFile文件详细解析

    所有文章不设限,我们相遇偶然,相散坦然,互不打扰,各自安好,向阳而生 致敬尚硅谷周阳老师,此处内容迁移学习来自于阳哥! DockerFile是用来构建Docker镜像的文本文件,是一条条构建镜像所需要的指令和参数构成的脚本 编写DockerFile文件 Docker build命令构建镜像 docker r

    2024年02月08日
    浏览(38)
  • 六、Dockerfile解析

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

    2024年02月05日
    浏览(33)
  • 探索高级UI、源码解析与性能优化,了解开源框架及Flutter,助力Java和Kotlin筑基,揭秘NDK的魅力!

    链接: https://pan.baidu.com/s/13cR0Ip6lzgFoz0rcmgYGZA?pwd=y7hp 提取码: y7hp 复制这段内容后打开百度网盘手机App,操作更方便哦 --来自百度网盘超级会员v4的分享 📚【01】Java筑基:全方位指南带你从入门到进阶,打造坚实的Java基础!🔥 🔬【02】Kotlin:深入浅出,揭示Kotlin的奇妙之处,让

    2024年02月12日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包