Docker 之 Dockerfile

简介: Dockerfile 命令介绍 1、FROM 构建一个属于自己的镜像需要依赖一个基础镜像,就是指定一个官方提供的一个base image。在这个基础之上构建。例如使用daocloud.io提供的centos7作为基础镜像 FROM daocloud.

Dockerfile 命令介绍

1、FROM 构建一个属于自己的镜像需要依赖一个基础镜像,就是指定一个官方提供的一个base image。在这个基础之上构建。例如使用daocloud.io提供的centos7作为基础镜像.FROM必须是第一行

FROM daocloud.io/centos:7
AI 代码解读

2、LABEL 一些注释信息,多行的话可以使用反斜线,以下三种方式

# Set one or more individual labels
LABEL com.example.version="0.0.1-beta"
LABEL vendor="ACME Incorporated"
LABEL com.example.release-date="2015-02-12"
LABEL com.example.version.is-production=""

# Set multiple labels on one line
LABEL com.example.version="0.0.1-beta" com.example.release-date="2015-02-12"

# Set multiple labels at once, using line-continuation characters to break long lines
LABEL vendor=ACME\ Incorporated \
      com.example.is-beta= \
      com.example.is-production="" \
      com.example.version="0.0.1-beta" \
      com.example.release-date="2015-02-12"
AI 代码解读

3、RUN
RUN 后面要加上要构建镜像时,所要执行的脚本,多行命令换行也可以使用反斜线 来分隔,例如在centos7上安装并启用httpd

RUN yum -y install httpd \
      systemctl enable httpd.service
AI 代码解读

×需要注意,如果每一行RUN 命令都是单独存在的
例如如下情况

RUN yum update
RUN yum install -y httpd
AI 代码解读

这种情况下构建之后,如果修改了第二句话

RUN yum update
RUN yum install -y httpd nginx
AI 代码解读

如果基于修改后的dockerfile构建新镜像,则不会安装新的源里的httpd和nginx,因为第一行没有变化,docker默认认为可使用缓存,所以第一句update不会执行,为了避免这种情况,建议使用反斜线 分隔命令行,这样docker会认为是一句话

RUN yum update \
    yum install -y httpd nginx
AI 代码解读

4、pipes 管道

RUN 中 使用|管道,
AI 代码解读
RUN wget -O - https://some.site | wc -l > /number
AI 代码解读

docker利用/bin/sh -c 执行RUN后面的命令,且只会判定最后一个命令执行结果来判断是否RUN正常执行,例如wc -l成功,但是wget失败,docker也会认为RUN执行成功而制作一个镜像,为了避免,我们可以在命令之前加上set -o pipefail,任意后面失败都会导致构建失败

RUN set -o pipefail && wget -O - https://some.site | wc -l > /number
AI 代码解读

不是所有shell都支持 set -o pipefail,bash支持,docker默认用/bin/sh ,可以在RUN后面显示的指定所用的shell

RUN ["/bin/bash", "-c", "set -o pipefail && wget -O - https://some.site | wc -l > /number"]
AI 代码解读

5、CMD
CMD是运行容器时所需要执行的脚本,不同于RUN,RUN是构建镜像时需要执行的脚本。一般服务类型的镜像推荐使用CMD,运行时执行开启服务的脚本

6、EXPOSE
容器所要对外曝光的端口,例如httpd 是80

7、ENV
ENV用来设置容器内的环境变量path
用法 ENV 环境变量 环境变量值

ENV PG_MAJOR 9.3
ENV PG_VERSION 9.3.4
RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …
ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH
AI 代码解读

8、COPY 、ADD
ADD src dest,add的src可以是一个url,add会下载到指定目录,add偶尔会根据下载文件格式进行解压,有时候不会解压,很奇怪
COPY SRC DEST从本地指定的src复制至镜像的目录下
可以ADD URL DEST下载,然后RUN tar zxf .tar -C dest解压

ADD http://example.com/big.tar.xz /usr/src/things/
RUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/things
RUN make -C /usr/src/things all
AI 代码解读
目录
打赏
0
1
0
0
23
分享
相关文章
|
3月前
|
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结
298 76
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
3320 12
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
88 9
Docker-compose 编排lnmp(dockerfile) 完成Wordpress
通过使用Docker Compose,我们可以轻松编排LNMP环境并部署WordPress。本文详细介绍了各组件的Dockerfile和配置文件编写,并通过docker-compose.yml文件实现了整个环境的自动化部署。这种方法不仅简化了部署过程,还提高了环境的可移植性和一致性。希望本文能帮助你更好地理解和使用Docker Compose来管理和部署复杂的应用程序。
230 4
Docker镜像-基于DockerFile制作编译版nginx镜像
这篇文章介绍了如何基于Dockerfile制作一个编译版的nginx镜像,并提供了详细的步骤和命令。
721 17
Docker镜像-基于DockerFile制作编译版nginx镜像
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
120 4
14 response from daemon: open \\.\pipe\docker_engine_linux: The system cannot find the file speci
14 response from daemon: open \\.\pipe\docker_engine_linux: The system cannot find the file speci
107 1
Docker镜像-基于DockerFile制作yum版nginx镜像
本文介绍了如何使用Dockerfile制作一个基于CentOS 7.6.1810的yum版nginx镜像,并提供了详细的步骤和命令。
216 20
7-13|docker build -t image-name:tag path/to/Dockerfile 这个命令具体什么意思
7-13|docker build -t image-name:tag path/to/Dockerfile 这个命令具体什么意思
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等