玩转docker到天亮--Dockerfile(五)

一、引言

ok呀,花个十分钟跟小编一起学习下docker镜像文件是怎么制作的~

保证让你收获满满~

二、目录

目录

一、引言

二、目录

三、Dockerfile(制作镜像脚本化)

3.1 什么是Dockerfile

3.1 为什么使用Dockerfile

四、docker build工作原理

五、Dockerfile常用指令

5.1 Dockerfile 编写规范

5.2 Dockerfile 指令

六、制作镜像(实战演示)


三、Dockerfile(制作镜像脚本化)
3.1 什么是Dockerfile

Dockerfile 是一个文本文件,里面包含了一条条构建镜像指令,每一条镜像指令都是描述该层镜像是如何构建的

  • dockerfile 用于指示docker image build 命令自动构建image的源代码
  • 是纯文本文件(执行构建命令时要把后缀.txt去掉)

3.1 为什么使用Dockerfile

那么肯定会有小伙伴问了,在docker hub中官方已经提供了很多镜像足够满足我们所有的服务了,为什么还需要自己去自定义制作镜像呢 ?

答:

  • 我们可以将自己的应用打包成镜像,这样就可以将我们的应用在容器当中运行了。
  • 我们还可以对官方镜像做扩展,以打包成我们生产需要的镜像了。

四、docker build工作原理

docker build [选项] <上下文路径/URL/->

docker build 后面的.表示当前目录,也是指定上下文的路径

上下文:

Docker 在运行时分为 Docker 引擎(也就是服务端守护进程)和客户端工具。Docker 的引擎提供了一组 REST API,被称为 Docker Remote API ,而如 docker 命令这样的客户端工具,则是通过这组 API 与 Docker 引擎交互,从而完成各种功能。因此,虽然表面上我们好像是在本机执行各种 docker 功能,但实际上,一切都是使用的远程调用形式在服务端(Docker 引擎)完成。也因为这种 C/S 设计,让我们操作远程服务器的 Docker 引擎变得轻而易举。

当我们进行镜像构建的时候,并非所有定制都会通过 RUN 指令完成,经常会需要将一些本地文件复制进镜像,比如通过 COPY 指令、ADD 指令等。而 docker build 命令构建镜像,其实并非在本地构建,而是在服务端,也就是 Docker 引擎中构建的。那么在这种客户端/服务端的架构中,如何才能让服务端获得本地文件呢?

这就引入了上下文的概念。当构建的时候,用户会指定构建镜像上下文的路径,docker build 命令得知这个路径后,会将路径下的所有内容打包,然后上传给 Docker 引擎。这样 Docker 引擎收到这个上下文包后,展开就会获得构建镜像所需的一切文件。

那么为什么会有人误以为.·是指定 Dockerfile 所在目录呢?这是因为在默认情况下,如果不额外指定 Dockerfile 的话,会将上下文目录下的名为 Dockerfile 的文件作为 Dockerfile。

这只是默认行为,实际上 Dockerfile 的文件名并不要求必须为 Dockerfile,而且并不要求必须位于上下文目录中,比如可以用 -f …/Dockerfile 参数指定某个文件作为 Dockerfile。

当然,一般大家习惯性的会使用默认的文件名 Dockerfile,以及会将其置于镜像构建上下文目录中。

五、Dockerfile常用指令
5.1 Dockerfile 编写规范
  • #描述注释
  • 指令必须要大写,后面至少需要带一个参数
  • 指令是按照从上到下的顺序执行的
5.2 Dockerfile 指令

1.FROM 指定父镜像: 基于哪个镜像image构建 指定基础镜像,必须为第一个命令

2.MAINTAINER :维护者

3.RUN: 容器创建的时候执行一段命令 构建镜像时执行的命令

4.ADD: 将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget

5.COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源

6.CMD:构建容器后调用,也就是在容器启动时才进行调用。 .sh执行文件

7.ENV: 设置环境变量

8.EXPOSE: 指定于外界交互的端口

9.VOLUME 用于指定持久化目录

10.WORKDIR 设置进入容器时的路径 默认访问的目录

六、制作镜像(实战演示)

大致流程图:

ok呀,没看懂是不是,下面跟小编一起写个案例,你就懂了,接着往下看:

案例一​​​​​​​:我现在想定制一个centos的镜像,需要满足以下两点要求

  • 启动容器镜像,默认进入 /usr 的目录
  • 实现支持 vim 插件

第一步:编写Dockerfile文件

# 继承docker hub中的centos镜像,版本为7
FROM  centos:7
# 作者
MAINTAINER wangyan-centos
# 环境变量 /usr
ENV  MYPATH /usr
# 引用环境变量,进入容器中,默认进入 /usr 目录
WORKDIR $MYPATH
# 容器创建的时候,下载vim插件
RUN yum -y install vim
# 暴露端口
EXPOSE 80
# 启动容器,执行.sh文件
CMD /bin/bash

第二步:执行 docker build -f Dockerfile -t 镜像名称:版本号 . 成一个镜像文件

命令解释:

-f :指定Dockerfile目录文件

. : 指定当前目录,千万别忘加了这个 “.”

第三步:docker run运行容器,docker run -it kkt:1

到这里就运行成功了,可以看到运行容器默认就进入 /usr 的目录,vim插件也是已经下载好了。

案例二 :以我们的springboot项目为例,新建一个springboot项目,并将项目制作成一个镜像,运行成功并且访问。

第一步:准备一个springboot项目,新建项目我相信大家都会,这里就写个简单的接口访问,以便测试。

/**
 * @Author WangYan
 * @Date 2023/10/7 16:12
 * @Version 1.0
 */
@RestController
public class controller {

    @RequestMapping("/index")
    public String toString() {
        return "hello docker";
    }
}

第二步:编写Dockerfile文件命令

# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER wangyan-demo001
# 将jar包添加到容器中并更名为mayikt.jar
ADD dockerTest.jar mayikt.jar
# 运行jar包
ENTRYPOINT ["java","-jar","/mayikt.jar"]
#暴露8080端口
EXPOSE 8080

第三步:将Dockerfile构建成镜像文件 docker build -f Dockerfile -t wangyan-springboot:1 .

第四步:docker运行该容器,docker run -d -p 8080:8081 wangyan-springboot:1 

​​​​​​​

拜拜~

有任何问题欢迎大家指出~

Thank You !

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Docker是一种开源的容器化平台,它可以帮助开发者将应用程序和服务以容器的形式进行打包、分发和部署。而Gluster是一个分布式存储系统,它可以将多个服务器的存储空间整合在一起,形成一个统一的、可扩展的存储池。 CentOS是一种基于Red Hat Enterprise Linux(RHEL)的开源操作系统,它提供了稳定性和安全性,并且具备广泛的应用支持。 Dockerfile是用于构建Docker镜像的脚本文件,它可以定义容器的运行环境、设置启动命令等。 那么,docker-gluster-centos Dockerfile是指在CentOS系统上构建一个包含Gluster分布式存储系统的Docker镜像的脚本文件。 在docker-gluster-centos Dockerfile中,我们可以使用CentOS的官方镜像作为基础镜像,并在此基础上安装和配置Gluster分布式存储系统。可以通过使用适当的软件包管理工具(如yum)来安装Gluster软件包和依赖项。然后,可以使用Dockerfile中的指令来启动和配置Gluster节点、创建Gluster卷以及设置其他必要的参数和选项。 通过构建docker-gluster-centos Docker镜像,我们可以在任何支持Docker的环境中快速部署和运行Gluster分布式存储系统,而无需手动安装和配置。这样可以大大简化Gluster的部署过程,提高运维效率,并且能够实现更加轻量级、可移植和可扩展的存储解决方案。 总而言之,docker-gluster-centos Dockerfile是用于在CentOS系统上构建包含Gluster分布式存储系统的Docker镜像的脚本文件,使得Gluster的部署和运行变得更加简单、可靠和可扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逸航不吃瓜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值