Dockerfile文件常用命令详解

举报
liuzhen007 发表于 2021/08/26 08:48:33 2021/08/26
【摘要】 目录前言正文命令分析  FROM  RUN  COPY和ADD  CMD结尾 前言说到 Docker 容器,就不得不提一个非常重要的文件 Dockerfile,它是用于定义镜像构建过程的配置文件。在 Dockerfile 文件中,包含了镜像构建过程中需要执行的命令已经相关的操作。Dockerfile 文件在不同的环境下执行就会生成对应环境的镜像服务,从而能够快速的实现容器迁移和集群部署。也正...

目录

  • 前言
  • 正文
  • 命令分析
      FROM
      RUN
      COPY和ADD
      CMD
  • 结尾

前言

说到 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=<user>:<group>] ["<源路径1>",… “<目标路径>”]

ADD [–chown=<user>:<group>] ["<源路径1>",… “<目标路径>”]

实例参考:

COPY ./.netrc /app

COPY . /app/bag

CMD

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

一般命令格式如下:

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

实例参考:

CMD [“node”, “bin/www”]

结尾

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。