【Docker系列】手把手教你写Dockerfile

2022-08-13 15:32:15 浏览数 (1)

1 Dockerfile是什么

Dockerfile是一个制作镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

可以理解为Dockerfile就是构建镜像的一张工程图,里面定义了这个镜像需要几块砖,几片瓦,砖放哪里,瓦放哪里。

2 Dockerfile的基础结构

#开头的表示注释行,说明dockerfile中的指令

基础镜像信息

维护者的信息

镜像操作指令

容器操作指令

3 Dockerfile中常见的操作指令和作用

FROM:指定创建镜像的基础镜像

MAINTAINER:Dockerfile作者信息,一般写的是联系方式

RUN:运行Linux系统的命令使用

CMD:指定容器启动执行的命令;启动容器中的服务

LABEL:指定生成镜像的源数据标签

EXPOSE:指定镜像容器监听端口号;发布服务使用

ENV:使用环境变量

ADD:对压缩文件进行解压缩;将数据移动到指定的目录

COPY:复制宿主机数据到镜像内部使用

WORKDIR:切换到镜像容器中的指定目录中

VOLUME:挂载数据卷到镜像容器中

USER:指定运行容器的用户

ARG:指定镜像的版本号信息

ONBUILD:创建镜像,作为其他镜像的基础镜像运行操作指令

ENTRYPOINT:指定运行容器启动过程执行命令,覆盖CMD参数

4 Dockerfile举个栗子

代码语言:javascript复制
FROM base-images:v1.0.0                  #指定基础镜像:base-images, 版本:v1.0.0

MAINTAINER <wmh>                         #维护者信息<wmh>

ARG VERSION=dev                          #定义变量
COPY ./tmp/demo-core.tar.gz /app/core    #COPY文件
WORKDIR /app/core                        #WORKDIR等于cd
RUN bash -c 'tar -xzvf demo-core.tar.gz' #RUN执行shell命令
ENV VERSION=${VERSION}                   #设置环境变量
EXPOSE 2222                              #对外暴露端口2222
CMD ["/tmp/run-java.sh"]                 #运行启动脚本

注:CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。

5 Dockerfile构建镜像

通过docker build从Dockerfile构建镜像。可以理解为我们已经画好工程图,开始施工啦,构建完之后就可以放到500坪的大平层啦。

代码语言:javascript复制
#使用当前目录的 Dockerfile 创建镜像,标签为 NewImages:v1.0.0
docker build -t NewImages:v1.0.0 .  # . 指当前路径下的Dockerfile

使用docker images查看刚构建的镜像

5 总结

以上就是Dockerfile的基本介绍了,感兴趣的小伙伴可以去实践一下。

顺便提下,在执行Run bash copy命令是注意文件的相对路径,我之前就在这里搞错了路径,折腾了很久......

最后找到原因的我眼泪留下来......

0 人点赞