语法:FROM :
指明构建的新镜像来自那个基础镜像,如果没有选择tag,那么默认值为latest。
FROM centos:7 #如果不以任何镜像为基础,那么写法为:FROM scratch。官方说明:scratch镜像是一个空镜像,可以用于构建busybox等超小镜像,可以说是真正的从零开始构建属于自己的镜像2、MAINTAINER(deprcated)
语法:MAINIAINER
指明镜像维护着及联系方式(一般是邮箱地址)。过时,推荐使用LABEL.
MAINIAINER tom3、LABEL
语法:LABEL = = =
功能是为镜像指定标签。也可以使用LABELl来指定镜像作者
LABEL maintainer="tom@qq.com"4、RUN
语法:RUN
构建镜像时运行的shell命令,比如构建的新镜像中我们想在/usr/local 目录下创建一个java目录。
RUN mkdir -p /usr/local/java5、ADD
语法:ADD …
拷贝文件或目录到镜像中。src可以是一个本地文件或者是一个本地压缩文件,压缩文件会自动解压。还可以是一个url,如果吧src写成一个url。那么ADD就类似于wget命令,然后自动下载和解压
ADD jdk-1.8.0_linux_x64_bin.tar.gz /usr/local/java6、COPY
语法:COPY …
拷贝文件或者目录到镜像中。用法同ADD,只是不支持下载和解压。
COPY jdk-1.8.0_linux_x64_bin.tar.gz /usr/local/java7、EXPOSE
语法:EXPOSE [/ …]
暴露容器运行时的监听端口给外部,也可以指定端口时监听TCP还是UDP,如果未指定协议,则默认为TCP。
EXPOSE 80 443 8080/tcp
如果想使得容器与宿主机的端口有映射关系,必须在容器启动的时候加上-P参数。
8、ENV语法:ENV 添加单个,ENV =…添加多个
设置容器内环境变量
ENV JAVA_HOME /usr/local/java/jdk-1.8.0/9、CMD
语法
CMD ehco $JAVA_HOME #如果创建容器的时候指定了命令,则CMD命令会被替代。假如镜像叫centos:7 ,创建容器时命令是:docker run -it --name centos7 centos:7 echo "helloworld" 或者docker run -it --name centos7 centos:7/bin/bash,就不会输出SJAVA_ HOME的环境变量信息了,因为CMD命令被echo "helloworld"、 /bin/bash 覆盖了。
启动容器时执行的Shell命令。在Dockerfile中只能有-条CMD指令。如果设置了多条CMD,只有最后-条CMD会生效。
10、ENTRYPOINT启动容器时执行的Shell命令,同CMD类似,不会被docker run命令行指定的参数所覆盖。在Dockerfile中只能有一条ENTRYPOINT指令。如果设置了多条ENTRYPOINT, 只有最后一 条ENTRYPOINT会生效。
语法
ENTRYPOINT ehco $JAVA_HOME #如果在Dockerfile中同时写了ENTRYPOINT和CMD,并且CMD指令不是一个完整的可执行命令,那么CMD指定的内容将会作为ENTRYPOINT的参数; #如果在Dockerfile中同时写了ENTRYPOINT和CMD,并且CMD是一个完整的指令,那么它两会互相覆盖,谁在最后谁生效11、WORKDIR
语法:WORKDIR /path/data
为RUN、CMD、ENTRYPOINT 以及COPY和AND设置工作目录。
WORKDIR /usr/local #指定进入容器的默认目录是 /usr/local12、VOLUME
指定容器挂载点到宿主机自动生成的目录或其他容器。-般的使用场景为需 要持久化存储数据时。
#容器的/var/lib/mysq1 目录会在运行时自动挂载为匿名卷,匿名卷在宿主机的/var/lib/docker/volumes 目录下 VOLUME [" /var/lib/mysq1"]
一般不会在Dockerfile中用到,更常见的还是在docker run的时候通过-V 指定数据卷。
2、Dockerfile文件编写 1、Dockerfile创建镜像centos+tomcat镜像
#指明构建的新新镜像来源 hub.c.163.com/public/centos:6.7-tools 基础镜像 FROM hub.c.163.com/public/centos:6.7-tools #通过镜像标签声明作者信息 LABEL maintainer="tom@qq.com" #设置默认工作目录 WORKDIR /usr/local #新镜像构建成功以后创建目录 RUN mkdir -p /usr/local/java && mkdir mkdir -p /usr/local/tomcat #拷贝文件到镜像中并解压 ADD apache-tomcat-7.0.54.tar.gz /usr/local/tomcat ADD jre-8u291-linux-x64.tar.gz /usr/loacl/java #暴露容器运行时的8080 监听端口给外部 EXPOSE 8080 #设置容器内 JAVA_HOME 环境变量 ENV JAVA_HOME /usr/local/java/jre1.8.0_291 ENV PATH $PATH:$JAVA_HOME/bin #启动容器时启动 tomcat run 保持在前台有运行程序 CMD ["/usr/local/tomcat/apache-tomcat-7.0.54/bin/catalina.sh","run"]2、生效Dockerfile文件
# build -f 指定构建文件为Dockerfile -t 指定创建完成的镜像名字和版本 # . 加载资源位置为当前上下文件 就是当前目录 [root@centos08 dockerfile]# docker build -f Dockerfile -t mytomos:01 . Sending build context to Docker daemon 101.6MB Step 1/10 : FROM hub.c.163.com/public/centos:6.7-tools ---> b2ab0ed558bb Step 2/10 : LABEL maintainer="tom@qq.com" ---> Running in c7852639b35a Removing intermediate container c7852639b35a ---> de18d3412acf Step 3/10 : WORKDIR /usr/local ---> Running in c9eeb179873b Removing intermediate container c9eeb179873b ---> 7a05459a464b Step 4/10 : RUN mkdir -p /usr/local/java && mkdir mkdir -p /usr/local/tomcat ---> Running in 106b663d0574 Removing intermediate container 106b663d0574 ---> e3ce2f044210 Step 5/10 : ADD apache-tomcat-7.0.54.tar.gz /usr/local/tomcat ---> f7166e58bf62 Step 6/10 : ADD jre-8u291-linux-x64.tar.gz /usr/loacl/java ---> 3b5110822120 Step 7/10 : EXPOSE 8080 ---> Running in af27cec32269 Removing intermediate container af27cec32269 ---> c7e1da83a374 Step 8/10 : ENV JAVA_HOME /usr/local/java/jre1.8.0_291 ---> Running in 89567b40f4c3 Removing intermediate container 89567b40f4c3 ---> bab67686ad81 Step 9/10 : ENV PATH $PATH:$JAVA_HOME/bin ---> Running in 82603c12aa5e Removing intermediate container 82603c12aa5e ---> 7d5d9ef25aa3 Step 10/10 : CMD ["/usr/local/tomcat/apache-tomcat-7.0.54/bin/catalina.sh","run"] ---> Running in 90283457d447 Removing intermediate container 90283457d447 ---> d4552256d551 Successfully built d4552256d551 Successfully tagged mytomos:01 #查看构建成功的镜像 [root@centos08 dockerfile]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mytomos 01 d4552256d551 9 seconds ago 867MB hello-world latest d1165f221234 3 months ago 13.3kB hub.c.163.com/public/centos 6.7-tools b2ab0ed558bb 4 years ago 602MB3、启动生成的镜像
[root@centos08 dockerfile]# docker run -id --name mytomos -p 8080:8080 mytomos:01 a76f129bf6e030d887371cec047b1daadf24e016499314927aace432d6b92605
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)