zoukankan      html  css  js  c++  java
  • Docker学习笔记4 -- Dockerfile

    Dockerfile自定义镜像

    常见的镜像在DockerHub就能找到,但是我们自己写的项目就必须自己构建镜像了。

    而要自定义镜像,就必须先了解镜像的结构才行。

    镜像结构

    镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。

    我们以MySQL为例,来看看镜像的组成结构:

    image-20210731175806273

    简单来说,镜像就是在系统函数库、运行环境基础上,添加应用程序文件、配置文件、依赖文件等组合,然后编写好启动脚本打包在一起形成的文件。

    我们要构建镜像,其实就是实现上述打包的过程。

    Dockerfile语法

    构建自定义的镜像时,并不需要一个个文件去拷贝,打包。

    我们只需要告诉Docker,我们的镜像的组成,需要哪些BaseImage、需要拷贝什么文件、需要安装什么依赖、启动脚本是什么,将来Docker会帮助我们构建镜像。

    而描述上述信息的文件就是Dockerfile文件。

    Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。因此每一条指令的内容,就是描述该层应当如何构建。

    image-20210731180321133
    更新详细语法说明,请参考官网文档: https://docs.docker.com/engine/reference/builder

    案例1

    基于tomcat创建一个镜像,里面要有一个index.html,并写入Hello Docker。
    1、在宿主机创建一空白目录:

    mkdir -p /usr/local/docker/demo1
    

    2、在该目录下,创建一文件Dockerfile:

    vim Dockerfile
    

    3、其内容为:

    FROM tomcat //指定tomcat最新版本镜像
    RUN echo 'Hello qfnj Docker'>/usr/local/tomcat/webapps/ROOT/index.html
    

    这个Dockerfile很简单,一共就两行。涉及到了两条指令,FROM和RUN。
    4、构建镜像

    docker build -t demo1 .  
    -t :指定要创建的目标镜像名
    . :点代表Dockerfile文件所在目录,也就是当前目录,可以指定Dockerfile的绝对路径。
    

    5、运行镜像所在容器

    docker run --rm --name demo1-8080 -p 8080:8080 -d demo1
    

    访问浏览器即可成功该问。

    案例2

    案例:基于上一个镜像(基于tomcat)将ROOT内多余的文件都删除。只保留index.html
    1 基于如上修改Dockerfile

    FROM tomcat //指定tomcat最新版本镜像
    WORKDIR /usr/local/tomcat/webapps/ROOT/ //切换到该目录下
    RUN rm -rf * //将当前目录的文件都删掉
    RUN echo 'Hello qfnj Docker'>/usr/local/tomcat/webapps/ROOT/index.html
    

    WORKDIR 用来切换工作目录的。而不是用RUN。
    2、 构建镜像

    docker build –t 镜像名 . //Dockerfile上下文路径
    

    案例3

    案例:基于上一个镜像(基于tomcat)外部复制一个文件(图片),并复制到容器中并能访问。
    1 基于如上修改Dockerfile

    FROM tomcat //指定tomcat最新版本镜像
    WORKDIR /usr/local/tomcat/webapps/ROOT/ //切换到该目录下
    RUN rm -rf * //将当前目录的文件都删掉
    COPY 1.png /usr/local/tomcat/webapps/ROOT/
    RUN echo 'Hello qfnj Docker'>/usr/local/tomcat/webapps/ROOT/index.html
    

    2、 构建镜像

    docker build –t 镜像名 . //Dockerfile上下文路径
    

    案例4

    使用docker部署springboot项目,首先将jar包复制到一个文件夹里边。
    1 cd到该目录下
    2 新建Dockerfile文件

    vim Dockerfile
    

    3 添加命令

    FROM java:8
    VOLUME /tmp
    ADD boot-0.0.1-SNAPSHOT.jar exam.jar
    EXPOSE 8080
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/exam.jar"]
    

    4 执行构建命令

    docker build -t bootdemo .
    

    5 根据镜像构建容器即可访问。

  • 相关阅读:
    Map和Set
    js基本语法入门
    js中变量的作用域,let,const详解
    循环结构
    方法
    只有分享才能一起进步
    培训随笔
    得食相呼,义也
    Wall.e
    《国学之大智慧》观感
  • 原文地址:https://www.cnblogs.com/dcy521/p/15377465.html
Copyright © 2011-2022 走看看