目录
1.FROM(最开始的语法 定制基本的镜像)
1.FORM scrath 制作base image
2.FROM centos base image
3.FROM ubantu
2.RUN (运行指令)
1.shell格式 :命令行模式,等同于在终端输入命令
格式:RUN (shell form, the command is run in a shell, which by default is /bin/sh -c on Linux or cmd /S /C on Windows)
2.exec 模式:可执行文件
格式:RUN [“executable”, “param1”, “param2”] (exec form)
为了美观,复杂的RUN请用反斜线换行!避免无用分层,合并多条命令成一行!
3.WORKDIR(设置当前目录)
案例:
WORKDIR
WORKDIR/ROOT
WORKDIR /test
WORKDIR demo
RUN pwd # 输出/test/demo
4.ADD and COPY ( 主机资源添加到镜像中 ,解压缩等)
1.案例
ADD test.tar.gz / 添加到根目录解压
WORKDIR /root
ADD hello test #/ root/test/hello
大部分情况,COPY优于ADD! ADD除了COPY还有额外功能(解压!)添加远程文件/目录请使用curl或者wget!
4.ENV 定义环境变量
格式:key value or key=value
1.案例
.ENV name lailai
RUN mkdir $env
- 通过ENV定义的环境变量,可以在dockerfile被后面的所有指令中使用 $变量
- 启动容器后,在容器实例中,可以通过env命令查看环境变量
- 在docker run 命令中通过-e标记来传递环境变量,这样容器运行时就可以使用该变量
5.VOLUME EXPOSE
VOLUME 挂载数据卷
格式:VOLUME ["<路径1>", “<路径2>”…]
VOLUME <路径>
1.避免重要数据因为容器重启而丢失
2.避免容器越来越大
在启动容器 docker run 的时候,我们可以通过 -v 参数修改挂载点。
EXPOSE 端口声明
6.CMD ENTRYPOINT
CMD
- CMD 容器启动时默认的执行命令
- 如果docker run 指定了其他 cmd被忽略
- 如果定义了多个 执行最后一个
- 同run 功能一样,但是运行时间不同 RUN是在docker build运行 CMD是在docker run 运行
案例:
CMD echo 'hello docker '
ENTRYPOINT
格式:
ENTRYPOINT ["","","",…]
- 让容器以应用程序或者服务的形式运行
- 不会被忽略一定会执行
- 同CMD一样也是指令 但是不会被run运行时的指令所取代,除非!docker run --entrypoint 将会覆盖ENTRYPOINT
- 4.可以搭配 CMD 命令使用:一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参,以下示例会提到。
示例:
FROM nginx
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参
1.不传参
$ docker run nginx:test
脚本指令:
nginx -c /etc/nginx/nginx.conf
2.传参
$ docker run nginx:test -c /etc/nginx/new.conf
脚本指令:
nginx -c /etc/nginx/new.conf
COPY docker-entyr.sh /usr/local/bin
ENTRYPOINT ['docker-entrypoint.sh']
ENTRYPOINT ['java -jar' ' xxx' ]
7.LABEL (描述信息:作者,版本等)
1.LABEL maintainer='lailai@com’
2.LABLE version='1.0’
3.LABEL description ='这是描述’
LEBEL/Metadata 不可少!