dockerfile镜像案例(Dockerfile构建自定义镜像的实现)
dockerfile镜像案例
Dockerfile构建自定义镜像的实现目录
- 前言
- Dockerfile简介
- Dockerfile构建镜像的流程
- Dockerfile使用
前面文章中使用docker运行容器使用的镜像都是从dockerhub上远程pull下来的,那么我们能不能构建自己的镜像呢?答案是肯定滴,可以通过Dockerfile构建自己的镜像,Dockerfile本身并不难,就是一堆命令,让小编觉得有难度的地方是如何使用Dockerfile的这些命令从更高一层的角度上更好的去构建自己的镜像,我们就一起来看看吧。
Dockerfile其实就是一个文件,该文件的名字就是Dockerfile,当然也可以不用这个名字,在构建镜像时指定名字即可,但是约定俗称使用Dockerfile,Dockerfile的主要作用就是帮助我们构建一个自定义镜像,因此Dockerfile也称为镜像构建文件或者镜像描述文件。
可能会有小伙伴问了,在dockerhub上官方提供了很多镜像已经基本满足了所有的服务,为什么还要自定义镜像呢?使用Dockerfile自己构建镜像就可以将自己的应用打包成镜像,运行镜像就可以直接运行我们自定义的一些功能的服务了。
举个简单的例子,在dockerhub上下载centos7的镜像,官方提供的镜像是没有vim这一功能的,因此我们可以基于官方的基础的centos镜像构建自己的镜像来实现运行centos容器时里面自动安装vim这一功能了。
在介绍Dockerfile构建镜像流程前需要知道一个重要概念---上下文(context)目录,Dockerfile所在的目录被称为上下文目录。
docker是CS架构,使用Dockerfile构建镜像时使用的命令是docker build,当在客户端的操作系统中执行该命令时,docker引擎会将Dockerfile所在的目录中的所有数据打包发送给docker服务端,因此Dockerfile所在的目录中最好只包含构建当前镜像所需的文件,服务端运行一行Dockerfile中的命令就会产生一个临时镜像存在docker cache中(如果不想要产生临时镜像在docker build后加--no_cache参数),运行到最后一行的时候会得到一个最终的镜像。如下图所示:
Dockerfile使用首先说一下Dockerfile构建镜像的命令:
# 命令格式:docker build -t 镜像名:tag Dockerfile所在路径 docker build -t mycentos:01 .
下面就来介绍一下在Dockerfile中常用的命令,注意注意,在Dockerfile中所有的命令都是大写的哦~。
FROM 镜像名:tag :Dockerfile中第一条命令,表示基于哪个镜像进行构建镜像。虽然是构建自定义镜像,但是这个自定义镜像也是在官方提供的基础镜像之上进行的哦。
# Dockerfile FROM centos:7 # 表示镜像基于centos7进行构建
RUN:构建镜像时需要运行的命令,可以跟shell命令。
# 第一种语法格式 RUN yum install -y vim # 第二种语法格式 RUN ["yum", "install", "-y", "vim"]
EXPOSE:对外界暴露的端口,只有在镜像中暴露端口,才能在执行docker run命令时指定-p参数。
EXPOSE 9000 # 表示暴露9000端口
WORKDIR:指定进入容器时的路径,可以写多个,容器内没有指定的路径时会创建该路径,可以写多个,下一个路径是基于上一个路径的相对路径。
WORKDIR /data WORKDIR /a
COPY:将context目录中指定文件复制到镜像的指定目录中.
# 命令格式:COPY 原路径(可以是绝对路径也可以是相对路径) 容器内目标路径 # 语法格式一 COPY /root/app/aa.txt /data # 语法格式二 COPY ["<src>", ..., "<dest>"] ---语法格式二
ADD:将context目录中指定文件复制到镜像的指定目录中,可以识别URL,自动下载URL对应的压缩包,可以将本地压缩包复制到镜像指定目录后自动解压。
# context目录中指定文件复制到镜像的指定目录中 ADD bb.txt /data # 自动识别URL并下载到容器内指定目录 ADD https://www.python.org/ftp/python/3.9.1/Python-3.9.1.tgz /data # 将压缩包会自动解压到指定目录 ADD xxx.tar /data
ENTRYPOINT:用来指定容器启动时执行的命令,和CMD类似,往往用来设置容器启动后的第一个命令,可以写多个;可以被覆盖。
# ENTRYPOINT shell脚本 或者 ENTRYPOINT ["tail", "-f"...] ENTRYPOINT tail -f bb.txt # 覆盖 docker run --entrypoint=cat mycentos:08 /data/bb.txt
CMD:以最后一条CMD为准;可以被覆盖;可以为ENTRYPOINT传参数,与ENTRYPOINT结合使用(只能用json数组的形式)
# 只运行最后一条CMD CMD ls $BASEDIR CMD cat bb.txt # 可以被覆盖,docker run后面的命令会直接覆盖Dockerfile中的CMD后的命令 docker run mycentos:09 ls /data # 与ENTRYPOINT结合使用,为ENTRYPOINT传参,可以动态传递参数比如项目路径不变但是项目名称会变化,需要注意的时候,两者结合使用的时候必须使用json数组的格式。 ENTRYPOINT ["ls", "/data"] CMD [/data/bb"]
或者
docker run mycentos:10 /data/bb/aa
到此这篇关于Dockerfile构建自定义镜像的实现的文章就介绍到这了,更多相关Dockerfile构建镜像 内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- docker和tomcat建立连接(如何基于Dockerfile构建tomcat镜像)
- 如何使用docker启动tomcat(Docker容器上用DockerFile部署多个tomcat服务的步骤)
- dockerfile构建mysql镜像并初始化(docker-compose基于MySQL8部署项目的实现)
- docker怎么使用supervisor(supervisor下的Dockerfile的多服务镜像封装操作)
- 查看docker容器进程运行状态命令(docker容器内要启动两个进程时Dockerfile的实现代码)
- dockerfile深度解析(Dockerfile文本文件使用方法实例解析)
- dockerfile的镜像原理(dockerfile制作apache镜像的方法)
- docker怎么增加端口(docker 添加端口及获取dockerfile的方法)
- dockerfile自定义镜像图解(Docker images导出和导入操作)
- docker如何加volume(Dockerfile 中 VOLUME 与 docker -v 的区别说明)
- dockerfile启动容器服务(docker文件存放路径, 获取容器启动命令操作)
- dockerfile镜像案例(Dockerfile构建自定义镜像的实现)
- idea生成dockerfile(idea集合docker实现镜像打包一键部署)
- dockerfile镜像介绍(使用Dockerfile构建docker镜像)
- 2022-01-25 00:54:18
- docker 命令上传镜像到镜像仓库(Docker 制作镜像Dockerfile和commit操作)
- 刚红就耍大牌,《琉璃》角色滤镜碎一地,心疼工作人员(琉璃角色滤镜碎一地)
- 袁冰妍郑业成这对可以处,有脸红情话他们是真的敢说(袁冰妍郑业成这对可以处)
- 《祝卿好》台词又土又甜,就喜欢这么直接的恋爱(祝卿好台词又土又甜)
- 大女主 汤唯垂青电视圈,搭档朱亚文出演《大明皇妃孙若微传》(汤唯垂青电视圈)
- 红色代表什么(红色代表什么情感和含义)
- 高中数学题(高中数学题型总结及解题方法)
热门推荐
- 个人能备案云服务器吗(租用云服务器后的备案问题你真的了解吗?)
- 了解mysql数据自动备份(MySQL数据备份方法的选择与思考)
- docker 技术认证(docker获取Let's Encrypt永久免费SSL证书的方法)
- jquery next()
- laravel视图组件(Laravel5.4框架中视图共享数据的方法详解)
- sqlserver日志被删除(sql server日志处理不当造成的隐患详解)
- mysql高级概念(MySQL 自定义变量的概念及特点)
- opencv 图像匹配python(OpenCV+Python识别车牌和字符分割的实现)
- SQL SERVER数据类型对应C#的数据类型
- 微信小程序开发如何实现自动保存(微信小程序开发实用技巧之数据传递和存储)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9