保留字 作用
FROM 当前镜像是基于的哪个镜像 第一个指令必须是FROM
MAINTAINER 镜像维护者的姓名和邮箱地址 # 禁用了目前
RUN 构建镜像时需要运行的指令
EXPOSE 当前容器对外暴露出的端口号
WORKDIR 指定在创建容器后,终端默认登录进来的工作目录,一个落脚点
ENV 用来在构建镜像过程中设置环境变量
ADD 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar包
COPY 类似ADD,拷贝文件和目录到镜像中
VOLUME 容器数据卷,用于数据保存和持久化工作
CMD 指定一个容器启动时要运行的命令
ENTRYPOINT 指定一个容器启动时要运行的命令
简单示例
# vim Dockerfile
FROM centos:7 # 基于哪个镜像来构建
RUN yum install -y vim # 运行的指令安装vim
WORKDIR /data
WORKDIR bb # WORKDIR可以写多次,bb是基于上面一层下构建
COPY aa.txt /data/bb #拷贝目录,源目录到目标目录
ADD https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.15/bin/apache-tomcat-8.5.15.tar.gz /data/bb # 可以添加远程下载包,但是不会自动解压
# 构建
docker build -t mycentos7:01 . .表示当前目录
示例
FROM openjdk:8-jre #基于哪个镜像进行构建
WORKDIR /app #定义进入容器时默认位置,接下来后续操作工作位置
ADD demo-0.0.1-SHAPSHOP.jar app.jar # 添加一个jar包并重命名为app.jar
EXPOSE 8081 #暴露一个8081端口 为了后面可以映射
ENTRYPOINT ['java', '-jar'] #启动时 这个是不变的 所以用ENTRYPOINT写死
CMD ["app.jar"] # 这个写可以改变的
两者区别:当docker run启动时,后面没有跟参数,那么CMD就可以作为默认参数执行命令,如果docker run后面有参数,那么CMD将被替换掉不执行。
当docker run启动时,后面没有跟参数,ENTRYPOINT会被执行,当docker run后面有参数时,ENTRYPOINT先执行,然后再执行docker run的参数,也就是说ENTRYPOINT不会被忽略,一定会被执行。当docker run 没有参数时,ENTRYPOINT和CMD都有参数,那么会先执行ENTRYPOINT的参数,CMD则作为默认参数跟其后执行。
# 执行构建
docker build -t demo:01
# 运行容器
docker run -d -p 8081:8081 --name demo demo:01