Dockerfile常用指令
---------------------
- FROM 基于什么镜像的
- WORKDIR 指定接下来的shell语句是运行在哪个路径下
- COPFY 当前宿主机上的文件拷贝到镜像中去
- COPY和ADD比较相似,COPY一般源地址为当前的这个文件系统的原地址;
- ADD 的地址不光是可以是文件系统,还可以是一个URL;
- 如有没有用到网络资源用COPY就可以了
- CMD 指定我们整个镜像启动起来的时候运行的脚本
- 和run很像,但是run是构建的时候就运行语句脚本,CMD在容器真正运行的时候才会真正运行
- ENTRYPOINT和CMD也很像,但是俩如果未指定都是继承自父镜像,如果祖辈也没有知道CMD或者ENTRYPOINT,则镜像无法构建(如果ENTRYPOINT非json则以ENTRYPOINT为准,如果ENTRYPOINT和CMD都是json则ENTRYPOINT+CMD拼接成shell)
--------------------------
EXPOSE(指定当前我们的镜像所暴露出来的一个端口)
例如执行docker inspect nginx:1.13 (我们可以在里面看到配置文件ExposedPorts 80/tcp)
VOLUME /a/b(把容器中的/a/b这个目录映射到宿主机的一个目录下)
docker run 中 -p 和 -v是分别指定映射到外部的端口和目录
-------------------------
指定参数的几种方式:
ENV(可以指定当前容器的环境 变量,这是一个构建参数,只有在构建和运行时候都生效的,是系统的一个环境变量)
ARG(这是一个构建参数,只有在构建的时候才有效,真正运行的时候就无效了)
--------------------------
LABEL (主要是用来指定源数据,没有实际作用)
ONBUILD(后面可以接任意参数 如 ONBLE ENV A=10)
STOPSIGNAL (指定我们当前容器用什么样的信号名)
HEALTHCHECK(容器的健康情况)
SHELL (基于哪种SHELL; linux 一般是/bin/bash; windows 一般是CMD)
======================================================================================
Dockerfile用法案例
1.创建编写一个普通的Dockerfile
FROM alpine:latest
WORD /app
COPY src/ /app #把src下的文件拷贝到app下
RUN echo 123>>1.txt
CMD tail -f 1.txt
#cmd 一般指定为阻塞方式如tail -f脚本 到此整个生命周期就结束了
#cmd cat 1.txt(这是一个非阻塞的)
2.构建镜像
#构建一个名字为test镜像( .表示这个dockerfile位于当前路径下)
docker build -t test .
3.运行这个test镜像使其成为一个容器
docker run test