6.1 FROM
语法 from <image>:<tag> FROM centos:7 FROM scratch #最小镜像
6.2 LABLE
指定镜像作者 LABLE maintainer="Sdy"
6.3 RUN
运行命令 RUN mkdir -p /usr/local/java
6.4 ADD
拷贝文件或目录到镜像中,src可以是一个本地文件夹或是本地压缩文件夹,压缩文件夹会自动解压,还可以是一个url,如果把src写成url,那么ADD类似于wget命令,然后自动下载和解压 ADD jdk-11.0.12_linux-x64_bin.tar.gz /usr/local/java
6. 5 COPY
弱化版ADD,拷贝文件,不会自动下载或解压 COYP jdk-11.0.12_linux-x64_bin.tar.gz /usr/local/java
6.6 EXPOSE
暴露容器和解压,可指定协议tcp或udp,不指定默认为tcp EXPOSE 80 443 8080/tcp
6.7 ENV
设置环境变量 ENV JAVA_HOME=/usr/local/java/jdk-11.0.12 ENV PATH=PATH:JAVA_HOME/bin
6.8 CMD
启动容器时执行的Shell命令。在Dockerfile中只能有一条cmd命令,如果有多条,只有最后一条生效。 CMD ehco $JAVA_HOME #打印环境变量
6.9 ENTRYPOINT
启动容器时执行shell命令,同cmd类似,不会被docker run所覆盖。同样dockerfile中只有最后一条ENTRYPOINT指令生效。
如果在Dockerfile中同时写ENTRYPOINT和CMD,并且CMD指令不是一个完整的可执行命令,那么 CMD指定的内容将会作为ENTRYPOINT的参数;
如果在Dockerfile中同时写ENTRYPOINT和CMD,并且CMD是一个完整指令,那么它两会互相覆盖,谁在最后谁生效
6.10 WORKDIR
为RUN/CMD/ENTRYPOINT/COPY/AND等,设置工作目录 WORKDIR /usr/local
6.11 VOLUME
#容器 /varlib/mysql目录在运行时自动挂载为匿名卷,匿名卷的宿主机的 /var/lib/docker/volumes 目录下 VOLUME ["/varlib/mysql"]
一般不会在Dockerfile中用到,更常见的还是在docker run 的时候通过 -v 指定数据卷。
6.12 Dockerfile实战
mkdir /usr/local/dockerfile #创建目录 cd /usr/local/dockerfile #跳转目录 vi Dockerfile #编辑dockerfile文件(:set paste 进行粘贴)
# 指明构建的新镜像的基础镜像来自哪 FROM centos:7 # 通过镜像标签声明了作者信息 LABEL maintainer="sdy" # 设置工作目录 WORKDIR /usr/local # 新镜像构建成功以后创建指定目录 RUN mkdir p /usr/local/java && mkdir /usr/local/tomcat # 拷贝文件到镜像中并解压 ADD jdk-11.0.12_linux-x64_bin.tar.gz /usr/local/java ADD apache-tomcat-9.0.52.tar.gz /usr/local/tomcat # 暴露容器 EXPOSE 8080 # 设置容器内java的环境变量 ENV JAVA_HOME=/usr/local/java/jdk-11.0.12 ENV PATH=$PATH:$JAVA_HOME/bin # 启动tomcat CMD ["/usr/local/tomcat/apache-tomcat-9.0.52/bin/catalina.sh","run"]
构建镜像 docker build -f /usr/local/dockerfile/Dockerfile -t mycentos:7 /usr/local/dockerfile/
docker build 构建命令
第一个url是dockerfile文件的路径
第二个url是资源所在文件夹的路径
通过镜像创建容器 docker run -di --name mycentos7 -p 8080:8080 mycentos:7 肉眼查看浏览器运行tomcat,地址:http://192.168.146.124:8080/