Docker Dockerfile 语法与指令

简介: Docker Dockerfile 语法与指令

一、简介

// 空镜像 scratch
// 通常使用 Docker 镜像时会以一个已存在的镜像为基础,在其上进行定制,这个已存在的镜像就是基础镜像。
// 在 DockerFile 中必须指定基础镜像,FROM 指令就是用于指定基础镜像,因此一个 Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令。
// Docker 还存在一个特殊的镜像,名为 scratch。这个镜像是虚拟的概念,并不实际存在,它表示一个空白的镜像。在 Dockerfile 中以 scratch 为基础镜像 (FROM scratch),意味着不以任何镜像为基础,接下来所写的指令将作为镜像第一层开始存在。
// 对于 Linux 下静态编译的程序来说,并不需要有操作系统提供运行时支持,所需的一切库都已经在可执行文件里了,因此直接 FROM scratch 会让镜像体积更加小巧。使用 Go 语言开发的应用很多会使用这种方式来制作镜像,这也是为什么有人认为 Go 是特别适合容器微服务架构的语言的原因之一。
FROM scratch
// 将 centos-7-x86_64 的压缩包添加到了根目录下,'/' 是根目录
ADD centos-7-x86_64-docker.tar.xz /
// 标签信息,一个镜像支持多个label
LABEL \
    org.label-schema.schema-version="1.0" \
    org.label-schema.name="CentOS Base Image" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20201113" \
    org.opencontainers.image.title="CentOS Base Image" \
    org.opencontainers.image.vendor="CentOS" \
    org.opencontainers.image.licenses="GPL-2.0-only" \
    org.opencontainers.image.created="2020-11-13 00:00:00+00:00"
// 指定进入容器时使用的默认解释器类型,当创建容器时尾部如果不指定解释器类型就会使用默认的
CMD ["/bin/bash"]

二、语法与指令

  • dockerfile 是用来构建 docker 镜像的构建文件,是由一系列命令和参数构成的脚本
  • 构建的三步骤:编写 dockerfile 文件build 构建docker run
  • dockerfile 指令:
FROM:当前新镜像是基于那镜像
MAINTAINER:镜像作者
RUN:容器需要运行的命令
EXPOSE:对外端口号
WORKDIR:指定终端进入的工作目录
ENV:设置环境变量
ADD:将宿主机目录下的文件拷贝进镜像,ADD 命令会自动处理 URL 和解压压缩包
COPY:将宿主机目录下的文件拷贝进镜像
VOLUME:容器数据卷
CMD:指定一个容器运行时要运行的文件(可以有很多 CMD 命令,但只有最后一个生效)
ENTRYPOINT:指定一个容器运行时要运行的文件
OMBUILD:构建一个被继承的 dockerfile 时运行命令,父镜像在子镜像继承之后,父镜像 onbuild 被 cufa 触发
HEALTHCHECK:Docker 1.12 版本后引入的判断容器运行状态是否正常。

三、案例

  • 案例一:
// 基于 centos 镜像
FEOM centos
// 作者信息 dzm
MAINTAINER  dzm
// 自定义环境变量
ENV mypath /usr/local
// 定义工作目录
WORKDIR /usr
// 添加 jdk×86 到 /usr/loca
COPY jkd-8u171-linux-×86.tar.gz /usr/local
// 添加并解压 jdk×64 到 /usr/local
ADD jkd-8u171-linux-×64.tar.gz /usr/local
// 添加并解压 tomcat 到 /usr/local
ADD apache-tomcat-9.0.6.tar.gz /usr/local
# 配置 java 与 tomcat 的环境变量
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CLASS_HOME /usr/local/apache-tomcat-9.0.6
ENV CLASS_BASE /usr/local/apache-tomcat-9.0.6
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
// 加入三个容器卷
VOLUME ["/mydata1","/mydata2","/mydata3"]
// 安装 vim 组件
RUN yum -y instatll vim
// 安装网络组件
RUN yun -y install net-tool
// 监听端口
EXPOSE 80
// 指定 CMD
CMD bin/bash
  • 案例二:
// 基于 nginx:1.17.9 镜像构建
FROM nginx:1.17.9
// 指定信息
LABEL maintainer="hogwarts@testing-studio.com>"
// 设置环境变量
ENV NGINX_VERSION 1.17.9
// 切换 root 用户
USER root
// 执行命令,安装 curl 软件,设置软链接把 nginx 服务的日志显示到终端输出上。
RUN apt-get -yq update && apt-get install -y curl && \
ln -sf /dev/stdout /var/log/nginx/access.log && \
ln -sf /dev/stderr /var/log/nginx/error.log
// 设置容器内 /data 目录为匿名卷
VOLUME ["/data"]
// 设置工作目录
WORKDIR /data/html/
// 复制 index.html 文件到 WORKDIR 目录下
COPY index.html .
// 映射 80 端口
EXPOSE 80
// 此处 CMD 作为 ENTRYPOINT 的参数。
// CMD ["nginx", "-g", "daemon off;"]
CMD ["-g", "daemon off;"]
// 设置容器启动的命令
ENTRYPOINT ["nginx"]
// 检查容器健康,通过访问 Nginx 服务 80 端口,来判断容器服务是否运行正常。
HEALTHCHECK --interval=5s --timeout=3s \
CMD curl -fs http://localhost/ || exit 1
# -f:指定要使用的 Dockerfile 路径
# -t:镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签
$ docker build -f /home/dockerfile -t centos_tomcat
# .:Dockerfile 路径为当前目录
$ docker build -t centos_tomcat .
$ docker run --name dzmtest -p 8080:80 centos_tomcat
相关文章
|
1月前
|
应用服务中间件 nginx Docker
Docker镜像-基于DockerFile制作编译版nginx镜像
这篇文章介绍了如何基于Dockerfile制作一个编译版的nginx镜像,并提供了详细的步骤和命令。
147 17
Docker镜像-基于DockerFile制作编译版nginx镜像
|
1月前
|
应用服务中间件 Linux nginx
Docker镜像-基于DockerFile制作yum版nginx镜像
本文介绍了如何使用Dockerfile制作一个基于CentOS 7.6.1810的yum版nginx镜像,并提供了详细的步骤和命令。
75 20
|
6天前
|
Docker 容器
7-13|docker build -t image-name:tag path/to/Dockerfile 这个命令具体什么意思
7-13|docker build -t image-name:tag path/to/Dockerfile 这个命令具体什么意思
|
2月前
|
Docker 容器
在Docker中,Dockerfile有哪些常见指令?
在Docker中,Dockerfile有哪些常见指令?
|
2月前
|
监控 Linux API
在Docker中,docker run指令执行后,生成了哪些进程?
在Docker中,docker run指令执行后,生成了哪些进程?
|
2月前
|
缓存 Docker 容器
在Docker中,docker commit生成的镜像和dockerfile生成镜像有什么区别?
在Docker中,docker commit生成的镜像和dockerfile生成镜像有什么区别?
|
2月前
|
缓存 开发者 Docker
Dockerfile是Docker容器化过程中的核心组件,它允许开发者以一种可重复、可移植的方式自动化地构建Docker镜像
【8月更文挑战第19天】Dockerfile是构建Docker镜像的脚本文件,含一系列指令定义镜像构建步骤。每条大写指令后跟至少一个参数,按序执行,每执行一条指令即生成新的镜像层。常用指令包括:FROM指定基础镜像;RUN执行构建命令;EXPOSE开放端口;CMD指定容器启动行为等。优化策略涉及减少镜像层数、选择轻量基础镜像、利用缓存及清理冗余文件。示例:基于Python应用的Dockerfile包括设置工作目录、复制文件、安装依赖等步骤。掌握Dockerfile有助于高效自动化构建镜像,加速应用部署。
26 1
|
2月前
|
安全 Ubuntu Linux
在Docker中,镜像内没有curl,kill,ipconfig等指令如何添加?
在Docker中,镜像内没有curl,kill,ipconfig等指令如何添加?
|
2月前
|
NoSQL Linux MongoDB
Docker 解析:使用 Dockerfile 自动构建镜像
Docker 解析:使用 Dockerfile 自动构建镜像
71 0
|
2月前
|
Docker 容器
docker compose logs 常用指令
`docker compose logs`命令用于查看容器的输出日志。该命令提供多种选项,如以纯文本形式输出(`--no-color`)、隐藏日志前缀(`--no-log-prefix`)、显示时间戳(`-t, --timestamps`)等。用户可以指定时间范围(如`--since "2024-08-06T13:11:10"`和`--until "2024-08-06T13:11:15"`)或最近几分钟内的日志(如`--since 5m`)。使用`-f, --follow`可实时跟踪日志输出。注意:参数-h已废弃,应使用--help。
下一篇
无影云桌面