DockerFile 案例-自定义镜像 mycentos|学习笔记

简介: 快速学习 DockerFile 案例-自定义镜像 mycentos

开发者学堂课程【Docker 快速入门DockerFile 案例-自定义镜像 mycentos】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/850/detail/14048


DockerFile 案例-自定义镜像 mycentos


内容介绍:

一、Base 镜像(scratch)

二、自定义镜像 mycentos


一、Base 镜像(scratch)

首先 scratch,他相当于 JAVA 里面的 object,Docker Hub 中 99%的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的,因为 readies、tomcut 那些说到底也要传到 mycentos 图上面,这些又要继承 scratch,这个很简单,就是一句from。


二、自定义镜像 mycentos

1.编写

(1)Hub 默认 centos 镜像什么情况

image.png

这个是从阿里云上面拽出来的精简版 centos,加了一个 bin/bash,登录的落脚点是 centos 的根目录。

image.png

还有当前正在运行的容器,先把所有的容器都关闭一下,这样看起来更简洁一些,按照那两项进行多项直连删除。Docker PS 是查出来当前正在运行的容器,Docker PS-q,查出来当前正在运行容器的 ID,传给 docker rm-f 进行强制删除,有点类似于批量删除。

image.png

如图所示可以看出当前正在运行的容器为0。

image.png

运行一下,这时候的 command 的就变成了 bin bash,如果想改一下,默认登录,更改为别的路径,阿里云上面拖拽下来的精简版的 centos 他肯定是对的,但是他可能不符合诉求,比如说现在跟下面想编写一个记事板文件,输入 vim abc.txt,这个命令肯定不会有任何问题,但是敲出来以后,它显示come command not found,由于是精简版的 centos,只留下了内核,所以会越来越小,小的原因是因为它丢了很多,他觉得不是内核的东西,这时候,内核虽然是用上了,但是 vim 用不了。

ifconfig 是用来查看 IP 配置,又会出来 command not found,说明在精简版的centos 下,这两个命令不被当前的容器实例所以支持,而且刚刚登录的时候是根目录。

所以总结一下现在的情况,初始 centos 运行镜像是默认路径时/,不支持 vim,不支持 ifconfig。自定义 mycentos 目的使得自己的镜像具备一下条件,登陆后的默认如今不再是根目录,比方说是另外的目录,第二,想要让他支持 vim,在运行的时候,自身就带着 vim,要求就像运行的时候就要能够使用 if config,所以现在要在所拥有的基础上面,进行重构和修改。

举个例子说,现在的 centos 就相当于去 4s 店买一辆奥拓回来,现在想把奥拓发动机换成奥迪的。

(2)准备编写 Dockerfile 文件

结合保留关键字来查看一下诉求,首先,第一步一定是 from,输入的 centos 是本地镜像(来自于阿里云),第二步,设置一个 workdir,让其一登录就默认为 tmp路径,不再是登录到根路径,需要添加一个 env 设置环境变量,假设将其设置为ENV mypath /tmp,下面的 workdir 就可以$引用,精简版的 centos 里面也有 tmp 路径,现在想让其一进入不再是根目录,而是进 tmp 就是 workdir 登录以后的落脚点。

接下来进行 run,run 的意思是容器构建时需要运行的命令,现在解决了登录的落脚点问题,但是现在不支持 vim,也支持 ifconfig 命令,所以输入 run yum -y install vim 和 run yum -y install net-tools,在当前阿里云一下拉下来的 centos不支持是 vim 和 net-tools,暴露出80端口(expose 80),模仿前面输入cmd /bin/bash。

具体代码如下

from centos

ENV mypath /tmpWORKDIR $mypath

RUN yum -y install vim

RUN yum -y install net-tools

EXPOSE 80

CMD /bin/bash

(3)myCentos 内容 DockerFile

根目录 CD 下面有一个 mydocker,就会出现 dockerfile,于是在当前路径下面新写一个 vim dockerfile2。写好的代码如下

FROM centos(继承自本地镜像 centos)

MAINTAINER zzyy<zzyy167@126.com> (作者和作者的邮件)

ENV MYPATH /usrlocal(ENV:用来在构建镜像过程中设置环境变量)

WORKDIR $MYPATH(登录的落脚点为/usrlocal

RUN yum -y install vim

RUN yum -y install net-tools(安装)

EXPOSE 80(暴露的端口)

CMD echo $MYPATH(可加可不加)

CMD echo "success----.---------ok"(可加可不加)

CMD /bin/bash

2.构建

image.png

现在已经按照新版的 centos 编写了 dockerfile,Build 获得镜像,然后再 run,这个镜像和从阿里云上面拉下来的初始镜像就不一样了。

构建:docker build -t 新镜像名字: TAG.(当前路径)

image.png

逐行进行执行,镜像是一层包一层的,层层叠加,红色的不是错误,是警告,出现successfully即为完成,输入 docker images,里面的 image ID 和运行结束时出现的ID一致,现在就是完整的 mycentos1.3,从阿里云上面拖拽下来的原版 centos 是200M 左右,改了之后就接近 360M 了,

第一步是编写 dockerfile

第二步构建新的镜像,

第三步 docker -it mycentos:1.3,输入 pwd 后不再是根目录,现在的落脚点是user local,因为前面讲过,因为是设置环境变量,Work DIR 是落脚点,根据镜像的构件编写文件,Workdir 引用变量之后,可以得出,当前正确的结论,现在版本的 centos 就可以一运行就支持 vim 和 ifconfig,现在如果查看网卡和 IP 都可以。

从阿里云上面下来的某个镜像,使用之后发现不符合自己的要求,可以按照自己的诉求去进行改动,更改之后会形成新的镜像,这样就有了自己的工具库和自己的装备。

3.运行

docker run -it 新镜像名字 :TAG

4.列出镜像的变更历史

Docker history 镜像名

image.png

一开始是 from centos,换句话说基础镜像是原来 200M 的阿里云的,之后一层一层进行添加,顺着加载,倒着执行,类似于之前的栈,每一步就会产生一个新的镜像,类似于千层饼。

相关文章
|
12天前
|
Ubuntu Java Linux
Dockerfile 自定义镜像
在这个快速发展的技术时代 , 我们经常面临着应用部署的复杂性、环境差异以及不同操作系统之间的兼容性问题 . 这些问题不仅消耗大量时间 , 还可能导致项目延期和成本增加 . Docker 的出现解决了我们在应用部署过程中遇到的障碍和挑战 . 通过将应用程序及其依赖环境封装在一个轻量级的、可移植的容器中 , Docker 不仅简化了开发和部署流程 , 还确保了不同环境间的无缝衔接和一致性 .
218 6
|
1月前
|
应用服务中间件 Shell nginx
制作docker镜像的dockerfile编写规则汇总
制作docker镜像的dockerfile编写规则汇总
|
1月前
|
Java 网络安全 开发者
【Docker】5、Dockerfile 自定义镜像(镜像结构、Dockerfile 语法、把 Java 项目弄成镜像)
【Docker】5、Dockerfile 自定义镜像(镜像结构、Dockerfile 语法、把 Java 项目弄成镜像)
60 0
|
1月前
|
缓存 Ubuntu JavaScript
Docker自定义镜像-构建镜像-Dockerfile语法
Docker自定义镜像-构建镜像-Dockerfile语法
63 0
|
1月前
|
Java Shell 应用服务中间件
DockerFile使用与自定义镜像详解
DockerFile使用与自定义镜像详解
182 0
|
1月前
|
JSON Shell Linux
一文详解Dockerfile自定义镜像
一文详解Dockerfile自定义镜像
|
运维 Cloud Native 网络协议
【云原生】Docker—Dockerfile写法与用法以及dockerfile简介与构建镜像详解【附加实战】
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令(Instruction)和操作命令;每一条指令构建一层镜像,因此每一条指令的内容,就是描述该层镜像应当如何构建(也就是你要执行的操作命令)。
482 0
【云原生】Docker—Dockerfile写法与用法以及dockerfile简介与构建镜像详解【附加实战】
|
10月前
|
NoSQL Linux Redis
docker快速入门(三)---- DockerFile相关案例
docker快速入门(三)---- DockerFile相关案例
80 0
|
Java Linux Shell
Docker file 案例-自定义镜像 mycentos | 学习笔记
快速学习 Docker file 案例-自定义镜像 mycentos
165 0
Docker file  案例-自定义镜像 mycentos | 学习笔记
|
Oracle Java 关系型数据库