docker高级篇第三章-dockerfile案例之制作自己的centos镜像
在上一篇文章中《Dockerfile介绍及常用保留指令》,我们介绍了Dockerfile是什么以及Dockerfile常用的保留字段。熟悉了这些之后,有没有想自己动手写一个Dockerfile呢?本文咱们就实战自己Dockerfile。
案例需求:
我们以远程仓库的centos为模板,制作出代用vim\ifconfig\java8这样的镜像
jdk镜像地址:https://mirrors.yangxingzhen.com/jdk/
步骤:编写、构建、运行
编写:
准备编写Dockerfile文件。注意:字母D需要大写。
创建文件夹:myfile
然后将下载的jdk-8u171-linux-x64.tar.gz复制到myfile文件夹下

编写Dockerfile:
vim Dockerfile
将以下复制:
FROM centos:7
MAINTAINER kaigejava
ENV MYPATH /usr/local
WORKDIR $MYPATH
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 80
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash
说明:
FROM :基于哪个基镜像
MAINTAINER:镜像作者和邮箱
ENV:用来构建镜像过程中的环境变量。其中环境变量命中是:MYPATH 值为:/usr/local
WORKDIR:指定创建容器后,终端默认登录进入的工作目录
RUN:容器构建时候需要运行的命令。上面文件使用的是shell命令格式的。
如:yum -y install vim、mkdir
ADD:将宿主机目录下的文件拷贝到镜像中会自动处理url和解压tar压缩包。
上文中的:ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/ 命令实际上就是将宿主机中的/myfile/ jdk-8u171-linux-x64.tar.gz 这个文件拷贝并解药到 /usr/local/java文件夹下 。
小技巧:
可以将构建镜像所需要的所有文件,都放到和Dockerfile同一个目录中,这样在ADD的时候,不用可以直接文件名,相对路径就可以。可以避免,全路径拼写错误导致不必要的麻烦
CMD echo 输入变量MYPATH的值;输出usccess---ok。执行/bin/bas 伪终端
构建
构建命令公式:
docker build -t 新镜像命中:TAG .
注意:上面TAG后面有个空格,有个点

实例套用命令公式:
docker build -t centosjava8:1.5 .

可以看到17步骤
当看到如下图:

说明执行成了。
使用docker images查看镜像是否制作成功:

可以发现正常。
运行
我们运行自己制作的镜像。看看vim/ifconfig/java -verson是否都正常
运行命令:
docker run -it 8f844c2c3091 /bin/bash
我们可以看到运行正常。pwd看下登录后默认路径:

/usr/local
这个路径就是我们上文,编写Dockerfile时候指定的WORKDIR 路径
我们试试vim正常。再试试ifconfig

正常。
再试试 Java - version

jdk也正常。这样,我们就制作了一个包含了vim/ifconfig/jdk.18的镜像。
大家好,我是凯哥Java(kaigejava),乐于分享,每日更新技术文章,欢迎大家关注“凯哥Java”,及时了解更多。让我们一起学Java。也欢迎大家有事没事就来和凯哥聊聊~~~
结束语
如操作有问题欢迎去 我的 个人博客(www.kaigejava.com)留言或者 微信公众号(凯哥Java)留言交流哦。
本系列教程直通车
直通车,本系列教程已发布文章,快速到达,《Docker学习系列》教程已经发布的内容如下:
【图文教程】Windows11下安装Docker Desktop
【填坑】在windows系统下安装Docker Desktop后迁移镜像位置
【Docker学习系列】Docker学习1-docker安装
【Docker学习系列】Docker学习2-docker设置镜像加速器
【Docker学习系列】Docker学习3-docker的run命令干了什么?docker为什么比虚拟机快?
【Docker学习系列】Docker学习2-常用命令之启动命令和镜像命令
【Docker学习系列】Docker学习系列3:常用命令之容器命令
【Docker学习系列】Docker学习4-常用命令之重要的容器命令
【Docker教程系列】Docker学习5-Docker镜像理解
【Docker教程系列】Docker学习6-Docker镜像commit操作案例
【Docker学习教程系列】7-如何将本地的Docker镜像发布到阿里云
【Docker学习教程系列】8-如何将本地的Docker镜像发布到私服?
「Docker学习系列教程」10-Docker容器数据卷案例
docker高级篇1-dockeran安装mysql主从复制
docker高级篇第二章-分布式存储之实战案例:3主3从redis集群扩容配置
docker高级篇第二章-分布式存储之实战案例:主从容错切换迁移案例
Docker高级:Redis集群实战!4主4从缩容到3主3从,怎么处理?
docker高级篇第三章-dockerfile案例之制作自己的centos镜像的更多相关文章
- Docker入门教程(三)Dockerfile
Docker入门教程(三)Dockerfile [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第三篇,介绍了Dockerfile的语法,DockerOn ...
- 利用Dockerfile文件创建带有sshd服务的centos镜像
利用Dockerfile文件创建带有sshd服务的centos镜像 标签:dockerfile 1.安装docker并启动docker,不在赘述 2.创建使用Dockerfile安装sshd服务的目录 ...
- Java语言程序设计(基础篇) 第三章 选择
第三章 选择 3.8 计算身体质量指数 package com.chapter3; import java.util.Scanner; public class ComputeAndInterpret ...
- 3-Spark高级数据分析-第三章 音乐推荐和Audioscrobbler数据集
偏好是无法度量的. 相比其他的机器学习算法,推荐引擎的输出更直观,更容易理解. 接下来三章主要讲述Spark中主要的机器学习算法.其中一章围绕推荐引擎展开,主要介绍音乐推荐.在随后的章节中我们先介绍S ...
- 02: docker高级篇
1.1 Docker Compose 1.Docker Compose 介绍 1. Compose是一个定义和管理多容器的工具,使用Python语言编写. 2. 使用Compose配置文件描述多个容器 ...
- Docker入门篇(三)之docker-compose单机编排
1.docker-compose的简介 docker-compose作为dokcer的官方编排工具,它可以让用户通过编写一个简单的模板文件,快速地创建和管理基于docker容器的应用集群.实现对doc ...
- 深入刨析tomcat 之---第15篇 对应20章, myAdmin案例代码
writedby 张艳涛 有没有和我一样做到第20章的?今天基本结束了本书的阅读.最后一个案例没有demo,那我写了一回,如果有需要的可以在本地试试 路径 D:\wksp_study\designbo ...
- Java高级篇(三)——JDBC数据库编程
JDBC是连接数据库和Java程序的桥梁,通过JDBC API可以方便地实现对各种主流数据库的操作.本篇将介绍一下如何使用JDBC操作数据库(以MySQL为例). 一.JDBC JDBC制定了统一访问 ...
- Google C++测试框架系列高级篇:第一章 更多关于断言的知识
原始链接:More Assertions 词汇表 现在你应该已经读完了入门篇并且会使用GTest来写测试.是时候来学一些新把戏了.这篇文档将教会你更多知识:用断言构造复杂的失败信息,传递致命失败,重用 ...
- UNIX环境高级编程-第三章习题
1,当读写磁盘文件时,read,write等函数确实是不带缓冲机制的吗?请说明原因. 答:所有磁盘I/O都要经过内核的块缓存区(即内核的缓冲区高速缓存).唯一例外的是对原始磁盘设备的I/O,但是我们不 ...
随机推荐
- 重复消费Java Stream的三种方法。你选择哪种?
Java中的Stream一旦被消费就会关闭,不能再次使用了.如果的确有需要该怎么办呢? 这里介绍三种重复消费Stream的方法. 1. 从集合再次创建 这里你都不用往下继续看就知道该怎么办,不过我还是 ...
- Maven的依赖详解和打包方式
设置maven maven下载与安装教程: https://blog.csdn.net/YOL888666/article/details/122008374 1. 在File->setting ...
- Display、Visibility 和 Opacity 的区别
<style> .d1{ display: none; } .d2{ visibility: visible; } .d3{ opacity: 0; } </style> &l ...
- 题解:P10672 【MX-S1-T1】壁垒
暑期集训=依托答辩. 分析 种类数是奇数一定无解. 否则每种数字先输出一次,在此过程中每增加两个数时,因为每个数字种类数都不一样,所以前缀种类数也同时增加 \(2\),保证一定为偶数. 然后输出完以后 ...
- JMeter 基于脚本实现代码共享
需求描述 需求是这样的:执行某次压测任务时,压测涉及的前端接口,要求携带一个userName请求头,该请求头值为实际用户名经过DES加密后,再采用Base64加密后的值,为此,编写了一段加密代码,发送 ...
- php执行出现权限问题
- java spring boot 2 开发实战 mybtis 基础部份从搭建到第一个完整测试(从环境到测试用例二部份)
本案例是java sping boot 2.2.1 mybtis 基础部份 第一步搭建环境:安装依赖 由于我们公司项目是1.8 环境不能乱,我现在自己的电脑是1.8环境,所以本次整理的boot 代 ...
- linux的一些常用端口
hdfs:9870 yarn:8088 sparkMaster的端口是:8080 worker的端口是:8081 历史服务器的默认端口是: 18080
- 【Mybatis】06 Session获取 & 配置参数总结
会话获取 SqlSessionFactory 最佳的获取方式就是使用Mybatis提供的资源类加载配置文件 调用会话工厂建造者实例的建造方法注入读取流 要注意的是建造者生成了了实例就可以不需要了 这里 ...
- 【YAML】非标记语言的标记语言
什么是YAML? YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写. 在开发的这种语言时,YAML 的意思其实是:&qu ...