Docker工作流

news2024/12/23 17:25:49

file

1.工作流

  1. 开发应用
  2. 编写Dockerfile
  3. 构建Docker镜像
  4. 运行Docker容器
  5. 测试应用
  6. 发布镜像到Hub
  7. 迭代更新镜像

2.开发应用

首先你需要创建一个应用,这个应用可以是后端应用或者前端应用,任何语言都可以。
比如:我使用IDEA 创建一个Java后端应用,基于Maven构建,工程结构如下:

file

3.编写Dockerfile

基于自己的工程来编写Dockerfile, 比如:我的是工程是基于JDK11的Java应用,并且应用打包为Jar包,我编写了一个两阶段的Dockerfile,第一个阶段为mvn构建,第二个阶段基于maven的jar包打包为docker镜像,Dockerfile文件内容如下:

# maven打包时基础镜像为maven
FROM maven:3.6-jdk-11 as build
# 工作目录,容器运行时默认在/app目录下
WORKDIR /app
# 将maven构建拷贝
COPY . .
# 执行mvn打包
RUN mvn clean package

# 基础镜像(运行时)
FROM openjdk:11
# 设置时区为东八区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone

# 设置工作目录
WORKDIR /app

# 从build阶段拷贝jar包
COPY --from=build /app/target/sales-product.jar /app/sales-product.jar

# 设置容器启动时的命令
CMD java -jar -Xms128M -Xmx256M /app/sales-product.jar

COPY

4.构建Docker镜像

我们需要将Dockerfile定义的步骤进行docker构建打包为docker镜像,打包镜像时我们需要使用Docker CLI或者一个构建工具(Docker Compose)或者CI/CD系统来基于Dockerfile构建Docker镜像。

打包出来的Docker镜像包括了应用代码,运行时环境和任何依赖的库或者模块。Docker构建命令如下(以Docker CLI为例):

docker build . -t sales-order:latest
# or
docker build . -t sales-order
# or
docker build . -t saels-order:v1.0.0

COPY

5.运行Docker容器

一旦你的Docker镜像打包完成,那么就可以基于这个Docker镜像创建并运行Docker容器。
Docker容器是Docker镜像的实例,关系就像是程序和进程一样,Docker镜像是一个静态的程序,当基于这个镜像运行时就称为容器。
你可以将容器运行到不同的环境中,比如:开发环境,测试环境和生产环境,这些环境都可以使用同一个镜像。
运行容器有多种方式,Docker CLI, docker-compose, docker-swarm, K8s或者其他Docker容器编排平台。我们这里以Docker CLI和Docker-Compose为例来演示如何启动容器:
Docker CLI方式:

docker container run -d -p 8080:8080 sales-order

COPY

Docker-Compose方式(需要安装Docker-compose):

version: '3.7'
services:
  sales-product:
    container_name: sales-product
    restart: always
    image: sales-product:latest
    ports:
      - "60004:60004"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
    logging:
      driver: "json-file"
      options:
        max-size: "512m"
    extra_hosts: 
      - "sales-order:192.168.1.83"
    environment:
      - SPRING_PROFILES_ACTIVE=dev
    command: ['java','-jar','-Xms256M','-Xmx256M','sales-product.jar']  

COPY

6.测试应用

一般Docker容器成功启动后,我们就可以开始测试我们的应用了

7.发布镜像到Hub

Docker镜像一般需要发布到一个Registry以达到镜像共享的目的,这些Registry像Docker Hub或者私有Registry。一般开源或开放的项目会选择将镜像发布到Docker Hub或者将自己的Registry部分开放以共享镜像;而私有业务镜像通常只发布到私有Registry。将镜像推送到Registry我们通常使用Docker CLI或者其他客户端工具进行推送,我们以Docker CLI为例:

docker push sales-order:latest

docker push your_private_registry_domain/sales-order:latest

COPY

迭代更新镜像

在该应用软件生命周期结束前,我们一般都会一直维护应用,不断发布新版本应用,同时我们的镜像也在不断地根据应用版本的更新而更新,这样就很方面的帮助你解决新版本应用发布的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1562215.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

行人重识别项目 | 基于Pytorch实现ReID行人重识别算法

项目应用场景 面向行人重识别场景,项目具有轻量化 (训练的时候也只需要 2GB 的显存占用)、性能好 (只使用 softmax 损失就能够达到 Rank188.24%, mAP70.68%),另外提供友好的上手项目流程教程 项目效果: 项目流程 > 具体参见项目内README.…

穿山甲广告平台SDK接入效果怎么样?

广告收入是大多数开发者的应用变现收入来源,如何进行流流量变现是从应用设计之初就需要开发者思考的问题。 穿山甲广告平台作为国内第三方广告变现平台,是不少开发者选择的对接平台。 穿山甲广告平台的广告类型较多,有信息流,ba…

用Python实现办公自动化(自动化处理PDF文件)

自动化处理 PDF 文件 目录 自动化处理 PDF 文件 谷歌浏览器 Chrome与浏览器驱动ChromeDriver安装 (一)批量下载 PDF 文件 1.使用Selenium模块爬取多页内容 2.使用Selenium模块下载PDF文件 3.使用urllib模块来进行网页的下载和保存 4.使用urllib…

前端性能优化-Table渲染速度优化

教务系统-排课页面性能优化总结 一、前言 在公司教务系统中,排课页面慢的令人发指,在某些情况由于数据量大导致页面主进程卡死,遂组织进行一次排查优化,现记录一下 二、效果对比 以下数据均为UAT环境 Performence对比 更改前: 主进程渲染时间为 8s 教务系统-排课页面性…

SpringBoot+uniApp宠物领养小程序系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1.保存宠物信息代码2.提交订单信息代码3.查询评论信息代码 一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SpringBootuniApp框架开发的宠物领养微信小程序系统。…

wps 开发插件

官方文档参考wps官方文档参考 1.环境安装 安装wps https://www.wps.cn/ 安装Node.js https://nodejs.org/en 安装代码编辑器 Visual Studio Code https://code.visualstudio.com/ 环境检查-进入cmd查看 node -v2.demo 2.1 demo下载 打开vscode,新建终端 安装…

渗透测试练习题解析 5(CTF web)

1、[安洵杯 2019]easy_serialize_php 1 考点:PHP 反序列化逃逸 变量覆盖 【代码审计】 通过 GET 的方式获取参数 f 的值,传递给变量 function 定义一个过滤函数,过滤掉特定字符(用空字符替换) 下面的代码其实没什么用…

面试智力题

面试智力题 二进位bit1. 题目:一千杯水,一杯水有毒,怎么用10只老鼠,把这杯水找出来(1)解法1:常规法(2)bit法(位数法) (3) 时间法三级目录 二进位b…

Flutter Web 的未来,Wasm Native 即将到来

早在去年 Google I/O 发布 Flutter 3.10 的时候就提到过, Flutter Web 的未来会是 Wasm Native ,当时 Flutter 团队就表示,Flutter Web 的定位不是设计为通用 Web 的框架,类似的 Web 框架现在有很多,而 Flutter 的定位…

Vision-Language Models for Vision Tasks: A Survey

论文地址:https://arxiv.org/pdf/2304.00685.pdf 项目地址:https://github.com/jingyi0000/VLM_survey 一、综述动机 视觉语言模型,如CLIP,以其独特的训练方式显著简化了视觉识别任务的流程。它减少了对大量精细标注数据的依赖&a…

文生图大模型三部曲:DDPM、LDM、SD 详细讲解!

1、引言 跨模态大模型是指能够在不同感官模态(如视觉、语言、音频等)之间进行信息转换的大规模语言模型。当前图文跨模态大模型主要有: 文生图大模型:如 Stable Diffusion系列、DALL-E系列、Imagen等 图文匹配大模型:如CLIP、Chinese CLIP、…

Rust---有关介绍

目录 Rust---有关介绍变量的操作Rust 数值库:num某些基础数据类型序列(Range)字符类型单元类型 发散函数表达式(! 语句) Rust—有关介绍 得益于各种零开销抽象、深入到底层的优化潜力、优质的标准库和第三方库实现,Ru…

Unity中UI系统1——GUI

介绍 工作原理和主要作用 基本控件 a.文本和按钮控件 练习: b.多选框和单选框 练习: 用的是第三种方法 c.输入框和拖动框 练习: 练习二: e.图片绘制和框 练习: 复合控件 a.工具栏和选择网格 练习: b.滚动视…

关于OcenaBase v4.2中,分区转移和负载均衡的技术解读

OceanBase​​​​​​​​​​​​​​作为一款原生分布式数据库,其核心的技术特性之一是高可扩展性,其具体表现在两个方面: 首先,是灵活的扩缩容能力,包括垂直扩缩容和水平扩缩容: 垂直扩缩容&#xff…

android APP monkey 测试

monkey 测试 一、电脑ADB安装及使用详解1、什么是 Monkey 测试2、什么是ADB3、ADB的作用4、安装前提条件5、ADB下载6、ADB安装与配置 二、连接安卓手机检查是否连接上安卓手机windows端安装ADB驱动 三、 monkey测试操作指令演示指令APP包名查看方式测试效果 一、电脑ADB安装及使…

蜜罐技术---德迅猎鹰

什么是蜜罐 蜜罐是一种互联网安全系统,部署诱饵和陷阱在关键网络入口,诱导攻击者攻击伪装目标,保护真实资产,并且对攻击者做行为取证和追踪溯源,定位攻击者自然人身份,提升主动防御能力,让安全…

Ps:阈值

阈值 Threshold命令可将灰度图像或彩色图像转换为仅包含黑色和白色的二值图像。 Ps菜单:图像/调整/阈值 Adjustments/Threshold Ps菜单:图层/新建调整图层/阈值 New Adjustment Layer/Threshold 阈值命令通过设置一个特定的亮度阈值(阈值色阶…

EasyCVR视频汇聚平台海康Ehome2.0与5.0设备接入时的配置区别

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

ZCMU操作系统课程实验 - 实验1-Linux的使用

登录 1. 打开这个东西 2. 在 文件 - > 打开 中打卡机房里VMOS文件里的这个东东 3. 然后依次操作下去好了,有红色的选项,我都是选的"Do nothing"。完成后就会出现这样一个黑框框。 4. 让你登录。输入:root。密码&…

第十七章 Kafka

一、特性 - 高吞吐、低延迟 - 高伸缩性 - 持久性、可靠性 - 容错性 - 高并发 通过 O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以 TB 的消息存储也能够保持长时间的稳定性能。 高吞吐量:即使是非常普通的硬件 Kafka 也可以支持每秒数百…