Dockerfile文件常用命令详解

简介: 说到 Docker 容器,就不得不提一个非常重要的文件 Dockerfile,它是用于定义镜像构建过程的配置文件。在 Dockerfile 文件中,包含了镜像构建过程中需要执行的命令已经相关的操作。Dockerfile 文件在不同的环境下执行就会生成对应环境的镜像服务,从而能够快速的实现容器迁移和集群部署。也正因为如此,Docker 容器能够跨平台部署和运行。

前言

说到 Docker 容器,就不得不提一个非常重要的文件 Dockerfile,它是用于定义镜像构建过程的配置文件。在 Dockerfile 文件中,包含了镜像构建过程中需要执行的命令已经相关的操作。Dockerfile 文件在不同的环境下执行就会生成对应环境的镜像服务,从而能够快速的实现容器迁移和集群部署。也正因为如此,Docker 容器能够跨平台部署和运行。

正文

如果我们想要构建自己的服务镜像,可以通过两种方式,第一种是通过直接保存当前运行的容器,然后将生成的镜像文件重新命名,也就是通常使用的 docker tag 命令,最后再把重命名的镜像推到公有云仓库或者私有仓库。第二种就是利用本文介绍的 Dockerfile 文件,进行重新构建,再推到相应的仓库。

总体上来说,Dockerfile 理解为一个由上往下执行指令的脚本文件。构建镜像时,Docker 会逐行解析 Dockerfile 中的命令,通过观察构建日志,我们也可以知道 Dockerfile 文件所有命令的执行顺序是顺序执行的。

构建实例日志:

current os:Linux
docker build -f Dockerfile.x86 -t registry.cn-beijing.aliyuncs.com/liuzhen007/bag-x86:1.6.6 .
Sending build context to Docker daemon  337.4MB
Step 1/15 : FROM registry.cn-beijing.aliyuncs.com/liuzhen007/base-x86-ffmpeg:1.0
 ---> c91b1af20a82
Step 2/15 : USER root
 ---> 827d7a1d2e52
Step 3/15 : ENV TZ=Asia/Shanghai
 ---> b1d66c3f4cc8
Step 4/15 : RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
 ---> c21e6a502a33
Step 5/15 : WORKDIR /root/bag/
 ---> c224c6317820
Step 6/15 : COPY ./bin/bag .
 ---> 59b4d013ce87
Step 7/15 : COPY ./bin/server.crt .
 ---> 36b92b7306f8
Step 8/15 : COPY ./bin/server.key .
 ---> 25da16fc2011
Step 9/15 : COPY ./config.example.yaml ./config.yaml
 ---> 44d1ae9f2686
Step 10/15 : RUN echo "/usr/local/lib/" >> /etc/ld.so.conf  && ldconfig
 ---> Running in bb907e7a1eb7
Step 11/15 : RUN mkdir /var/www && mkdir /var/www/html && mkdir /var/www/html/user-media &&  mkdir /var/www/html/module
 ---> Running in 7e1da4234327
Removing intermediate container 7e1da4234327
 ---> 4b4ca4e832f2
Step 12/15 : COPY ./data /var/www/html/user-media
 ---> 62a16954bafd
Step 13/15 : COPY ./docker/module /var/www/html/module
 ---> bb4e96ffdc57
Step 14/15 : COPY ./docker/moviemasher ./
 ---> 955a6248856e
Step 15/15 : CMD ["./bag"]
 ---> 7af71e575223
Successfully built 7af71e575223
复制代码

命令分析

FROM

完全从0构建一个新镜像是不现实的,一般的做法都是先依赖一个基础镜像,再在这个基础镜像的基础上添加自己的需要的环境和代码程序。当声明基础镜像时,就需要用到 FROM 这个命令。

一般命令格式如下:

FROM image AS name

实例参考:

From golang:1.14.2-alpine3.11 AS test

RUN

在镜像构建过程中,我们可以执行相应的命令,一般命令格式如下:

RUN command

实例参考:

RUN go mod tidy

RUN go build main.go

COPY和ADD

在构建新的镜像的时候,我们可能需要将一些配置文件、程序代码或者执行脚本导入到镜像内的文件系统里,COPY 和 ADD 命令就是用来干这个的。

一般命令格式如下:

COPY [--chown=:] ["<源路径1>",...  "<目标路径>"]

ADD [--chown=:] ["<源路径1>",...  "<目标路径>"]

实例参考:

COPY ./.netrc /app

COPY . /app/bag

CMD

基于镜像启动的容器,在容器启动时会根据镜像构建时指定的命令来启动一个进程。而这个命令的定义,就是通过 Dockerfile 中的 CMD 命令来实现的。

一般命令格式如下:

CMD ["<可执行文件或命令>","param1","param2",...]

实例参考:

CMD ["node", "bin/www"]

结尾

熟悉 Dockerfile 的命令是编写 Dockerfile 的前提,本文只介绍了几个最为常见的命令,感兴趣的小伙伴可以自己去深入了解一下。好了,今晚的内容就介绍这么多,晚安。我是 liuzhen007,欢迎关注,分享更多容器相关知识。



作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一位典型的音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,😄公众号:玩转音视频。同时也是 CSDN 博客专家、华为云享专家(共创编辑)、InfoQ 签约作者,欢迎关注我分享更多干货!😄

目录
相关文章
|
7月前
|
缓存 Linux
lscpu命令详解
`lscpu` 是Linux系统下用于显示CPU架构和相关详情的命令,帮助用户了解处理器配置,适用于性能诊断、系统调优和软件部署规划。输出包括架构(如x86_64或ARM)、操作模式、字节顺序、CPU核心和线程信息、NUMA节点等。选项如 `-a` 显示所有CPU信息,`-b` 和 `-c` 分别显示在线和离线CPU信息。信息来源包括sysfs和`/proc/cpuinfo`文件。
290 2
Dockerfile换源
Dockerfile换源
1041 0
|
7月前
|
网络协议
nmtui命令详解
【4月更文挑战第9天】`nmtui`是NetworkManager的文本用户界面工具,用于终端中的网络配置和管理。用户可通过它查看网络设置、配置接口、修改设置、添加/删除连接及调整连接优先级。操作步骤包括启动nmtui,选择编辑连接,修改网卡设置,保存并退出。此工具包含在NetworkManager-tui子软件包中,配置更改会持久生效。了解更多详情可参考相关文档。
588 1
|
2月前
|
Java 应用服务中间件 Docker
|
7月前
|
缓存 Ubuntu 应用服务中间件
dockerfile文件详解(常用命令)
dockerfile文件详解(常用命令)
135 0
|
7月前
|
缓存 Docker 容器
Docker build 命令详解
Docker build 命令详解
103 0
|
缓存 Shell Go
DockerFile文件详解
DockerFile文件详解
208 0
文件和目录常用命令
文件和目录常用命令
152 0
|
Java 应用服务中间件 Shell
Docker(三):Dockerfile 命令详解
上一篇文章Docker(二):Dockerfile 使用介绍介绍了 Dockerfile 的使用,这篇文章我们来继续了解 Dockerfile ,学习 Dockerfile 各种命令的使用。 Dockerfile 指令详解 1 FROM 指定基础镜像 FROM 指令用于指定其后构建新镜像所使用的基础镜像。
1689 0
|
存储 Shell 应用服务中间件
Dockerfile : 常用指令
Dockerfile : 常用指令
1249 1
Dockerfile : 常用指令