当前位置: 首页 > news >正文

Docker工作流

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-productrestart: alwaysimage: sales-product:latestports:- "60004:60004"volumes:- /etc/localtime:/etc/localtime:ro- /etc/timezone:/etc/timezone:rologging:driver: "json-file"options:max-size: "512m"extra_hosts: - "sales-order:192.168.1.83"environment:- SPRING_PROFILES_ACTIVE=devcommand: ['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:latestdocker push your_private_registry_domain/sales-order:latest

COPY

迭代更新镜像

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

http://www.lryc.cn/news/334327.html

相关文章:

  • 深入浅出 -- 系统架构之分布式集群的分类
  • Docker之镜像与容器的相关操作
  • 中科驭数超低时延网络解决方案入选2023年度金融信创优秀解决方案
  • 应用方案 | DCDC电源管理芯片MC34063A
  • 【个人使用推荐】联机不卡顿 小白一键部署 大厂云服务器选购指南 16G低至26 幻兽帕鲁最大更新来袭
  • 57 npm run build 和 npm run serve 的差异
  • 原生小程序开发性能优化指南
  • 「51媒体网」邀请媒体采访报道对企业宣传有何意义?
  • 用动态IP采集数据总是掉线是为什么?该怎么解决?
  • MySQL操作DDL
  • 程序员如何搞副业
  • 【嵌入式开发 Linux 常用命令系列 4.3 -- git add 不 add untracked file】
  • git 常用命令和使用方法
  • 程序员如何搞副业?
  • 深入浅出 -- 系统架构之负载均衡Nginx实现高可用
  • 鲸鱼优化算法(Whale Optimization Algorithm)
  • C++内存管理new-delete大法及实现原理
  • Spring WebFlux响应式实现WebFilter解决跨域问题
  • 第4章 Redis,一站式高性能存储方案,笔记问题
  • UVA540 Team Queue 解题报告
  • 基础贪心问题
  • day13 java final 类和对象的初始化执行顺序
  • 蓝桥杯gcd汇总
  • 极市平台 | 综述:一文详解50多种多模态图像融合方法
  • 数据结构系列-队列的结构和队列的实现
  • MySQL——查询数据的处理
  • 【机器学习300问】59、计算图是如何帮助人们理解反向传播的?
  • ctfshow web入门 php特性 web108--web115
  • 京东API接口采集商品详情数据(测试入口如下)
  • Mac brew 安装软件