docker容器化部署springboot项目

前言

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.rhkb.cn/news/477726.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024深育杯misc2

题目描述:攻击者远程服务器监听所用的端口是( )?请提交flag,例如端口号为80,则提交Sangfor{80} 附件解压打开是一个raw文件 用volatility3工具查看ip链接信息

UI自动化测试中公认最佳的设计模式-POM

一、概念 什么是POM? POM是PageObjectModule(页面对象模式)的缩写,其目的是为了Web UI测试创建对象库。在这种模式下,应用涉及的每一个页面应该定义为一个单独的类。类中应该包含此页面上的页面元素对象和处理这些元…

L14.【LeetCode笔记】返回倒数第k个节点

目录 1.题目 2.分析 思路 代码 提交结果 1.题目 面试题 02.02. 返回倒数第 k 个节点 实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。 注意:本题相对原题稍作改动 示例: 输入: 1->2->3->4->5 和 …

linux-进程间通信

进程的通信是两个或多个进程实现数据的交互,让不同的进程看到同一份资源,而这份资源是由操作系统创建管理的。如果让其中一个进程来提供的话会破坏该进程的独立性,因为这个进程内部的数据可以被其他进程看到,那这个独立性就遭到了…

基于阿里云服务器部署静态的website

目录 一:创建服务器实例并connect 二:本地文件和服务器share 三:关于IIS服务器的安装预配置 四:设置安全组 五:建站流程 六:关于备案 一:创建服务器实例并connect 创建好的服务器实例在云…

Java算法OJ(10)哈希表练习

目录 1.前言 2.正文 2.1俩数之和 2.2无重复字符的最长子串 2.3罗马数字转整数 2.4整数转罗马数字 3.小结 1.前言 哈喽大家好吖,今天来分享几道哈希表相关的练习题,操作比较基础但是思想比较重要,另外有许多思路与解法都是学习参照题解…

二叉树:堆的建立和应用

在建立堆之前,我们要知道什么是树和二叉树 树 树是一种非线性的数据结构,它是由n(n>0)个结点组成的一个具有层次关系的集合,之所以把它叫做树,是因为它长得像一棵倒挂的树,也就是根在上面&…

oracle的静态注册和动态注册

oracle的静态注册和动态注册 静态注册: 静态注册 : 指将实例的相关信息手动告知 listener 侦 听 器 , 可以使用netmgr,netca,oem 以及直接 vi listener.ora 文件来实现静态注册,在动态注册不稳定时使用,特点是:稳定&…

postgresql按照年月日统计历史数据

1.按照日 SELECT a.time,COALESCE(b.counts,0) as counts from ( SELECT to_char ( b, YYYY-MM-DD ) AS time FROM generate_series ( to_timestamp ( 2024-06-01, YYYY-MM-DD hh24:mi:ss ), to_timestamp ( 2024-06-30, YYYY-MM-DD hh24:mi:ss ), 1 days ) AS b GROUP BY tim…

调试器 gdb/cgdb 的使用

一. touch mycode.c vim mycode.c cgdb 下载 Ubuntu:sudo apt-get install -y cgdb Centos: sudo yum install -y cgdb Linux 下我们编译好的代码无法直接调试 g/gcc 默认的工作模式是release模式 程序要调试,必须是debug模式,编译时…

通过DataWorks实现MaxCompute跨项目迁移

本文为您介绍如何配置不同MaxCompute项目并实现数据迁移。 背景信息 本文使用的被迁移的原始项目为教程《简单用户画像分析(MaxCompute版)》中的WorkShop2023项目,您需要再创建一个迁移目标项目,用于存放原始项目的表、资源、配置…

【Linux】安装cuda

一、安装nvidia驱动 # 添加nvidia驱动ppa库 sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt update# 查找推荐版本 sudo ubuntu-drivers devices# 安装推荐版本 sudo apt install nvidia-driver-560# 检验nvidia驱动是否安装 nvidia-smi 二、安装cudatoolkit&…

Vue.js 学习总结(14)—— Vue3 为什么推荐使用 ref 而不是 reactive

前言 ref 和 reactive 是 Vue3 中实现响应式数据的核心 API。ref 用于包装基本数据类型,而 reactive 用于处理对象和数组。尽管 reactive 似乎更适合处理对象,但 Vue3 官方文档更推荐使用 ref。 我的想法,ref就是比reactive好用,…

ctfshow-Misc入门(1-16)

misc1 查看图片得到flag misc2 1、打开文本,发现以“塒NG”开头 3、修改文件格式为png格式 4、查看图片,得到flag *遇到的问题:无法直接修改后缀名 *解决方法:需要点击文件夹,然后点击查看,将文件拓…

自动驾驶概念

1.线控底盘 由五大系统构成:线控转向、线控制动系统、线控换挡、线控油门踏板以及线控悬架。 2.自动驾驶分级 L1级别,也被称作驾驶支援阶段。在这一阶段,车辆系统能够根据驾驶环境来辅助驾驶者进行方向盘操作或减速操作中的一项&#xff0c…

【C】错误的变量定义导致sprintf()‌输出错误

问题描述 刚刚写一个用AT指令透传相关的函数,需要用到sprintf()‌拼接字符串。 结果发现sprintf()‌拼接出来的内容是错误的,简化后的代码如下: const char AT_CIPSEND_FIX_LENGTH_HEADER[11] "ATCIPSEND"; // 错误的&#xff0…

【Pytest+Yaml+Allure】实现接口自动化测试框架

一、框架思想 requestsyamlpytestallure实现接口自动化框架。结合数据驱动和分层思想,将代码与数据分离,易维护,易上手。使用yaml编写编写测试用例,利用requests库发送请求,使用pytest管理用例,allure生成…

内网渗透横向移动1

1.信息收集 (1)判断域控 shell net time /domain shell ping OWA2010CN-God.god.org (2)主机探测 浏览探测->网络探测 主机列表显示: (3)域用户收集: shell net user /domain…

C++初阶——类和对象(下)

目录 1、再探构造函数——初始化列表 2、类型转换 3、static成员 4、友元 5、内部类 6、匿名对象 7、对象拷贝时编译器的优化(了解) 1、再探构造函数——初始化列表 1. 构造函数初始化除了使用函数体内赋值,还有一种方式——初始化列表, 初始化列…

数据指标与标签在数据分析中的关系与应用

导读:分享数据指标体系的文章很多,但讲数据标签的文章很少。实际上,标签和指标一样,是数据分析的左膀右臂,两者同样重要。实际上,很多人分析不深入,就是因为缺少对标签的应用。今天系统的讲解下…