Docker基础:Dockerfile相关知识介绍

简介: Dockfile是一种可以被Docker解释的脚本文件,Dockerfile其实由若干条的指令组成,每条指令对应Linux下面的一条脚本命令。Docker应用程序可以将这些指令转化为Linux实际执行的命令。Docker读取Dockerfile文件的指令然后生成对应的docker镜像。通过dockerfile文件可以比较明确的描述出Docker镜像是如何一步一步构建的。

今天给大家整理一下Dockerfile相关的知识,希望对大家能有所帮助!

1、Dockfile介绍

Dockfile是一种可以被Docker解释的脚本文件,Dockerfile其实由若干条的指令组成,每条指令对应Linux下面的一条脚本命令。Docker应用程序可以将这些指令转化为Linux实际执行的命令。Docker读取Dockerfile文件的指令然后生成对应的docker镜像。通过dockerfile文件可以比较明确的描述出Docker镜像是如何一步一步构建的。有了Dockerfile,我们可以根据实际的因业务需要构建自己的镜像并可以添加一些需要执行的命令,这样可以避免后续的部署工作省去了需要重复敲命令的繁琐过程,大大节约了项目部署的时间成本

2、Dockerfile命令书写规则

Dockerfile的指令忽略大小写,不过建议使用大写,可以使用\#作为指令的注释,每一行只能表示一条指令,每条指令可以携带多个参数。

3、Dockerfile的指令的分类

根据作用可以分为两种,构建指令和设置指令。

构建指令:用于构建Docker镜像,其指定的操作不会在运行image的容器上执行,属于镜像的构建过程。。

设置指令:用于设置Docker镜像的属性,其指定的操作会在运行镜像的容器中执行。

4、Dockerfile指令组成

image_1d74bca7.png

4.1 From(指定基础镜像)

  • Dockerfile必须指定FROM ,并且是第一行,属于构建命令。
  • 表示基于那个基础镜像来构建
  • 基础镜像可以是本地镜像也可以是远程仓库的镜像

语法: FROM image name

4.2 MAINTAINER(指定镜像作者信息)

用来指定构建镜像的作者信息,方便后续通过docker inspect命令查看,对镜像没有实际的影响。

语法: MAINTAINER author name

4.3 RUN (指定需要执行的shell命令)

该命令会在新创建的镜像上添加新的层面。docker build 时运行。

格式:RUN command命令

4.4 CMD(设置容器启动时执行的操作)

可以是执行自定义脚本,也可以是执行系统命令,该指令只能在文件中存在一次,如果有多个,则只会执行最后一条。docker run时运行。

格式: CMD ["executable","param1","param2"] 或 CMD ["param1","param2"]

4.5 ENTRYPOINT(设置容器启动时执行的操作)

设置指令,指定容器启动时执行的命令,可以追加命令,但是只有最后一个ENTRYPOINT有效。

格式: ENTRYPOINT ["executable", "param1","param2"]

4.6 USER(设置容器执行shell命令的用户)

设置指令,设置启动该容器的用户,默认是root用户。

格式:USER root

4.7 EXPOSE(宿主和容器端口映射设置)

指定容器需要映射到宿主机器的端口。

格式: EXPOSE port

4.8 ENV(设置环境变量)

ENV指令可以用于为docker容器设置环境变量。

示例: ENV JAVA/HOME /usr/local/jdk1.8.0.25 指定java环境变量

4.9 ADD(文件复制命令)

复制文件命令,支持自动下载和解压

格式:ADD 源路径 目标路径

优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。

缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。

说明:参数:destination 是容器内的路径。source 可以是 下载文件的URL 或者宿主主机的目录

4.10 COPY

类似ADD命令,将地文件拷贝到镜像中

本地目录为源目录时,官方推荐使用COPY。

4.11 VOLUME (指定挂载点)

创建一个可以从本地主机或其他容器挂载的挂载点,用来存放数据库和需要保持的数据等

4.12 WORKDIR(设置工作目录)

指定RUN、CMD与ENTRYPOINT 命令的工作目录。

格式: WORKDIR /path/to/workdir

5、完整的Dockerfile示例

5.1 创建mytomcat文件

FROM centos
#设置作者
MAINTAINER xiaoming admion@qq.com
#拷贝tomcat jdk 到镜像内并解压
ADD apache-tomcat-8.5.30.tar.gz /usr/local/tomcat
ADD jdk-8u202-linux-x64.tar.gz /usr/local/jdk
#设置工作目录
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置jdk 和tomcat的环境变量
ENV JAVA_HOME /usr/local/jdk/jdk1.8.0_202
ENV CATALINA_HOME /usr/local/tomcat/apache-tomcat-8.5.30
ENV CATALINA_BASE /usr/local/tomcat/apache-tomcat-8.5.30
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#设置暴露的端口
EXPOSE 8080
#运行tomcat
CMD /usr/local/tomcat/apache-tomcat-8.5.30/bin/startup.sh && tail -f /usr/local/tomcat/apache-tomcat-8.5.30/logs/catalina.out

5.2 构建镜像

docker build -f mytomcat -t xm/tomcat:1.8 .

注意:docker build 命令最后要有一个 .

5.3 运行镜像

docker run -d -p 8080:8080 --name mytomcat1.8
-v /usr/local/tomcat/logs:/usr/local/tomcat/apache-tomcat-8.5.30/logs/
-v /usr/local/tomcat/webapps:/usr/local/tomcat/apache-tomcat-8.5.30/webapps/  
xm/tomcat:1.8
相关文章
|
11天前
|
应用服务中间件 PHP nginx
Docker-compose 编排lnmp(dockerfile) 完成Wordpress
通过使用Docker Compose,我们可以轻松编排LNMP环境并部署WordPress。本文详细介绍了各组件的Dockerfile和配置文件编写,并通过docker-compose.yml文件实现了整个环境的自动化部署。这种方法不仅简化了部署过程,还提高了环境的可移植性和一致性。希望本文能帮助你更好地理解和使用Docker Compose来管理和部署复杂的应用程序。
38 3
|
27天前
|
Docker 容器
docker中使用Dockerfile自动创建数据卷
【10月更文挑战第12天】
18 5
|
1月前
|
消息中间件 NoSQL Kafka
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
38 4
|
2月前
|
应用服务中间件 nginx Docker
Docker镜像-基于DockerFile制作编译版nginx镜像
这篇文章介绍了如何基于Dockerfile制作一个编译版的nginx镜像,并提供了详细的步骤和命令。
411 17
Docker镜像-基于DockerFile制作编译版nginx镜像
|
2月前
|
应用服务中间件 Linux nginx
Docker镜像-基于DockerFile制作yum版nginx镜像
本文介绍了如何使用Dockerfile制作一个基于CentOS 7.6.1810的yum版nginx镜像,并提供了详细的步骤和命令。
134 20
|
2月前
|
Docker 容器
7-13|docker build -t image-name:tag path/to/Dockerfile 这个命令具体什么意思
7-13|docker build -t image-name:tag path/to/Dockerfile 这个命令具体什么意思
|
3月前
|
Docker 容器
在Docker中,Dockerfile有哪些常见指令?
在Docker中,Dockerfile有哪些常见指令?
|
3月前
|
缓存 Docker 容器
在Docker中,docker commit生成的镜像和dockerfile生成镜像有什么区别?
在Docker中,docker commit生成的镜像和dockerfile生成镜像有什么区别?
|
3月前
|
缓存 开发者 Docker
Dockerfile是Docker容器化过程中的核心组件,它允许开发者以一种可重复、可移植的方式自动化地构建Docker镜像
【8月更文挑战第19天】Dockerfile是构建Docker镜像的脚本文件,含一系列指令定义镜像构建步骤。每条大写指令后跟至少一个参数,按序执行,每执行一条指令即生成新的镜像层。常用指令包括:FROM指定基础镜像;RUN执行构建命令;EXPOSE开放端口;CMD指定容器启动行为等。优化策略涉及减少镜像层数、选择轻量基础镜像、利用缓存及清理冗余文件。示例:基于Python应用的Dockerfile包括设置工作目录、复制文件、安装依赖等步骤。掌握Dockerfile有助于高效自动化构建镜像,加速应用部署。
34 1
|
3月前
|
NoSQL Linux MongoDB
Docker 解析:使用 Dockerfile 自动构建镜像
Docker 解析:使用 Dockerfile 自动构建镜像
135 0