🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 1、简介 Dockerfile是用来构建Docker镜像的文件,是由一系列命令和参数构成的脚本 Dockerfile从FROM命令开始,紧接着各种命令、参数等,最终会生成一个新的镜像 使用Dockerfile构建镜像的步骤: a、编写Dockerfile文件 b、使用docker build构建镜像 c、使用docker run运行容器 ## 2、用法 ### 2.1、语法规则 * 指令必须要大写,且后面必须跟参数 * 第一条指令必须是FROM,指定Base Image 基础镜像 * 指令按从上往下的顺序,依次执行 * 每条指定都会创建一个新的镜像层并提交 * # 表示注释 ### 2.2、常用指令 | 指令 | 解释 | | --- | --- | | FROM | 指定基础镜像,即当前新镜像是基于哪个镜像的 | | MAINTAINER | 指定作者 | | RUN | 指定构建过程中要运行的命令 | | ENV | 设置环境变量 | | WORKDIR | 指定默认的工作目录,即进入容器后默认进入的目录 | | VOLUME | 创建挂载点,也称容器数据卷,用于数据共享和持久化 | | CMD | 指定容器启动时要运行的命令,与RUN不同的是,这些命令不是在镜像构建过程中执行的 | | ENTRYPOINT | 指定容器启动时要运行的命令,与CMD有区别 | | COPY | 拷贝文件/目录到镜像中 | | ADD | 拷贝文件到镜像中,且会自动解压缩 | | EXPOSE | 指定对外暴露的端口 | ## 3、案例 ### 3.1 自定义centos镜像# 1.编写Dockerfile文件 ``` vi Dockerfile2 FROM centos MAINTAINER yuanke.com ENV MYPATH /usr/local/centos RUN mkdir ­-p $MYPATH WORKDIR $MYPATH RUN yum -­y install vim RUN yum ­-y install wget # 创建挂载点,无法指定宿主机上对应的目录,是自动生成的 VOLUME ["/data1","/data2"] CMD ["/bin/bash"] # 2.使用docker build构建镜像 docker build -­f Dockerfile2 -­t itany/centos:v1 . # 3.使用docker run运行容器 docker run ­-it b25b1dad795c # 查看镜像的变更历史 docker history b25b1dad795c # 验证挂载点: /var/lib/docker/volumes/0b001b4cc8db1ebbbb4c537c17a5c44adb700fb0e1b941bc82cc717c4ae196f 6/_data /var/lib/docker/volumes/f020f5a5664bf68312be9f49a640f27ecfb49990b231aaf3d0eb7cb723fa0dd d/_data ``` CMD和ENTRYPOINT的区别: * CMD 在Dockerfile中可以有多个CMD指令,但只有最后一条指令生效,所以一般只有一条CMD指令 CMD指令在被docker run之后的参数覆盖 ``` vi aaa FROM centos CMD ["/bin/ls"] CMD ["/bin/bash"] docker build ­-f aaa -­t itany/aaa . docker run ­-it itany/aaa docker run ­it itany/aaa /bin/pwd ``` * ENTRYPOINT docker run之后的参数会被作为ENTRYPOINT指令的参数,组合形成新的命令 ``` vi bbb FROM centos ENTRYPOINT ["/bin/ls","/usr/local"] docker build ­-f bbb -­t itany/bbb . docker run ­-it itany/bbb docker run ­-it itany/bbb ­-l # ls /usr/local ­-l ``` ### 3.2、自定义tomcat镜像 ``` # 准备工作 # 1.编写Dockerfile文件 vi Dockerfile FROM centos MAINTAINER yuanke@163.com # 拷贝文件,文件必须与Dockerfile在同一目录下 COPY teacher.txt /usr/local ADD jdk­8u171­linux­x64.tar.gz /usr/local ADD apache­tomcat­8.5.30.tar.gz /usr/local # 配置环境变量 ENV JAVA_HOME /usr/local/jdk1.8.0_171 ENV CLASSPATH .:$JAVA_HOME/lib ENV CATALINA_HOME /usr/local/apache­tomcat­8.5.30 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin WORKDIR $CATALINA_HOME RUN yum -­y install vim EXPOSE 8080 CMD ["catalina.sh", "run"] # 2.使用docker build构建镜像 docker build ­t itany/tomcat:1.0 . # 3.使用docker run运行容器 docker run \ ­­ --name mytomcat \ -­p 8080:8080 \ -­v /my/tomcat/webapps/spring­web.war:/usr/local/apache­tomcat­8.5.30/webapps/spring­ web.war \ ­ -d itany/tomcat:1.0 ```