Dockerfile用法全解析

1.Dockerfile的例子

  • eg:文件名是Dockerfile,src/目录下有个1.txt文件
    在这里插入图片描述
1)Dockerfile中的内容如下:
FROM alpine
WORKDIR /app
COPY src/ /app
RUN echo 321>> 1.txt
CMD tail -f 1.txt 或者CMD cat 1.txt或者CMD ["cat","1.txt"]2)在命令行输入:
-t表示构建成的镜像名字是:test,指定版本就是test:latest,点表示位于当前目录
docker build -t test .

docker run test
123321

2.Dockerfile指令的用法

  • Dockerfile作用:构建Docker镜像的配置文件
  • 重要的指令如下:
FROM 表示基于什么什么镜像

WORKDIR  表示:当前的工作目录,shell语句运行在哪个路径下,没有目录会自动创建

COPY	将宿主机的文件拷贝至容器中的目录下

RUN		在构建的时候,就要运行的脚本shell语句

CMD		容器运行的时候,才会运行的脚本,该语句执行完毕后,镜像的生命周期也就结束了,所以一般可以
指定为阻塞式的,eg:tail -f
---------------------------------------------------------------------------
EXPOSE		指定当前镜像所暴露出来的端口
eg:docker inspect nginx中的Config这一项的ExposedPorts就是暴露出的端口,可以通过
docker run P 将该端口映射到主机的随机端口,若将net指定为host模式,会将该端口绑定到本机
的80端口

VOLUME	/a/b	指定映射文件,一般是映射到匿名卷,将容器中的/a/b目录映射到主机的一个目录下,
eg:docker run中-p和-v都分别指定映射到外部的端口和目录
---------------------------------------------------------------------------
ENV		指定参数,容器的环境变量,docker -e可以指定环境变量,容器运行时的环境变量
eg:
FROM alpine
WORKDIR /app
COPY src/ /app
ENV A=10 或者 ENV A 10
CMD echo $A

ARG		构建参数,只有构建的时候才会有效,构建指的是:docker build
其实际作用是通过参数--build-arg指定变量的值,在构建时起到临时修改内部变量的效果
在dockerfile中其值相当于默认参数
eg:
FROM alpine
WORKDIR /app
COPY src/ /app
ARG B=10
ENV A=$B
CMD echo $A

运行的结果是10

如果使用docker build -t test --build-arg B=12 .
构建后,再运行的结果是:12
---------------------------------------------------------------------------
LABEL	指定元数据信息,作用就是看镜像是否有标识,没啥具体作用
eg:
FROM alpine
LABEL k="v" k1="v1"
WORKDIR /app
COPY src/ /app
ARG B=10
ENV A=$B
CMD echo $A

ONBUILD	后面可以接dockerfile其它的命令,指定在当前镜像下不会去运行
若另一个镜像是基于当前镜像的话,就会在另一个镜像的FROM后面执行ONBUILD,就是会继承父镜像相关指令
eg:
FROM alpine
LABEL k="v" k1="v1"
WORKDIR /app
COPY src/ /app
ONBUILD ENV C=100
CMD echo $C

再创建一个teset2目录,且新建一个Dockerfile文件
FROM test

执行命令:在test2目录下,构建了一个名为test2的镜像(-t参数)
docker build -t test2 test2
docker run test
最终打印100

docker run test
会打印空行
---------------------------------------------------------------------------
STOPSIGNAL	指定容器用什么信号可以停止,很少用,eg:STOPSIGNAL SIGINIT,STOPSIGNAL KILL
HEALTHCHECK		检查容器是否健康
SHEEL	指定RUN,CMD是哪种shell,linux一般默认是/bin/sh
---------------------------------------------------------------------------1)COPY与ADD的区别:
都是可以从主机外复制到镜像里面
COPY的源地址是主机文件系统的源地址,ADD的源地址不仅可以是主机文件系统的源地址,还可以是URL
推荐使用COPY

(2)CMD与EENTRYPOINt的区别:
都是指定容器运行起来的核心脚本
若ENTRYPOINt的形式非json数组形式,则以ENTRYPOINt为准,CMD指令无效;
ENTRYPOINt和CMD都是json,则ENTRYPOINt+CMD拼接成shell语句来执行;

ONBUILD用法的对应图片
在这里插入图片描述

参考:

https://www.bilibili.com/video/av85895204
发布了569 篇原创文章 · 获赞 140 · 访问量 17万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章