微服务实战系列之玩转Docker(七)

news/2024/12/22 0:45:10/

前言

在上一篇中,博主对通过docker registry完成私仓搭建的过程,进行了完整演示和说明。一个docker 环境(比如desktop),一个registry镜像,准备好这样的“2件套”,就能换来一个私有仓库了。

简单么? 中肯的说,是相当简单了,所以该动手时一定要动动手。有句话这么说:“所有目标都是黑暗的,只有行动才与光明相伴”。当你亲自走一遍自己未曾走过的路时,连路旁的花草都为你喝彩。

回顾一下,仓库有了,下一步是不是该琢磨搞点“粮食”了? 博主正好也是这么想的(😁😁😁)。请允许继续紧跟博主的步伐,快乐的实践,从此玩转docker不是梦,Let’s go!

在这里插入图片描述

Q:如何创建人生第一个镜像

1. 物质基础

docker_env_12">1.1 docker env

首先需要自备一个可以运行docker的环境,就像运行JAR,必须提前安装JDK一样。这里博主做一个不恰当的比喻,docker好似一个镜像“编译器”,负责构建 / 运行 / 删除镜像。如果是零基础的盆友,建议先用这个桌面工具——docker desktop,操作从简入难,非常适合小白上手。但是,如果各位有一个Linux环境,那就更好了,可以无缝对接日常的工作。
在这里插入图片描述

1.2 maven project

找一个简单的maven project,改造为容器部署模式。我们可以去开源社区,随处可以找一个springboot project,或者亲自create一个皆可以。

1.3 Dockerfile

Dockerfile就像电影剧本一样,主宰着镜像image)的诞生过程。也就是说,你可以根据既定规则,“排兵布阵”。什么阶段需要什么样的资源,从哪里获取,如何组织战斗,均需要在这个文件中定义。

严肃的讲:

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

1.3.1 文件指令集
指令说明
FROM指定基础镜像,也就是明确当前新镜像的依赖镜像是什么。(必须
LABEL添加镜像说明,使用键值对的格式:key=value(支持多个,空格分隔)。
RUN指定在docker build过程中执行的命令。支持shellexec两种格式。
CMD指定容器启动时的命令。(写多条时,以最后一次为准
ENTRYPOINT指定容器默认的运行程序。(写多条时,不会覆盖之前的
EXPOSE声明容器运行时监听的特定网络端口。(仅用于声明
ENV在容器内部设置环境变量。
ADD将特定的文件、目录或远程URL复制到镜像中。(copy资源
COPY将文件或目录复制到镜像中。(copy资源
VOLUME为容器创建挂载点或声明卷。
WORKDIR设置后续指令的工作目录。
USER指定后续指令的用户上下文。
ARG定义在构建过程中传递给构建器的变量,为 docker build 命令设置。
ONBUILD当该镜像被用作另一个构建过程的基础时,添加触发器。
STOPSIGNAL设置发送给容器以退出的系统调用信号。
HEALTHCHECK定义周期性检查容器健康状态的命令。
SHELL覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令
1.3.2 指令的意义

定义如此丰富的指令,是为制作一个镜像预设各种有逻辑有时序的操作(“你说不是剧本,我不信”)。换句话说,在Linux部署应用时,我们通常需要进行几个步骤:

  1. 创建系统用户
  2. 创建用户目录
  3. 用户权限设置
  4. 配置服务端口
  5. 应用打包
  6. 上传应用(或资源文件)
  7. 启动应用

那么dockerfile其实也就是在描绘一张应用部署的“蓝图”

2. 镜像制作初体验

dockerfile_58">2.1 编写dockerfile

掌握了指令,我们可以开始熟练的使用它,博主以一个简单的示例着手,带着各位盆友体验一番dockerfile的妙处。基于springboot/springcloud微服务盛行于当下, 博主就选择一个简单的微服务下手吧。其中dockerfile指令如下:

# 基础镜像
FROM  openjdk:8-jre
# 镜像的描述
LABEL author="一叶飞舟"
LABEL version="1.0"
LABEL description="该镜像用于部署一个微服务"
# 声明服务端口,与docker run -p含义不同,当然可以保持一致
EXPOSE 8888
# 挂载目录
VOLUME /home/ms
# 创建镜像工作目录
RUN mkdir -p /home/ms
# 指定目录
WORKDIR /home/ms
# 复制本地资源到镜像
COPY ./jar/ondeservice.jar /home/ds/ondeservice.jar
# 定义启动容器默认执行的JAR
ENTRYPOINT ["java","-jar","ondeservice.jar"]

docker_build_81">2.2 docker build

通过docker build完成镜像的创建,命令如下:

docker build -t ondeservice:latest .

该命令通过读取当前目录的dockerfile文件,完成镜像的生成。当然你也可以通过-f指定dockerfile目录,命令如下:

docker build -f /file/dockerfile -t ondeservice:latest .

镜像创建后,我们可以将其上传私仓,用于多环境部署,是不是很简单?

结语

本博将镜像的制作过程进行基本介绍和说明,以期抛砖引玉,我们完全可以施展各自的想法,在满足docker原则、规范的基础上,尽情的“玩”


系列回顾

微服务实战系列之玩转Docker(六)
微服务实战系列之玩转Docker(五)
微服务实战系列之玩转Docker(四)
微服务实战系列之玩转Docker(三)
微服务实战系列之玩转Docker(二)
微服务实战系列之玩转Docker(一)
微服务实战系列之云原生


在这里插入图片描述


http://www.ppmy.cn/news/1501308.html

相关文章

Angular由一个bug说起之八:实践中遇到的一个数据颗粒度的问题

互联网产品离不开数据处理,数据处理有一些基本的原则包括:准确性、‌完整性、‌一致性、‌保密性、‌及时性。‌ 准确性:是数据处理的首要目标,‌确保数据的真实性和可靠性。‌准确的数据是进行分析和决策的基础,‌因此…

若依+AI项目开发(二)

后端代码分析 二次开发 开始执行 生成成功 创建子模块

数据库开发:MySQL基础(二)

MySQL基础(二) 一、表的关联关系 在关系型数据库中,表之间可以通过关联关系进行连接和查询。关联关系是指两个或多个表之间的关系,通过共享相同的列或键来建立连接。常见的关联关系有三种类型:一对多关系,…

怀旧必玩!重返童年,扫雷游戏再度登场!

Python提供了一个标准的GUI(图形用户界面)工具包:Tkinter。它可以用来创建各种窗口、按钮、标签、文本框等图形界面组件。 而且Tkinter 是 Python 自带的库,无需额外安装。 Now,让我们一起来回味一下扫雷小游戏吧 扫…

模拟电子技术-实验四 二极管电路仿真

实验四 二极管电路仿真 一.实验类型 验证性实验 二.实验目的 1、验证二极管的单向导电性 2、验证二极管的稳压特性。 三.实验原理 二极管的单向导电性: 四、实验内容 1、二极管参数测试仿真实验 1)仪表仿真…

FLINKCDC连接oracle导致归档日志暴增

前言 前段时间再用flinkcdc连接oracle的时候,oracle的归档日志疯狂的飙升,我经常去到归档目录下查看占用的内存情况。。 情况 在使用flinkcdc连接oracle的时候,发现归档日志飙升,查看了很多文档,该配置了都配置了, …

学习记录:ESP32控制舵机 FREERTOS BLE

控制舵机 PWM信号 PWM信号是一种周期性变化的方波信号,它有两个关键参数: 周期(Period):一个完整的PWM信号的时间长度,通常用秒(s)或毫秒(ms)表示。占空比…

搭建DNS正向解析,反向解析+搭建DNS主从架构+搭建DNS多区域+时间同步

主要在局域网中配置,不存在外网 正向解析:域名解析为IP named.conf 解决权限 named.rfc1912.zones 解决解析方式 环境准备:三台机器都做下面的操作 基础配置:网络配置,关闭安全架构,关闭防火墙&#x…