目的:

  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: #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..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

谢谢观看!!

  

Docker之dockerfile制作jdk镜像的更多相关文章

  1. Docker —— 使用 Dockerfile 制作 Jdk + Tomcat 镜像

    一.准备好Jdk和Tomcat apache-tomcat-8.5.50.tar.gz jdk-8u212-linux-x64.tar.gz 注意: Jdk 和 Tomcat 记得从官网下载,否则制作 ...

  2. Dockerfile介绍、Docker制作jdk镜像

    Dockerfile介绍.Docker制作jdk镜像 目标 1.Dockerfile简介 2.Docker制作jdk镜像 Dockerfile简介 dockerfile 是一个文本格式的配置文件, 用 ...

  3. Docker系列(24)- 实战:DockerFile制作tomcat镜像

    实战:DockerFile制作tomcat镜像 step-1 准备镜像文件 tomcat压缩包,jdk压缩包! step-2 编写dockerfile文件,官方命名Dockerfile,build会自 ...

  4. docker通过dockerfile构建JDK最小镜像,Docker导出导入镜像

    docker通过dockerfile构建JDK最小镜像,Docker导出导入镜像 一.docker通过dockerfile构建JDK最小镜像 1.1 下载JRE 1.2 解压JRE,删除相关不需要文件 ...

  5. 基于Dockerfile制作tomcat镜像

    Docker 概述:   在前面的例子中,我们从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一种文件或脚本,我们把想执行的操 ...

  6. Docker之Alpine制作jre镜像(瘦身)+自定义镜像上传阿里云

    alpine制作jdk镜像 alpine Linux简介 1.Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musl libc 和 BusyBo ...

  7. Docker将容器制作成镜像并提交到远程仓库

    Docker将容器制作成镜像并提交到远程仓库 步骤如下 先在dockerhub上创建一个自己的用户https://hub.docker.com/.或者在阿里云也可以. 2. 然后先创建一个空的镜像名. ...

  8. 使用Dockerfile制作JDK+tomcat镜像

    1.准备好jdk和tomcatapache-tomcat-8.5.32.tar.gzjdk-8u181-linux-x64.tar.gz 注意:a.jdk和tomcat记得从官网下载,否则制作出来的镜 ...

  9. Docker 0x05: Dockerfile制作镜像

    目录 Dockerfile制作镜像 一句话什么是dockerfile dockerfile脚本指令 小结 Dockerfile制作镜像 dockerfile 可以是制作自己镜像的脚本文件,按照这个脚本 ...

随机推荐

  1. 洛谷 P5269 欧稳欧再次学车 题解

    P5269 欧稳欧再次学车 题目背景 请自行脑补一张欧稳欧学车的图 题目描述 欧稳欧学车时经常用一辆橡树车练习.这辆橡树车共有 \(N\) 个挡位,欧稳欧每秒可以把挡位增加或减少 \(1\),初始时( ...

  2. 垃圾邮件分类实战(SVM)

    1. 数据集说明 trec06c是一个公开的垃圾邮件语料库,由国际文本检索会议提供,分为英文数据集(trec06p)和中文数据集(trec06c),其中所含的邮件均来源于真实邮件保留了邮件的原有格式和 ...

  3. 代码注入/文件包含 弹出Meterpreter

    主要通过 msf 中 exploit 的 web_delivery 模块来实现此功能 0x01 前提背景 目标设备存在远程文件包含漏洞或者命令注入漏洞,想在目标设备上加载webshell,但不想在目标 ...

  4. 19 条效率至少提高 3 倍的 MySQL 技巧

    阅读本文大概需要 4 分钟. 来源:https://zhuanlan.zhihu.com/p/49888088 本文我们来谈谈项目中常用的 MySQL 优化方法,共 19 条,具体如下: 1.EXPL ...

  5. Asp.net 与 Core .net 用法区别

    1.  定义一个类 如下,注意int?这里 public class A{ public int? num{get;set;} } 2. 如果传递的参数不能转换成int类型,则core里面接受不了参数 ...

  6. systemctl enable rc-local.service error

    /******************************************************************************* * systemctl enable ...

  7. jsch配置sftp服务器ssh免密登录

    前期对接了一个通过ssh免密登录的需求,是基于原先密码登录sftp服务器的代码上进行改造,实际上代码改动量非常少,趁此机会对自己整理的资料做一下总结. 1. 什么是SFTP SFTP是一个安全文件传送 ...

  8. 批量kill掉包含某个关键字的进程

    需要把 linux 下符合某一项条件的所有进程 kill 掉,又不能用 killall 直接杀掉某一进程名称包含的所有运行中进程(我们可能只需要杀掉其中的某一类或运行指定参数命令的进程),这个时候我们 ...

  9. [转]将已有项目代码加入svn版本控制

    原文链接:https://blog.csdn.net/aaroun/article/details/79074178 将已有项目代码加入svn版本控制 - TortoiseSVN入门篇Windows下 ...

  10. VC 获取系统特殊文件夹的路径如:系统目录,桌面等

    转载:https://blog.csdn.net/qq_23992597/article/details/50963343 如果需要,请在StdAfx.h中添加 #include <shlobj ...