docker build命令用于根据给定的Dockerfile构建Docker镜像

    1. docker build语法:
    2. docker build -t nginx:v1 .
    3. 常见选项说明:
    4. --build-arg,设置构建时的变量
    5. --no-cache,默认false。设置该选项,将不使用Build Cache构建镜像
    6. --pull,默认false。设置该选项,总是尝试pull镜像的最新版本
    7. --compress,默认false。设置该选项,将使用gzip压缩构建的上下文
    8. --disable-content-trust,默认true。设置该选项,将对镜像进行验证
    9. --file, -fDockerfile的完整路径,默认值为‘PATH/Dockerfile
    10. --isolation,默认--isolation="default",即Linux命名空间;其他还有processhyperv
    11. --label,为生成的镜像设置metadata
    12. --squash,默认false。设置该选项,将新构建出的多个层压缩为一个新层,但是将无法在多个镜像之间共享新层;设置该选项,实际上是创建了新image,同时保留原有image
    13. --tag, -t,镜像的名字及tag,通常name:tag或者name格式;可以在一次构建中为一个镜像设置多个tag
    14. --network,默认default。设置该选项,Set the networking mode for the RUN instructions during build
    15. --quiet, -q ,默认false。设置该选项,Suppress the build output and print image ID on success
    16. --force-rm,默认false。设置该选项,总是删除掉中间环节的容器
    17. --rm,默认--rm=true,即整个构建过程成功后删除中间环节的容器
    18. 格式说明:
    19. 命令要大写,"#"是注解。
    20. 每一个指令后面需要跟空格,语法。
    21. FROM 命令是告诉docker 我们的镜像什么从哪里下载。
    22. MAINTAINER 是描述 镜像的创建人。
    23. RUN 命令是在镜像内部执行。就是说他后面的命令应该是针对镜像可以运行的命令。
    24. Dockerfile文件说明:
    25. FROM python:2.7-slim
    26. # 使用官方提供的 Python 开发镜像作为基础镜像
    27. # 指定"python:2.7-slim"这个官方维护的基础镜像,从而免去安装 Python 等语言环境的操作。:
    28. WORKDIR /app ---cd /app
    29. # 将工作目录切换为 /app,意思是在这一句之后,Dockerfile 后面的操作都以这一句指定的 /app 目录作为当前目录。
    30. ADD . /app
    31. # 将当前目录下的所有内容复制到 /app 下 Dockerfile 里的原语并不都是指对容器内部的操作。比如 ADD,指的是把当前目录(即 Dockerfile 所在的目录)里的文件,复制到指定容器内的目录当中。
    32. RUN pip install --trusted-host pypi.python.org -r requirements.txt
    33. # 使用 pip 命令安装这个应用所需要的依赖
    34. EXPOSE 80
    35. # 允许外界访问容器的 80 端口
    36. ENV NAME World
    37. # 设置环境变量
    38. CMD ["python", "app.py"]
    39. # 设置容器进程为:python app.py,即:这个 Python 应用的启动命令,这里app.py 的实际路径是 /app/app.py。CMD ["python", "app.py"] 等价于 "docker run python app.py"。
    40. 实战练习:创建一个jenkinsDockerfile
    41. 准备工作:
    42. mkdir jenkins
    43. cd jenkins 上传jdkmaventomcatjenkins的包
    44. vim Dockerfile
    45. FROM centos:7
    46. ADD jdk-8u211-linux-x64.tar.gz /usr/local/
    47. ADD apache-tomcat-8.5.69.tar.gz /usr/local/
    48. ADD apache-maven-3.8.1-bin.tar.gz /usr/local/jdk1.8.0_211/
    49. ENV JAVA_HOME /usr/local/jdk1.8.0_211/
    50. ENV MAVEN_HOME /usr/local/jdk1.8.0_211/apache-maven-3.8.1/
    51. ENV TOMCAT_HOME /usr/local/apache-tomcat-8.5.69/
    52. ENV PATH $JAVA_HOME/bin:$MAVEN_HOME/bin:$TOMCAT_HOME/bin:$PATH
    53. RUN rm -rf /usr/local/apache-tomcat-8.5.69/webapps/*
    54. ADD jenkins.war /usr/local/apache-tomcat-8.5.69/webapps/
    55. EXPOSE 8080
    56. ENTRYPOINT ["/usr/local/apache-tomcat-8.5.69/bin/catalina.sh","run"]
    57. docker build -t jenkins:v1 .
    58. docker run -itd --name jenkins -p 8081:8080 jenkins:v1
    59. 网页登录:http://localhost:8080/jenkins
    60. CMD与ENTRYPOINT区别
    61. 一、Dockerfile中的CMD
    62. 1、每个Dockerfile中只能有一个CMD如果有多个那么只执行最后一个。
    63. 2、CMD 相当于启动docker时候后面添加的参数看,举个简单例子:
    64. # docker run -itd --name test image(镜像) /bin/bash -c
    65. a、镜像名称后面跟了一个/bin/bash -c ,其实等价于在dockerfile中的CMD ["/bin/bash","-c"]。
    66. b、如果dockerfile中的CMD中有了CMD["/bin/bash","-c"],那么就不用在执行的时候再添加了,如果添加了参数的话那么就相当于要执行你添加的参数,默认的CMD中的参数就无效了。
    67. 二、Dockerfile中的ENTRYPOINT
    68. 1、一个Dockerfile中ENTRYPOINT也只能存在一个,若存在多个那么只执行最后一个,你可以理解为开机启动的意思,和CMD有点像,不过还是有区别。
    69. 2、举个简单例子:
    70. a、Dockerfile中有ENTRYPOINT ["tail","-f","/var/log/nginx/access.log"],那么启动的时候镜像就执行了这个里面的内容,如果你像上面带参数的话就相当于在这个执行的内容后面再加入参数。
    71. 案例:
    72. 如果我们的dockerfile中有a中的这句话然后我们启动我们的docker:
    73. # docker run -itd --name test image(镜像名) /bin/bash -c
    74. 此时就相当于我们启动docker的时候执行了:tail -f /var/log/nginx/access.log /bin/bash -c
    75. 这个命令明显就不对
    76. 参考链接:https://blog.csdn.net/k_520_w/article/details/111731198