zoukankan      html  css  js  c++  java
  • Docker之dockerfile制作jdk镜像

    目的:

      Dockerfile简介

      Dockerfile制作jdk镜像


    Dockerfile简介

      了解dockerfile之前要先了解Docker基本概念和使用可参考:https://www.cnblogs.com/huangting/p/11960196.html

      Dockerfile是一个文本文档,文本里面包含了很多命令,每一条命令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。有了 Dockerfile,当我们定义自己额外添加的需求时,只需在 Dockerfile 上添加或者修改指令,重新docker image build即可,省去了敲命令的麻烦。

      殷切我们使用Docker时其中的镜像和容器都是基于Dockerfile运行的,所以Dockerfile可以快速定义镜像;

    简单来说就如同pom文件去构建maven工程一样

    我们来用一张图来康康镜像,容器和Docker之间的关系:

      这三者的关系就是  Dockerfile构建镜像,然后运行镜像启动容器。

    Dockerfile基本结构

        Dockerfile 由一行行命令语句组成,并支持以 # 开头的注释行。例如:

      主体内容分为四部分:

           基础镜像信息、 维护者信息、 镜像操作指令和容器启动时执行指令。

      基础镜像信息            FROM: 指令用于指定要构建的镜像的基础镜像。它通常是 Dockerfile 中的第一条指令。
       维护者信息              MAINTAINER: 指令设置生成图像的作者字段。
       镜像操作指令            RUN: 指令用于在镜像中执行命令,这会创建新的镜像层。每个 RUN 指令创建一个新的镜像层。
                   (COPY
    /ADD): 指令用于将文件作为一个新的层添加到镜像中。通常使用 COPY 指令将应用代码赋值到镜像中。
                   EXPOSE: 指令用于记录应用所使用的网络端口。
                   WORKDIR:在执行RUN后面的shell命令前会先cdWORKDIR后面的目录
                   ONBUILD:指令将映像用作另一个构建的基础时,将在以后的时间向该映像添加触发指令。
    容器启动时执行指令 CMD:
    指令中只能有一条指令Dockerfile,如果列出多个,则只有最后一个CMD才会生效,指令的主要目的是为执行中的容器提供默认值。
                   ENTRYPOINT:指令用于指定镜像以容器方式启动后默认运行的程序。

    Dockerfile参数详解:https://docs.docker.com/engine/reference/builder/

     这是Docker官网:https://docs.docker.com/

    我们在Docker中下载镜像就是在这里下载,然而这些镜像也是大神用Dockerfile写出来的,所以今天我们也要使用Docker来自定义一个jdk镜像,提供给自己用。


    Dockerfile制作jdk镜像

       像以前的话,我们直接下载一个jdk镜像或者搞个jdk压缩包。

      

          

      然后把它放进centos中,解压不,然后去找etc下的profile文件,在里面添加你存放jdk的地址。

      

      然后java -version测试

       

         现在我们自己用Docker制作来制作JDK镜像

    启动虚拟机,进入centos

     #创建镜像目录
          mkdir –p /javaxh_docker/jdk

      

    #安装lrzsz命令
          yum install lrzsz -y    //没有就下载,有就不用下载,我之前一直下载失败,我以为镜像有问题,结果发现他自己有。
    #选择文件进行上传
        rz  


      # 注意d是大写
          touch Dockerfile   //拷贝到容器 

         

    1. 创建文件夹上传jdk的安装包,和在同级目录下编写Dockerfile文件

        执行vi Dockerfile 把下面的内容放进Dockerfile文件中:

         #1.指定基础镜像,并且必须是第一条指令
            FROM centos:7
    
            #2.指明该镜像的作者和其电子邮件
            MAINTAINER xxx "xxx@qq.com"
    
            #3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
            WORKDIR /javaxh_docker/jdk
    
            #4.一个复制命令,把jdk安装文件复制到镜像中,语法:ADD <src>... <dest>,注意:jdk*.tar.gz使用的是相对路径
            ADD jdk-8u221-linux-x64.tar.gz /javaxh_docker/jdk/
    
            #5.配置环境变量
            ENV JAVA_HOME=/javaxh_docker/jdk/jdk1.8.0_221
            ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
            ENV PATH=$JAVA_HOME/bin:$PATH
    
            #容器启动时需要执行的命令
            #CMD ["java","-version"]

       

    3.执行Dockerfile文件,初次依赖镜像的时候会下载相应镜像

    docker build -t jdk8:v1.0 .

       注1:-t  jdk8:v1.0  给新构建的镜像取名为 jdk8, 并设定版本为 v1.0

          注2:注意最后有个点,代表使用当前路径的 Dockerfile 进行构建

      4.查看镜像

    docker images

      

      5.创建并启动容器

    docker run -it jdk8:v1.0 /bin/bash

      6.检查是否有问题

     javac

    谢谢观看!!

      

  • 相关阅读:
    linux expr命令执行问题
    Virtual Box设置Host only模式的网络互通问题
    Linux下管理软件的方法
    转载 AMI方案和Insyde方案
    笔记二(名词详解)持续更新。。。
    笔记一(固件、BIOS、UEFI)
    Cache As Ram
    (二十四)C语言之文件
    (二十三)C语言之位运算
    (二十二)C语言之typedef
  • 原文地址:https://www.cnblogs.com/huangting/p/11966450.html
Copyright © 2011-2022 走看看