使用DockerFile构建镜像与镜像上传的实现步骤

 更新时间:2024年02月23日 11:35:30   作者:云村小威  
本文主要介绍了使用DockerFile构建镜像与镜像上传的实现步骤,使用Dockerfile好处是自动化构建,确保环境的一致性和可重复性,跟踪构建过程的演化等,文中通过图文讲解的非常详细,需要的朋友可以参考下

前言:为什么要使用Dockerfile ?

首先Dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像。在没使用Dockerfile之前构建镜像是这样的:一步一步操作

不使用Dockerfile的劣势:

  • 手动操作容易出错,难以保证一致性。
  • 构建过程不透明,不易维护和管理。
  • 需要手动执行多个步骤,容易遗漏或出现问题。

使用Dockerfile的好处:

  • 自动化构建,确保环境的一致性和可重复性。
  • 可以使用版本控制系统管理Dockerfile,跟踪构建过程的演化。
  • 通过简单的命令就能完成构建和运行。

一、DockerFile构建镜像

1、构建基础对象

已知构建基础镜像的目的是为了在容器中提供一个运行环境,以便在其基础上构建和运行应用程序。而CentOSAlpine都是常见的基础操作系统镜像,用于构建Docker容器。它们有一些区别和各自的优点,主要涉及到镜像大小、软件包管理系统和适用场景等方面。

CentOS镜像:

  • 镜像大小: CentOS镜像通常比Alpine镜像大,因为它包含了更多的系统库和工具。
  • 软件包管理: CentOS使用yum(Yellowdog Updater, Modified)作为其软件包管理系统。它有广泛的软件仓库,可以方便地安装各种软件包。
  • 系统库: CentOS提供了完整的系统库和工具,适合那些需要更多系统级功能和工具的场景。
  • 适用场景: 适用于需要在容器中运行更庞大、复杂的应用程序,或者依赖于CentOS特定库的场景。例如,一些企业级应用可能更适合在CentOS环境中运行。

Alpine镜像:

  • 镜像大小: Alpine镜像非常小巧,通常比CentOS小得多。这是因为Alpine使用了musl libc和BusyBox,精简了系统组件。
  • 软件包管理: Alpine使用apk作为其软件包管理系统。虽然软件包数量相对较少,但它足够轻量且足够满足大多数基本需求。
  • 系统库: Alpine精简了系统库,只包含最小必需的库,这有助于减小镜像大小。
  • 适用场景: 适用于对镜像大小要求较高,或者在轻量级、敏捷的场景中运行应用程序。Alpine常被用作构建微服务、容器化应用和云原生应用的基础镜像。

总结各自优点:

  • CentOS:
    • 适合需要完整系统库和工具的应用场景。
    • 更广泛的软件包支持。
    • 适用于相对较大和复杂的应用程序。
  • Alpine:
    • 非常小巧的镜像大小。
    • 适用于对镜像大小要求较高的场景。
    • 适用于轻量级、敏捷的应用场景,如微服务和云原生应用。

选择CentOS还是Alpine通常取决于具体的应用需求和容器使用场景。如果镜像大小是关键因素,而且应用可以在Alpine的轻量环境中运行,那么Alpine可能是更好的选择。如果应用需要更完整的系统环境和软件包支持,那么CentOS可能更合适。

2、Dockerfile文件结构

Dockerfile 由一行行命令语句组成,并且支持以 # 开头的注释行

一般Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。

部分命令
基础镜像信息FROM
维护者信息MAINTAINER
镜像操作指令RUN、ENV、COPY、ADD、EXPOSE、WORKDIR、ONBUILD、USER、 VOLUME等
容器启动时执行指 令CMD、ENTRYPOINT

基础镜像信息:

定义了构建过程中使用的基础镜像。基础镜像是构建新镜像的起点,包含了操作系统和基本的运行时环境。FROM指令是Dockerfile的第一条指令,必须出现在Dockerfile的最开始。

维护者信息:

用于指定Docker镜像的维护者信息,即负责维护该镜像的人或团队。这个信息可以提供一些联系方式或者简要的说明。

镜像操作指令:

这些指令用于在构建过程中对镜像进行操作。其中,ENV用于设置环境变量,COPY用于复制文件或目录到镜像中,ADD与COP作用差不多,它还会压缩包文件进行解压,WORKDIR设置工作目录,RUN用于在构建过程中执行命令,EXPOSE用于声明容器运行时需要暴露的端口,USER用于设置在容器中运行时使用的用户名或用户ID,ONBUILD用于在构建子镜像时执行一些命令,VOLUME用于声明容器中的挂载点,可以将宿主机上的目录或文件挂载到容器中,用于持久化存储数据。这样可以保证在容器删除后数据不会丢失。

容器启动时执行指令:

定义了容器启动时执行的默认命令。该命令可以被用户指定的命令覆盖。CMD指令通常是最后一条指令,如果有多个CMD指令,只有最后一条会生效。

ENTRYPOINTCMD不同,ENTRYPOINT指定的命令不会被docker run命令行中的参数覆盖,而是作为容器的主要执行命令。 

以上这些指令一起构成了Dockerfile,定义了构建镜像的过程和镜像的运行时行为。通过这些指令,可以灵活地配置和定制Docker镜像,以适应不同的应用场景。

3、构建Dockerfile文件镜像

准备需要上传的文件:

 1、构建Dockerfile:

#1.指定基础镜像,并且必须是第一条指令
FROM jeanblanchard/alpine-glibc 
#2.指明该镜像的作者和其电子邮件
MAINTAINER  "3315757094@qq.com"
#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /test
#4.复制需要运行的应用程序
COPY spring.jar /test
#5.一个复制命令,把jdk安装文件复制到镜像中,注意:jdk*.tar.gz使用的是相对路径
ADD jre-8u391-linux-x64.tar.gz /test
#6.配置环境变量
ENV JAVA_HOME=/test/jre1.8.0_391
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
#7.容器启动时需要执行的命令
CMD  java -jar spring.jar 

2、配置好Dockerfiel文件后开始构建镜像 :

3、运行镜像:

测试:

二、镜像上传(阿里云)

上传镜像就是为了方便各位同事更好的搬砖,步骤如下:

1、注册/登录阿里云搜索容器镜像服务 

2、点击实例模块创建仓库

...

...

3、创建好后就会有操作指南(复制操作就行)

当然要上传镜像需要获取访问凭证进行登录:

 示例:

1. 登录

2.给本地的Docker镜像打标签,使其与阿里云容器镜像服务相关联

根据tag(版本)推送:

拉取:

docker pull registry.cn-hangzhou.aliyuncs.com/ycxw320/spring_test:v1 [镜像版本号]

以上就是使用DockerFile构建镜像与镜像上传的实现步骤的详细内容,更多关于DockerFile构建镜像与镜像上传的资料请关注脚本之家其它相关文章!

相关文章

  • prometheus监控节点程序的安装及卸载命令

    prometheus监控节点程序的安装及卸载命令

    这篇文章主要为大家介绍了prometheus监控节点程序的安装及卸载命令,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 解决Docker容器时区及时间不同步问题的方法

    解决Docker容器时区及时间不同步问题的方法

    这篇文章主要介绍了解决Docker容器时区及时间不同步问题的方法,有效的解决了Docker容器时间同步问题,有兴趣的可以了解一下。
    2016-12-12
  • Docker attach 命令卡死的问题及解决方案

    Docker attach 命令卡死的问题及解决方案

    Docker 是一种轻量级的容器化平台,可以实现快速部署、运行和管理应用程序,这篇文章给大家介绍Docker attach 命令卡死的解决方案,感兴趣的朋友一起看看吧
    2023-12-12
  • docker用root进入容器的操作

    docker用root进入容器的操作

    这篇文章主要介绍了docker用root进入容器的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • docker 安装solr8.6.2 配置中文分词器的方法

    docker 安装solr8.6.2 配置中文分词器的方法

    这篇文章主要介绍了docker 安装solr8.6.2 配置中文分词器的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Docker跨主机网络(overlay)的实现

    Docker跨主机网络(overlay)的实现

    这篇文章主要介绍了Docker跨主机网络(overlay)的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 关于docker容器部署redis步骤介绍

    关于docker容器部署redis步骤介绍

    大家好,本篇文章主要讲的是关于docker容器部署redis步骤介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-11-11
  • docker容器内缺少命令的简单解决办法

    docker容器内缺少命令的简单解决办法

    有时候在docker容器里面不仅没有你期望的那些常用的命令,甚至没有yum命令让你去安装那些常用的命令,下面这篇文章主要给大家介绍了关于docker容器内缺少命令的简单解决办法,需要的朋友可以参考下
    2023-03-03
  • 使用Docker搭建Redis主从复制的集群

    使用Docker搭建Redis主从复制的集群

    这篇文章主要介绍了使用Docker搭建Redis主从复制的集群,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Docker 容器日志分析

    Docker 容器日志分析

    这篇文章主要介绍了Docker 容器日志分析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03

最新评论