Dockerfile构建自定义镜像的实现

目录
  • 前言
  • Dockerfile简介
  • Dockerfile构建镜像的流程
  • Dockerfile使用

前言

前面文章中使用docker运行容器使用的镜像都是从dockerhub上远程pull下来的,那么我们能不能构建自己的镜像呢?答案是肯定滴,可以通过Dockerfile构建自己的镜像,Dockerfile本身并不难,就是一堆命令,让小编觉得有难度的地方是如何使用Dockerfile的这些命令从更高一层的角度上更好的去构建自己的镜像,我们就一起来看看吧。

Dockerfile简介

Dockerfile其实就是一个文件,该文件的名字就是Dockerfile,当然也可以不用这个名字,在构建镜像时指定名字即可,但是约定俗称使用Dockerfile,Dockerfile的主要作用就是帮助我们构建一个自定义镜像,因此Dockerfile也称为镜像构建文件或者镜像描述文件。

可能会有小伙伴问了,在dockerhub上官方提供了很多镜像已经基本满足了所有的服务,为什么还要自定义镜像呢?使用Dockerfile自己构建镜像就可以将自己的应用打包成镜像,运行镜像就可以直接运行我们自定义的一些功能的服务了。

举个简单的例子,在dockerhub上下载centos7的镜像,官方提供的镜像是没有vim这一功能的,因此我们可以基于官方的基础的centos镜像构建自己的镜像来实现运行centos容器时里面自动安装vim这一功能了。

Dockerfile构建镜像的流程

在介绍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构建镜像 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 如何基于Dockerfile构建tomcat镜像

    dockerfile 是用来构建docker镜像的文件!命令参数脚本! 构建步骤: 编写一个dockerfile 文件 docker build 构建成一个镜像 docker run 运行镜像 docker push 发布镜像(DockerHub.阿里云镜像仓库) # 以contes为例 查看 dockerhub 上 contes 的 dockerfile FROM scratch ADD centos-7-x86_64-docker.tar.xz / LABEL \ org.label-sch

  • 通过Dockerfile构建Docker镜像的方法步骤

    Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建. Dockerfile支持Shell类的行尾添加"\"的命令换行方式,以及行首"#"进行注释的格式. 使用Dockerfile构建Docker镜像时注意事项: (1).尽量选取满足需求但较小的基础系统镜像; (2).清理编译生成文件.安装包的缓存等临时文件; (3).安装各个软件时候要指定准确的版本号,并避免引入不

  • docker使用Dockerfile构建镜像的方法

    构建镜像 前面我们使用各种镜像进行测试演示,很多情况下我们是需要自己的镜像,满足自己业务需要的镜像,这就需要我们能够定制自己需要的镜像,构建 Docker 镜像有以下两种方法. 使用 docker commit 命令. 使用 docker build 命令和 Dockerfile 构建文件. 现在我们不推荐使用 docker commit 命令,而应该使用更灵活.更强大的 Dockerfile 来构建 Docker 镜像. 1.使用 commit 命令构建 docker commit 命令是创建

  • 使用Dockerfile构建docker镜像

    今天我们看看Dockerfile创建的方法. 构建docker镜像,有两种方法: 1.一种是使用docker commit命令 2.另外一种是基于docker build命令和dockerfile文件 通常情况下,dockerfile构建镜像比docker commit命令构建 镜像更加灵活,因此采用后者较多. 使用Dockerfile构建docker镜像 1.什么是Dockerfile? dockerfile是一个文件,它是使用DSL语法编写一个文件,之后使用docker build命令基于该

  • Docker如何使用Dockerfile构建镜像

    Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令.Docker程序将这些Dockerfile指令翻译真正的Linux命令.Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile.Docker程序将读取Dockerfile,根据指令生成定制的image.相比image这种黑盒子,Dockerfile这种显而易见的脚本更容易被使用者接受,它明确的表明image是

  • Dockerfile构建自定义镜像的实现

    目录 前言 Dockerfile简介 Dockerfile构建镜像的流程 Dockerfile使用 前言 前面文章中使用docker运行容器使用的镜像都是从dockerhub上远程pull下来的,那么我们能不能构建自己的镜像呢?答案是肯定滴,可以通过Dockerfile构建自己的镜像,Dockerfile本身并不难,就是一堆命令,让小编觉得有难度的地方是如何使用Dockerfile的这些命令从更高一层的角度上更好的去构建自己的镜像,我们就一起来看看吧. Dockerfile简介 Dockerfi

  • Docker进阶之构建自定义镜像实战指南

    目录 一.什么是 Docker 镜像? 二.自定义镜像的好处? 三.构建自己的Centos 四.RUN.CMD和ENTRYPOINT的区别 五.[实战]Dockerfile制作tomcat镜像 小结 一.什么是 Docker 镜像? Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资源.配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷.环境变量.用户等).镜像不包含任何动态数据,其内容在构建之后也不会被改变. 镜像是Docker容器的基石,容器是镜

  • docker通过Dockerfile构建mysql镜像的方法

    构建Dockerfile ,路径 /docker/mysql FROM hub.c.163.com/library/mysql:5.7 #作者信息 MAINTAINER hu "***@qq.com" #修改编码方式 RUN echo "character-set-server=utf8" >> /etc/mysql/mysql.conf.d/mysqld.cnf RUN service mysql restart EXPOSE 3306 到Docker

  • 使用dockerfile构建nginx镜像的方法示例

    Dockerfile介绍 Docker通过读取Dockerfile里面的内容可以自动build image,Dockerfile是一个包含了build过程中需要执行的所有命令的文本文件.也可以理解为Dockfile是一种被Docker程序解释的脚本,由一条一条的指令组成,每条指令对应Linux系统下面的一条命令,由Docker程序将这些Dockerfile指令翻译成真正的Linux命令.Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefil

  • 详解利用Dockerfile构建mysql镜像并实现数据的初始化及权限设置

    本文提要 本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动MySQL服务接受外部连接,主要是通过Dockerfile和shell脚本实现这一过程. 搭建步骤 1.首先创建Dckerfile: FROM mysql:5.7 #设置免密登录 ENV MYSQL_ALLOW_EMPTY_PASSWORD yes #将所需文件放到容器中 COPY setup.sh /mysql/setup.sh COPY sch

  • 使用Docker构建企业级自定义镜像的方法

    前言 临下班前,楼主接到了一个需求,由于基础镜像标准发生变更,需要按照最新的Docker 镜像标准构建自己应用的自定义镜像.目前的标准是这样的:基础架构组只提供所有项目必须接入的3个公共镜像,这3个公共基础镜像包含了:JDK8.Skywalking.Arthas.对于各自业务组的应用如果还需要加入其它镜像,则由各个业务组自己基于基础架构组提供的公共镜像之上,再添加自定义的镜像,结构图如下: 构建步骤 编写Dockerfile 基于最新的规范来看,我们需要编写一个Dockerfile,然后引用基础

  • dockerfile指令构建docker镜像的示例代码

    目录 初识Dockerfile 编写一个自己的docker 镜像: DockerFile docker build . 命令 查看镜像是如何生成的 初识Dockerfile Dockerfile就是用来构建docker镜像的构建文件!命令脚本! 通过这个脚本可以生成镜像,镜像是一层层的,脚本是一行行的命令,每行命令都是一层 dockerfile是面向开发的,我们以后要发布项目,作镜像,就需要编写dockerfile文件,这个文件十分简单. Dockerfile镜像之间成为了企业交付的标准,必须掌

随机推荐