docker容器化部署springboot项目

news2024/11/25 14:33:16

前言

docker安装

下载官网

选择自己的系统
在这里插入图片描述

然后安装文档内给的命令按顺序执行即可。设置仓库,安装docker.
在这里插入图片描述

一、更换镜像源

一般情况下,docker原本自带的镜像网站不一定连的上,就很容易导致下载镜像失败,因此需要换源.
创建/etc/docker/daemon.json并填入数据

{
"registry-mirrors" : [
"https://hub-mirror.c.163.com",
"http://f1361db2.m.daocloud.io",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.ccs.tencentyun.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
    "https://jkfdsf2u.mirror.aliyuncs.com",
    "https://registry.docker-cn.com"
  ],
  "insecure-registries" : [
    "docker-registry.zjq.com"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "10"
  },
  "data-root": "/data/docker"
}

二、通过镜像安装软件基本步骤

2.1、搜索镜像

官网搜索

镜像搜索官网
在官网输入要搜索的关键字,搜索之后可以选择不同的镜像版本,然后复制命令
在这里插入图片描述

第一个就是要找的软件,点击进去,里面有很多版本,右边就有拉取镜像的命令
特定版本的会在软件后方加上冒号和版本
在这里插入图片描述

命令行搜索

docker search xxx

2.2、拉取镜像

上一步获取到镜像名或者复制到命令之后,需要进行镜像拉取,命令格式如下:

docker pull xxx

加入需要拉取aaa版本的tomcat,则命令如下:(不指定版本则把:aaa去掉)

docker pull tomcat:aaa

2.3、查看镜像

查看全部镜像

docker images

查看xxx镜像

docker images xxx

2.4、启动镜像生成容器(执行完这一步已经可以用了)

启动xxx镜像生成容器,容器名为mytomcat,并将容器内的8080端口映射到当前服务器的8082端口,启动之后生成终端

docker run -it -p 8082:8080 --name mytomcat xxx

-p,主机端口号:docker容器端口号
-P,随机分配端口
-i,交互
-t,终端
-d,后台运行
–name,给容器起名

2.5、停止容器

停止名为xxx的容器,xxx也可以传ID

docker stop xxx

停止所以容器,下方是两个命令的组合,一个命令查询并返回所有正在运行容器的简短ID

docker stop $(docker ps -q)

2.6、移除容器

移除名为xxx的容器,xxx也可以传ID(需要先停止容器)

docker rm xxx

-f,强制删除
-v,同时删除容器关联的存储卷

2.7、移除镜像

移除名为xxx的容器,xxx也可以传ID(需要先停止容器)

docker image rm xxx

-f,强制移除,有时候不同镜像之间有链接关系,需要强制移除

三、构建自定义镜像-编写Dockerfile

Dockerfile是用来构建docker镜像的文本文件,是一个由一条条构建镜像所需的指令和参数构成的脚本文件。

3.1、基础知识

每条关键字指令必须全部大写字母
指令从上往下顺序执行
#代表注释
每条指令都会在原镜像基础上创建一个新的镜像层并对镜像进行提交
Dockerfile中定义了进程所需要的一切东西,包括运行环境、依赖…

3.2、Dockerfile执行流程

  1. docker从基础镜像运行一个容器(也就是最前面的FROM)
  2. 往下执行一条指令,并对容器做出修改
  3. 执行类似docker commit的操作提交一个新的镜像层
  4. docker再基于刚提交的镜像运行一个容器
  5. 执行dockerfile的下一条指令直到全部指令都执行完毕

在这里插入图片描述

3.3、Dockerfile文件语法

最基础的Dockerfile大概包含:FROM,RUN,an,CMD

FROM

基本在Dockerfile第一行,指定基础镜像模板

RUN

利用镜像构建容器的时候执行的命令行命令,支持两种写法。

  • RUN 终端命令,比如我需要构建一个包含vim的linux系统的容器,这个时候就可以用linux作为基础镜像,然后在RUN关键字后面加上下载vim的命令来下载vim,如RUN yum -y install vim
  • RUN [“文件”,“参数”,“参数”],命令较多的情况下可以通过脚本的方式传递命令

EXPOSE

当然容器对外暴露的默认端口,也可以后续通过镜像构建容器的时候通过参数修改

WORKDIR

指定进入容器之后的落脚点目录,也就是打开容器就打开到这个指定的目录

ENV

在构建镜像过程中设置环境变量,和window的环境变量差不多意义

ADD

将宿主机目录下的文件拷贝进镜像且自动处理URL和解压tar压缩包

COPY

类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中《源路径》的文件/目录复制到新的一层的镜像内的《目标路径》

VOLUME

CMD

指定容器启动后要干的事情
用法上和RUN相似
可以有多个,但只有最后一个生效,会被docker run后面的参数覆盖。

RUN是在build的时候运行,CMD是在run的时候运行。

如下,会在/app目录下执行ls命令,然后参数为-l,ls命令需要指定命令的全路径

CMD ["/usr/bin/ls", "-l", "/app"]

ENTRYPOINT

指定一个容器启动时要运行的命令
类似CMD,但是ENTRYPOINT不会被docker run后面的命令覆盖,而且这些命令行参数会被当做参数送给ENTRYPOINT指令指定的程序。
和CMD一起使用的时候,CMD变成传参给ENTRYPOINT
需要确保命令不被覆盖就使用这个命令,例如将项目打包的启动命令一般会带java -jar就用这个

ENTRYPOINT ["java", "-jar", "/xxx.jar"]

3.4、构建镜像

用当前目录下的Dockerfile文件构建镜像

docker build -t xxx .

-t选项为镜像指定一个标签(或名称),这里是xxx,.代表Dockerfile文件位于当前目录(也可指定路径)

四、Docker-compose容器编排

一个dockerfile生成一个镜像,一般情况下一个服务就需要生成一个镜像,而现在一个网站部署的时候大概率需要用到多个服务,这个时候就需要用到Docker-compose。
Docker-compose.yml文件(通常命名为 docker-compose.yml)的主要作用是定义和运行多容器 Docker 应用程序。可以通过一个Docker-compose文件一次性启动并管理这些服务。容器之间的先后启动关系等。

和spring容器管理bean差不多是同一个原理,Docker-compose管理容器。

4.1、安装Docker Compose

下载官网

三步即可完成安装,复制下载命令执行,建立软链接。
在这里插入图片描述

4.2、使用步骤

编写Dockerfile定义各个微服务应用并构建出相应的镜像文件。
使用docker-compost.yml定义一个完整业务单元,安排好整体应用中的各个容器服务。
最后,执行docker-compose up命令来启动并运行整个应用程序,完成一键部署上线。

待续

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

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

相关文章

实时数据开发|简单理解Flink流计算中解决乱序的机制--水位线

今天继续学习Flink的关键机制–水位线,虽然看文字有种浮于表面、难以理解的感觉,但是我觉得等开发中使用到的时候就会融会贯通了。 定义 Fink 相比其他流计算技术的一个重要特性是支持基于事件时间(event time)的窗口操作。但是事件时间来自于源头系统…

Edify 3D: Scalable High-Quality 3D Asset Generation 论文解读

目录 一、概述 二、相关工作 1、三维资产生成 2、多视图下的三维重建 3、纹理和材质生成 三、Edify 3D 1、文本生成多视角图像的扩散模型 2、文本和多视角图像生成法线图像的ControlNet 3、重建与渲染模型 4、多视角高分辨率RGB图像生成 四、训练 1、训练过程 2、…

2025-2026财年美国CISA国际战略规划(下)

文章目录 前言四、加强综合网络防御(一)与合作伙伴共同实施网络防御,降低集体风险推动措施有效性衡量 (二)大规模推动标准和安全,以提高网络安全推动措施有效性衡量 (三)提高主要合作…

uniapp实现开发遇到过的问题(持续更新中....)

1. 在ios模拟器上会出现底部留白的情况 解决方案: 在manifest.json文件,找到开源码视图配置,添加如下: "app-plus" : {"safearea":{"bottom":{"offset" : "none" // 底部安…

文小言1:

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

Oracle 23ai 对应windows版本安装配置PLSQL导入pde文件navicat连接Oracle

因为有一个pde文件需要查看里面的数据,所以这次需要配置本地oracle数据库,并且导入数据,因为还有navicat,所以就想用navicat去连接查看。 1、找到官网。 Get Started with Oracle Database 23ai | Oracle 2、下载windows版本。…

【热门主题】000062 云原生后端:开启高效开发新时代

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【热…

Python 版本的 2024详细代码

2048游戏的Python实现 概述: 2048是一款流行的单人益智游戏,玩家通过滑动数字瓷砖来合并相同的数字,目标是合成2048这个数字。本文将介绍如何使用Python和Pygame库实现2048游戏的基本功能,包括游戏逻辑、界面绘制和用户交互。 主…

spf算法、三类LSA、区间防环路机制/规则、虚连接

1.构建spf树: 路由器将自己作为最短路经树的树根根据Router-LSA和Network-LSA中的拓扑信息,依次将Cost值最小的路由器添加到SPF树中。路由器以Router ID或者DR标识。广播网络中DR和其所连接路由器的Cost值为0。SPF树中只有单向的最短路径,保证了OSPF区域内路由计管不…

(二)手势识别——动作模型训练【代码+数据集+python环境(免安装)+GUI系统】

(二)手势识别——动作模型训练【代码数据集python环境(免安装)GUI系统】 背景意义 随着互联网的普及和机器学习技术的进一步发展,手势识别技术开始使用深度学习等方法进行手势识别,如Convolutional Neural…

React的基本知识:事件监听器、Props和State的区分、改变state的方法、使用回调函数改变state、使用三元运算符改变state

这篇教学文章涵盖了大量的React基本知识。 包括: 事件监听器Props和State的区分改变state的方法使用回调函数改变state使用三元运算符改变state处理state中的数组处理state中的object条件渲染 &&条件渲染 三元运算符React中的forms 1. Event Listeners 在…

JavaScript练习——文本与图形

要求实现下面这个效果&#xff1a; 观察图片&#xff0c;我们的需求如下&#xff1a; 准备画布和上下文&#xff1a;在开始绘制之前&#xff0c;需要有一个HTML5 <canvas> 元素&#xff0c;并且获取其绘图上下文&#xff08;context&#xff09;&#xff0c;这是进行绘图…

【线程】线程安全问题及解决措施

【线程】线程安全问题及解决措施 前言一、由“随机调度”引起的线程安全问题1.1现象1.2 原因1.3 解决办法1.4 不当加锁造成的死锁问题 二、由“系统优化”引起的线程安全问题2.1 内存可见性问题 / 指令重排序问题2.2 解决方案 前言 何为线程安全&#xff0c;即某段代码无论在单…

[开源]3K+ star!微软Office的平替工具,跨平台,超赞!

大家好&#xff0c;我是JavaCodexPro&#xff01; 数字化的当下&#xff0c;高效的办公工具是提升工作效率的关键&#xff0c;然而大家想到的一定是 Microsoft Office 办公软件&#xff0c;然而价格也是相当具有贵的性价比。 今天JavaCodexPro给大家分享一款超棒的开源办公套…

【大数据分析机器学习】分布式机器学习

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘&#xff0c;以提取有价值的信息和洞察。它结合了大数据技术、人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&a…

SOL链上的 Meme 生态发展:从文化到创新的融合#dapp开发#

一、引言 随着区块链技术的不断发展&#xff0c;Meme 文化在去中心化领域逐渐崭露头角。从 Dogecoin 到 Shiba Inu&#xff0c;再到更多细分的 Meme 项目&#xff0c;这类基于网络文化的加密货币因其幽默和社区驱动力吸引了广泛关注。作为近年来备受瞩目的区块链平台之一&…

一篇保姆式centos/ubuntu安装docker

前言&#xff1a; 本章节分别演示centos虚拟机&#xff0c;ubuntu虚拟机进行安装docker。 上一篇介绍&#xff1a;docker一键部署springboot项目 一&#xff1a;centos 1.卸载旧版本 yum remove docker docker-client docker-client-latest docker-common docker-latest doc…

Dubbo源码解析-Dubbo的线程模型(九)

一、Dubbo线程模型 首先明确一个基本概念&#xff1a;IO 线程和业务线程的区别 IO 线程&#xff1a;配置在netty 连接点的用于处理网络数据的线程&#xff0c;主要处理编解码等直接与网络数据 打交道的事件。 业务线程&#xff1a;用于处理具体业务逻辑的线程&#xff0c;可以…

前端全栈 === 快速入 门 Redis

目录 简介 通过 docker 的形式来跑&#xff1a; set、get 都挺简单&#xff1a; incr 是用于递增的&#xff1a; keys 来查询有哪些 key: redis insight GUI 工具。 list 类型 left push rpush lpop 和 rpop 自然是从左边和从右边删除数据。​编辑 如果想查看数据…

Python MySQL SQLServer操作

Python MySQL SQLServer操作 Python 可以通过 pymysql 连接 MySQL&#xff0c;通过 pymssql 连接 SQL Server。以下是基础操作和代码实战示例&#xff1a; 一、操作 MySQL&#xff1a;使用 pymysql python 操作数据库流程 1. 安装库 pip install pymysql2. 连接 MySQL 示例 …