实战:用dockerfile创建镜像实现springboot项目容器化
文章目录
- 前言
- 技术积累
- docker基本操作命令
- dockerfile简介
- dockerfile指令说明
- 实战演示
- 创建dockerfile
- 创建挂载目录构建dockerfile
- 启动容器完成验证
- 写在最后
前言
docker容器化方案是当下流行的服务部署方式,在软件领域举足轻重。我公司的测试、线上环境都采用docker容器化部署,并结合CI/CD持续交付,大大降低了运维成本。本文结合实际的项目经验,详细介绍dockerfile的运用,为下一步的持续交付做准备。当然对于docker的环境的安装本文不再累述,可直接按照官方文档进行搭建。
技术积累
docker基本操作命令
命令 | 描述 |
---|---|
docker --version | # 查看版本号 |
docker info | # 查看docker的信息 |
docker search img_name | # 搜索名为img_name的镜像 |
docker pull img_name | # 将名为img_name的镜像下载到本地 |
docker images | # 查看本地已有的镜像 |
docker rmi img_name | # 删除名为img_name的镜像 |
docker ps | # 列出正在运行的容器 |
docker ps -a | # 列出所有的容器 |
docker run -itd --name=container_name img_name | # 使用img_name以交互模式在后台运行分配了伪终端的名为container_name的镜像 |
docker start container_name/container_id | # 通过容器名字或ID启动容器 |
docker stop container_name/container_id | # 通过容器名字或ID停止容器 |
docker restart container_name/container_id | # 通过容器名字或ID重启容器 |
docker rm container_name/container_id | # 通过容器名字或ID删除容器 |
docker exec -it container_name/container_id /bin/bash | # 通过容器名字或ID进入容器 |
exit | # 退出容器 |
docker build -t iamge_name:version . | #生成镜像 -t 后面接镜像名称:版本号,若不指定版本号则默认为latest -f dockerfile路径,如果是当前目录可用 . 表示当前运行目录 --add-host 可以使用一个或多个 --add-host 标志将其他主机添加到容器的 /etc/hosts 文件中 --no-cache 构建镜像时不使用缓存 --network 在构建过程中为 RUN 指令设置网络模式 |
dockerfile简介
dockerfile是构建镜像的一种方式,开发人员通过编写dockerfile文件进行镜像构建,构建成功的镜像可以容器化。
dockerfile指令说明
命令 | 描述 |
---|---|
FROM | :指定基础镜像 |
MAINTAINER | :维护者信息 |
RUN | :构建镜像时所需要执行的命令 |
CMD | :用于容器在真正运行后所需要执行的命令,CMD和RUN其实都是执行命令,但是CMD用于最后面 注:每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条 CMD 命令,只有最后一条会被执行。 |
ENTRYPOINT | :其实和CMD差不多,具体区别:CMD # 指定容器启动时要执行的命令,只有最后一个会生效,可被替代 ;ENTRYPOINT # 指定容器启动时要执行的命令,可以追加命令。注:每个 Dockerfile 只能有一条 ENTRYPOINT命令,如果指定了多条 ENTRYPOINT命令,只有最后一条会被执行。 |
ADD | :复制文件或目录到容器,如果是压缩文件,会自动解压 |
COPY | :拷贝文件到容器内,与ADD一样但不能解压 |
LABEL | :用于为镜像添加元数据,一个标识 |
ENV | :设置环境变量 |
EXPOSE | :指定于外界交互的端口 |
VOLUME | :文件挂载,容器与宿主机之间的文件共享功能,等同于docker run时的参数-v |
WORKDIR | :工作目录相当于cd |
USER | :指定运行容器时的用户名 |
ARG | :设置变量 |
ONBUILD | :该指令只有在当该镜像被用作其他镜像的基础镜像时,才会生效 |
实战演示
将一个springboot项目用dockerfile构建为镜像,并容器化部署
将springboot项目jar上传至服务器 /home/test/test_demo 目录下
创建dockerfile
vim dockerfile
# this is test_demo dockerfile
# version 1.0
# 基础镜像
FROM openjdk:8-jre
# 维护人
MAINTAINER senfel<187@sina.cn>
# 创建目录
RUN mkdir -p /home/app
# 拷贝项目jar
COPY test-demo-0.0.1-SNAPSHOT.jar /home/app/app.jar
# 执行命令启动jar
ENTRYPOINT ["java","-jar","/home/app/app.jar"]
# 暴露端口
EXPOSE 9999
创建挂载目录构建dockerfile
》》》创建挂载目录
mkdir logs
》》》构建dockerfile
docker build -t test-demo:v1.0 .
等待镜像构建完成
》》》查看镜像
docker images | grep demo
启动容器完成验证
》》》启动容器
docker run -d --restart=always --name demo -p 8888:9999 -v /home/test/test_demo/logs:/opt/logs/test-demo test-demo:v1.0
-d 后台运行
–name 容器名称
-p 端口映射
-v 目录挂载
》》》查看启动日志
docker logs --tail 300 -f demo
》》》启动成功查看映射端口是否开启
netstat -nplt | grep 8888
》》》页面请求验证
请求成功。
写在最后
用dockerfile创建镜像实现springboot项目容器化比较简单,只要熟记docker命令并按照要求编写dockerfile即可。dockerfile通过build构件镜像,可以在任意docker环境启动提供服务,大大增加服务的可移植性和减少运维成本。
相关文章:
实战:用dockerfile创建镜像实现springboot项目容器化
文章目录 前言技术积累docker基本操作命令dockerfile简介dockerfile指令说明 实战演示创建dockerfile创建挂载目录构建dockerfile启动容器完成验证 写在最后 前言 docker容器化方案是当下流行的服务部署方式,在软件领域举足轻重。我公司的测试、线上环境都采用dock…...
【Flask】配置项解析与加载
文章目录 默认配置表配置项加载方式直接配置存放在app.config字典通过.py配置文件通过class类加载对象通过.json配置文件通过环境变量配置内置命令行 默认配置表 配置项默认值备注DEBUGFalse是否开启 Debug 模式。如果为True,修改了代码,只需要保存&…...
Dinky: 实时即未来,让 Flink SQL 纵享丝滑--如何本地编译、运行
什么是Dinky 实时即未来,Dinky 为 Apache Flink 而生,让 Flink SQL 纵享丝滑。 Dinky 是一个开箱即用、易扩展,以 Apache Flink 为基础,连接 OLAP 和数据湖等众多框架的一站式实时计算平台,致力于流批一体和湖仓一体的探索与实践。 最后,Dinky 的发展皆归功于 Apache …...
2023 Nature 健康系统规模的语言模型是通用预测引擎
文章目录 一、论文关键信息二、论文主要内容三、总结与讨论🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、论文关键信息 论文标题:Health system-scale language models are all-purpose prediction engines 期刊信息:2023 Nature 论文地址:h...
《2023 年 React 生态》
大家好,我是 Chocolate。 前不久看到一篇不错的内容,来自于 The React Ecosystem in 2023,也结合自己今年使用的 React 生态总结一下。 本文并非视频演讲稿,和视频内容还是有一点点区别,视频内容相对来说会更加详细一…...
武职302303笔记-day01
这里写自定义目录标题 开发永和小票开发步骤1、对页面进行需求分析 使用CSS的方式 Order.html问题:html代码和css样式代码交织 idea开发后端程序使用chatGPT给我们打工QRCreate.java 开发永和小票 开发步骤 1、对页面进行需求分析 页面是很多文字组成,…...
Python面试高频100题【11~15题】
Python面试必知100例。收集整理了目前Python岗位常见的面试题,希望大家通过学习理解相关知识点。下面介绍的是11~15道题。 十一、请介绍下Python中单下划线与双下划线区别 在Python中,单下划线和双下划线主要用于命名变量和方法,而它们具有不…...
Linux下Redis 存储
命令使用 目录 命令使用 RDB持久化 AOF持久化 yum安装 [rootlocalhost ~]# yum -y install redis 已加载插件:fastestmirror Loading mirror speeds from cached hostfile* c7-media: * epel: ftp.yz.yamagata-u.ac.jpvim到文件etc/redis.conf 取消注释requirep…...
QML 快速上手3 - QuickControl2
目录 QuickControl2简介风格设置control 配置文件图像浏览器案例component 组件报错问题StackViewSwipeView QuickControl2 简介 quickcontrol 用于快速构建风格化的用户界面 它包括了以下几个预制的组件风格 Default QT 默认风格Universal windows 桌面风格Material 谷歌推…...
QT Creator写一个简单的电压电流显示器
前言 本文主要涉及上位机对接收的串口数据处理,LCD Number控件的使用。之前的一篇写一个简单的LED控制主要是串口发出数据,这里再看一下怎么接收数据处理数据,这样基本就对串口上位机有简单的认识了。 LCD Number显示时间 这一小节通过用一…...
前端需要的技能
语言: 1,熟练掌握html5,css3,javascript,ajax 2,掌握PHP、java、python中至少一种web开发语言 3,库/框架:MooTools,YUI,Angular,jQuery,Dojo. 4,UI框架:BootStrap,Founda…...
Qt——Qt控件之基于模型的项目视图组-QTreeView树形视图控件的使用总结(Qt仿word标题列表的实现)
【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》...
spring boot框架步骤
目录 1. 创建一个新的Spring Boot项目2. 添加所需的依赖3. 编写应用程序代码4. 配置应用程序5. 运行应用程序6. 编写和运行测试7. 部署应用程序 总结 当使用Spring Boot框架开发应用程序时,以下是一些详细的步骤: 1. 创建一个新的Spring Boot项目 使用…...
动态创建select
1.动态创建select function createSelect(){ var mySelect document.createElement("select"); mySelect.id "mySelect"; document.body.appendChild(mySelect); } 2.添加选项option function addOption(){ //根据id查找对象, var objdoc…...
linux-centos7操作系统查看系统未挂载的磁盘,挂载磁盘
linux-centos7操作系统查看系统未挂载的磁盘,挂载磁盘 查看当前磁盘空间 根目录 / 下也只有44G,其他目录只有10几G,正式环境肯定不够用 df -h查看硬盘数量和分区情况 fdisk -l查看到/dev/vdb 有500多G了 将/dev/vdb在分出一个区使用 第一步:编辑分区。执行命令fdisk …...
STM32软件定时器
目录 什么是定时器? 软件定时器优缺点 软件定时器原理 软件定时器相关配置 单次定时器和周期定时器 软件定时器相关 API 函数 1. 创建软件定时器 2. 开启软件定时器 3. 停止软件定时器 4. 复位软件定时器 5. 更改软件定时器定时时间 实操 cubeMX配置 …...
[论文阅读] (30)李沐老师视频学习——3.研究的艺术·讲好故事和论点
《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期…...
Java中List、Set、Map的区别和实现方式
Java中List、Set、Map的区别和实现方式 List List 是一个有序的集合,即元素按照插入的顺序进行排序,可以有重复的元素。因为是有序的,所以可以根据下标来获取元素或者遍历整个集合内的元素。常用的实现类包括 ArrayList 和 LinkedList。 A…...
@EnableScheduling和@Scheduled注解详解fixedrate和fixeddelay的区别
一、pom.xml中导入必要的依赖: <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.1.RELEASE</version></parent><dependencies><…...
打印金字塔图案总结
那么好了好了,宝子们,今天给大家总结一下“打印金字塔图案”,来吧,开始整活!⛳️ 最近在牛客网上刷题,遇到了这个打印类型的题目,我想总结一下,然后分享给大家。 一、正向金字塔 …...
SQL语句的执行顺序
1、SQL语句的一般执行顺序 1 from 找表 2 on 关联条件帅选 3 join 关联表操作 4 where 条件筛选 5 group by 进行分组 6 avg,sum… 执行函数 7 having 分组后筛选 8 select …...
Debian 版本代号与《玩具总动员》
作为最受欢迎的 Linux 发行版之一,Debian 是许多其他发行版的基础,许多非常受欢迎的 Linux 发行版,例如 Ubuntu、Knoppix、PureOS 、Tails、Armbian 以及 Raspbian,都基于 Debian。 经过近 20 个月的开发,2023 年 6 月…...
TypeScript 第一章
欢迎来到 TypeScript 学习!本章将为您介绍 TypeScript 的基础知识。 TypeScript 是 JavaScript 的一个超集,它提供了静态类型检查、类、接口等特性,使得编写大型应用程序变得更加容易和可维护。TypeScript 编写的代码可以被编译成 JavaScript…...
【SpringCloud入门】-- Ribbon入门
1.什么是Ribbon? Ribbon就是netflix公司的一个开源项目,主要功能是提供客户端负载均衡算法和服务调用。Ribbon客户端组件提供了完善的配置项,如连接超时,重试等等。Ribbon作为服务消费者的负载均衡器,有两种使用方式&…...
(二)Liunx下ElasticSearch快速搭建
1.下载安装 1)环境准备: 操作系统:centos7 es版本:8.8.1 jdk:17 es与jdk等兼容支持查看 2)下载安装包上传到服务器,官网地址 https://www.elastic.co/cn/downloads/elasticsearch 3)解压文件…...
神经网络编程基础
目录 1、二分类(Binary Classification) 2、逻辑回归(Logistic Regression) 3、逻辑回归的代价函数(Logistic Regression Cost Function) 4、梯度下降法(Gradient Descent) 5、使用计算图求导数 6、逻辑回归中的梯度下降&…...
2023年北京/上海/深圳DAMA-CDGA/CDGP数据治理工程师认证报名
DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业…...
Python之枚举类Enum定义错误码
在 web 项目中,我们经常使用自定义状态码来告知请求方请求结果以及请求状态;在 Python 中该如何设计自定义的状态码信息呢? 1、普通类字典设计状态码 class RETCODE:OK "0"ERROR …...
GIS大数据处理框架sedona(塞多纳)编程入门指导
GIS大数据处理框架sedona(塞多纳)编程入门指导 简介 Apache Sedona™是一个用于处理大规模空间数据的集群计算系统。Sedona扩展了现有的集群计算系统,如Apache Spark和Apache Flink,使用一组开箱即用的分布式空间数据集和空间SQL,可以有效地…...
C++基础(7)——类和对象(5)
前言 本文主要介绍C中的继承 4.6.1:继承和继承方式(公有、保护、私有) 4.6.2:继承中的对象模型,sizeof()求子类对象大小 4.6.3:子类继承父类后,两者构造和析构顺序 父类先构造、子类先析构 如…...
wordpress显示id/今日最新国际新闻头条
前言 继续ctf的旅程 开始攻防世界web高手进阶区的7分题 本文是comment的writeup 解题过程 进来是个留言板 惯例查看源码和御剑扫描 源码没东西,但是控制台有提示 刚好后台扫到一个.git 估摸着是git泄露 用githack试试(注:githacker报错…...
最专业的网站建设价格/看广告收益最高的软件
矩阵分析之 实矩阵分解(1)特征分解与奇异值分解前言特征分解(又称谱分解、对角化)奇异值分解SVDSVD的进一步理解前言 本篇开始学习记录矩阵分解内容。需要说明的是,目前我所触及的矩阵基本上没有出现复数域࿰…...
wordpress商品列表对比插件/舆情监测系统排名
过滤器 在vue2.x中允许自定义过滤器,可被用于一些常见的文本格式化。过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0 开始支持)。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示: <!-…...
wordpress系统付费/软文代写平台
Unity 3D 是目前主流的游戏开发引擎,有数据显示,全球最赚钱的 1000 款手机游戏中,有 30% 是使用 Unity 3D 开发出来的。尤其在 VR 设备中,Unity 3D 游戏开发引擎具有统治地位。 Unity 3D 能够创建实时、可视化的 2D 和 3D 动画、…...
网站的icp 备案信息/湖州seo排名
王勃,杨炯,卢照邻,骆宾王.转载于:https://www.cnblogs.com/zhangzujin/p/4451036.html...
建设集团网站方案设计/百度关键词排行榜
计算两个整型数组元素之和,返回一个数组。规则如下:对应的元素相加,不对应的直接赋值给相应的位置,如 {1,2,4}{2,4,6,8}{3,6,10,8} 下…...