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,但是我们不 ...
随机推荐
- JSP快速上手与MVC模式和三层架构的知识点总结+综合案例
阅读提示: 说明 由于JSP实在是太 难读 难写 复杂 占资源 难调试 不分离 了,拉跨!(节目效果哈,勿喷),作为一种有(ji)更(hu)好(jiu)的(yao)上(bei)位(tao)替(tai) ...
- Window版 MySQL可视化工具 Navicat 面安装免激活绿色版
网盘地址 链接:https://pan.baidu.com/s/1T0WyhGAFEt28GaU4wXhfrg 提取码:z4ww navicat15破解版 链接:https://pan.baidu.c ...
- Linux-Cgroup V2 初体验
本文主要记录 Linux Cgroup V2 版本基本使用操作,包括 cpu.memory 子系统演示. 1. 开启 Cgroup V2 版本检查 通过下面这条命令来查看当前系统使用的 Cgroups ...
- 自学Java第二周
本周学习 一.Java能干些什么? 1.共三个版本:Java SE.Java EE.Java ME Java SE:Java语言的(标准版),用于桌面应用开发,是其他两个版本的基础. Java ME: ...
- 当项目中使用到缓存,我们是选择 Redis 还是 Memcached ,为什么?
举一些场景: 一.比如实现一个简单的日志收集功能或发送大量短信.邮件的功能,实现方式是先将数据收集到队列中,然后有一个定时任务去消耗队列,处理该做的事情. 直接使用 Redis 的 lpush,rpo ...
- [oeasy]python021_赛博宝剑铭文大赏_宝剑上的铭文_特殊符号和宝物
继续运行 回忆上次内容 上次修改了 程序 将 石中剑 变成了 红色 爱之大剑 添加图片注释,不超过 140 字(可选) 可以 让宝剑 具有 更多 铭文符号 和 颜色 吗? 铭文 亚 ...
- [oeasy]python0145_版本控制_git_备份还原
git版本控制 回忆上次内容 上次我们了解了 try 的完全体 try 尝试运行 except 发现异常时运行的代码块 else 没有发现异常时运行的代码块 finally 无论是否发现异 ...
- [oeasy]python0081_ANSI序列由来_终端机_VT100_DEC_VT选项_终端控制序列
更多颜色 回忆上次内容 上次 首先了解了RGB颜色设置 可以把一些抽象的色彩名字 落实到具体的 RGB颜色 计算机所做的一切 其实就是量化.编码 把生活的一切都进行数字化 标准 是ANSI制定的 这个 ...
- 如何安装 Arch Linux 操作系统?
Arch Linux Install 安装 到使用 Arch 说明前面或多或少已经接触过 Debian 系列和 Red Hat 系列相关 Linux 发行版,对于虚拟化软件 VirtualBox 如何 ...
- C语言基础要点
C语言基础 C语言基础 C程序编译过程 C程序编译步骤 汇编语言 32关键字 数据类型 常量 size程序 类型限定 goto语句 指针 指针和字符串 作用域 函数 内存 进程内存结构 可执行文件结构 ...