Spring Cloud之Docker的学习【详细】

目录

Docker

项目部署问题

总结

镜像与容器

Docker的安装

Docker基本操作

镜像相关命令

拉取镜像

镜像保存

删除镜像

镜像加载

容器相关命令

删除容器

数据卷

数据卷命令

数据挂载

自定义镜像

Dockerfile

案例

Docker-Compose

Compose文件

Docker-Compose安装

修改文件权限

Base自动补全提示


Docker

项目部署问题

大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题

  • 依赖关系复杂,容易出现兼容性问题
  • 开发、测试、生产环境有差异

Docker如何解决依赖的兼容问题的

  • 将应用的Libs (函数库)、Deps (依赖)配置与应用一起打包
  • 将每个应用放到一个隔离容器去运行,避免互相干扰

Docker解决不同操作系统的方法

Ubuntu与CentOS系统函数库的实现都是基于Linux。那么Docker就将它们的系统函数库与程序一起打包,避免Ubuntu中没有CentOS的函数方法而无法使用程序的问题

总结

Docker是一个快速交付应用、运行应用的技术

  • 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统
  • 运行时利用沙箱机制形成隔离容器,各个应用互不干扰
  • 启动、移除都可以通过一行命令完成,方便快捷

Docker和虚拟机的差异

docker是一个系统进程;虚拟机是在操作系统中的操作系统

docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般

镜像与容器

镜像:Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。

容器:镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。

Docker的安装

我这里使用的是CentOS7虚拟机,使用FinalShell连接虚拟机后。输入安装指令

yum install -y docker-ce

docker的指令

systemctl start docker  # 启动docker服务systemctl stop docker  # 停止docker服务systemctl restart docker  # 重启docker服务systemctl enable docker  # 开启自动开启docker服务systemctl status docker # docker服务的状态docker -v # 查看docker版本

配置Docker镜像(针对CentOS)

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors":["https://n0dwemtq.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker基本操作

镜像相关命令

镜像名称一般分为两部分组成:[repository]:[tag]

在没有指定tag时,默认代表最新版本镜像

拉取镜像
docker pull xxx

我先拉取Nginx测试

镜像保存

删除镜像

镜像加载

容器相关命令

访问虚拟机的80端口

使用命令进入容器内部

docker exec -it mn bash
  • docker exec :进入容器内部,执行一个命令
  • -it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互
  • mn:要进入的容器的名称
  • bash:进入容器后执行的命令,bash是一个linux终端交互命令

容器中的nginx被安装在/usr/share/nginx目录下(查询Docker镜像文档知道的),修改Nginx的起始页面

在容器中没有vi的命令。只能通过sed指令来替换文本内容

sed -i 's#Welcome to nginx#hello world#g' index.html
sed -i 's#<head>#<head><meta charset="utf-8">#g' index.html

再次访问80端口

需要注意的是,ps命令默认只展示运行中的容器。如果需要查询全部容器,需要添加指令-a

删除容器

注意:并不推荐在容器内部修改文件内容,因为不会留下任何日志,无法知道究竟做过什么操作

数据卷

一个数据卷可以被多个容器挂载。一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。同时,我们操作宿主机的/var/lib/docker/volumes/html目录,就等于操作容器内的/usr/share/nginx/html目录了(双向绑定)。这样我们就可以不进入容器内部修改其数据文件了。

数据卷命令

docker volume命令是数据卷操作

  • create 创建一个volume
  • inspect 显示一个或多个volume的信息
  • ls 列出所有的volume
  • prune 删除未使用的volume
  • rm 删除一个或多个指定的volume
数据挂载

我们在创建容器时,可以通过 -v 参数来挂载一个数据卷到某个容器内目录,命令格式如下:

docker run \--name mn \-v html:/root/html \-p 8080:80nginx \

以上命令就是将html数据卷挂载到容器中的/root/html目录

自定义镜像

Dockerfile

构建自定义的镜像时,并不需要一个个文件去拷贝,打包。

我们只需要告诉Docker,我们的镜像的组成,需要哪些BaseImage、需要拷贝什么文件、需要安装什么依赖、启动脚本是什么,将来Docker会帮助我们构建镜像。而描述上述信息的文件就是Dockerfile文件。

Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer,而第一行必须是FROM,从一个基础镜像来构建。基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine

案例

案例链接:https://pan.baidu.com/s/1MjiIuhNF90iWWIHQ_C8uPQ?pwd=zmbw

将下载好的文件移动到linux系统下的docker-demo文件下

接下来创建镜像

docker build -t javaweb:1.0 .

镜像名称为Javaweb,版本为1.0 Dockerfile在当前目录下

执行后结果

启动容器

docker run --name web -p 8090:8090 -d javaweb:1.0

访问地址yourIP:8090/hello/count

在Dockerfile中内容如下

大部分操作都是在构建Java环境,我们可以直接在构建我们镜像时引入Java的镜像将上面文件修改为后,重新构建

# 指定基础镜像
FROM java:8-alpine
COPY ./docker-demo.jar /tmp/app.jar
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

可以看到,使用其他镜像更加轻量。

Docker-Compose

Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。

Compose文件

Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。可以看做是将多个docker run命令写到一个文件,只是语法稍有差异。格式如下

version: "3.8"services:mysql:image: mysql:5.7.25environment:MYSQL_ROOT_PASSWORD: 123 volumes:- "/tmp/mysql/data:/var/lib/mysql"- "/tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf"web:build: .ports:- "8090:8090"

Docker-Compose安装

将上面链接中的Docker-Compose下载完成后,放入linux中的/usr/local/bin目录下

修改文件权限

进入目录/usr/local/bin目录下

执行如下命令

chmod +x /usr/local/bin/docker-compose

Base自动补全提示

curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

在编辑compose文件时会像IDEA编辑yml文件一样提示配置名称

如果情况如上,则需要添加一行命令

echo "199.232.68.133 raw.githubusercontent.com">> /etc/hosts

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

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

相关文章

Termux SFTP如何实现远程文件传输

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP&#xff08;SSH File Transfer Protocol&#xff09;是一种基于SSH&#xff08;Secure Shell&#xff09;安全协议的文件传输协议。与FTP协议相比&#xff0c;SFTP使用了…

CN考研真题知识点二轮归纳(3)

持续更新&#xff0c;上期目录&#xff1a; CN考研真题知识点二轮归纳&#xff08;2&#xff09;https://blog.csdn.net/jsl123x/article/details/134111760?spm1001.2014.3001.5501 1.TCP/IP 名称&#xff1a;传输控制协议/网络协议&#xff0c;是一个协议族&#xff0c;主…

管网智慧化建设能为管网提供哪些优势?第3点特别值得注意!

关键词&#xff1a;智能管网、智慧管网、智慧管网建设、智慧燃气、气管网压力监测解决方案 随着信息技术的不断发展&#xff0c;数字城市的发展正在快速向智慧城市推进&#xff0c;而管网智慧化建设是目前智慧城市建设中不可或缺的一个重要举措。 因为早期铺设使用的排水管道…

MathType2024破解版激活序列号

MathType序列号是一款针对该软件而制作的激活工具&#xff0c;大家都知道这款软件在官方是需要花钱购买的&#xff0c;不然得话就只能试用。有很多功能都无法正常使用&#xff01;而本序列号却可以完美的解决这一难题&#xff0c;因为它可以破解并激活“MathType”&#xff0c;…

jenkins、ant、selenium、testng搭建自动化测试框架

如果在你的理解中自动化测试就是在eclipse里面讲webdriver的包引入&#xff0c;然后写一些测试脚本&#xff0c;这就是你所说的自动化测试&#xff0c;其实这个还不能算是真正的自动化测试&#xff0c;你见过每次需要运行的时候还需要打开eclipse然后去选择运行文件吗&#xff…

一条 SQL 是如何在 MyBatis 中执行的

前言 MyBatis 执行 SQL 的核心接口为 SqlSession 接口&#xff0c;该接口提供了一些 CURD 及控制事务的方法&#xff0c;另外还可以通过 SqlSession 先获取 Mapper 接口的实例&#xff0c;然后通过 Mapper 接口执行 SQL&#xff0c;Mapper 接口方法的执行最终还是委托到 SqlSe…

Linux学习第25天:Linux 阻塞和非阻塞 IO 实验(二): 挂起

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 为方便和上一节的衔接&#xff0c;在正式开始学习前&#xff0c;先把本节的思维导图引入&#xff1a; 二、阻塞IO实验 1.硬件原理图分析 2.实验程序 #define I…

数字时代新趋势:TikTok算法与海外网红营销的融合策略

在当今数字化时代&#xff0c;社交媒体已经成为品牌推广和市场营销的重要渠道。TikTok作为全球范围内最受欢迎的短视频平台之一&#xff0c;以其独特的算法和用户参与度&#xff0c;正日益成为海外网红营销的热门选择。本文Nox聚星将和大家探讨TikTok算法和海外网红营销之间的融…

全平台七合一万能DIY小程序源码系统 带完整搭建教程

近年来互联网技术的飞速发展&#xff0c;尤其是移动互联网的普及。随着微信、支付宝、百度、抖音、头条等平台的迅速崛起&#xff0c;小程序成为了这些平台上重要的应用形态。这些小程序的应用范围广泛&#xff0c;包括电商、教育、娱乐、生活服务等各个领域。然而&#xff0c;…

【二叉树经典题目】

根据二叉树创建字符串 本题的关键在于什么情况要省略括号&#xff0c;什么情况不能省略&#xff1a; 左右为空可以省略括号 左不为空&#xff0c;右为空可以省略括号左为空,右不为空不能省略括号 class Solution { public://1.左右为空可以省略括号//2.左不为空&#xff0c;右…

基于SSM的高校疫情防控出入信息管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

提高微星笔记本Linux下散热性能,MSI-EC 驱动新补丁发布

导读近日消息&#xff0c;今年早些时候&#xff0c;Linux 6.4 中添加了 MSI-EC 驱动程序&#xff0c;允许对 Linux 系统微星笔记本电脑进行更多控制。 MSI-EC 驱动程序近日迎来新补丁&#xff0c;为微星笔记本带来 Cooler Boost 功能。该功能允许提高笔记本电脑的风扇转速&…

从云到AI到大模型,阿里云始终和谁站在了一起?

引言&#xff1a;云的创新没有减缓 而且在加速深入百行百业 【科技明说 &#xff5c; 热点关注】 【全球云观察 | 每日看点】作为中国最大的云计算厂商&#xff0c;阿里云的产品矩阵覆盖越来越全面&#xff0c;越来越细致&#xff0c;越来越到位。 ​ 在2023杭州云栖大会现场…

java项目之医院病历管理系统(ssm框架)

项目简介 医院病历管理系统实现了以下功能&#xff1a; 管理员&#xff1a;个人中心、医院公告管理、用户管理、科室信息管理、医生管理、出诊信息管理、预约时间段管理、预约挂号管理、门诊病历管理、就诊评价管理、系统管理。医生&#xff1a;个人中心、出诊信息管理、预约…

企业计算机电脑中了locked勒索病毒怎么办,勒索病毒解密,数据恢复

网络技术的不断发展&#xff0c;为我们的企业带来了很大的便利&#xff0c;大部分企业都会选择合适的办公软件系统&#xff0c;方便自身的生产与运营。近期&#xff0c;网络上的locked勒索病毒又开始攻击企业的计算机服务器了&#xff0c;经过10月份云天数据恢复中心对企业数据…

02【Git分支的使用、Git回退、还原】

上一篇&#xff1a;01【Git的基本命令、底层命令、命令原理】 下一篇&#xff1a;03【Git的协同开发、TortoiseGit、IDEA的操作Git】 文章目录 02【Git分支的使用、Git回退、还原】一、分支1.1 分支概述1.1.1 Git分支简介1.1.2 Git分支原理 1.2 创建分支1.2.1 创建普通分支1.…

GPT做SQL查询引擎的自然语言

目录 面向企业查询的生成式人工智能 步骤1&#xff1a;将示例数据转换为单字符字符串 步骤2&#xff1a;为大型语言模型&#xff08;LM&#xff09;创建提示符 步骤3&#xff1a;将数据发送到OpenAI的API 步骤4&#xff1a;执行GPT返回的SQL代码的结果 步骤5(可选)&#…

iPhone没有信号无法付钱?这样的损友要远离

近段时间以来&#xff0c;网络频传iPhone的信号差&#xff0c;导致朋友外出吃饭&#xff0c;用iPhone的朋友无法付钱&#xff0c;而只好拿国产手机的自己付钱&#xff0c;如果遇上这样的朋友只能说你被骗了&#xff0c;那是朋友在坑你&#xff0c;这样的朋友绝对是损友&#xf…

796. 子矩阵的和(二维前缀和)

题目&#xff1a; 796. 子矩阵的和 - AcWing题库 思路&#xff1a; 1.暴力搜索&#xff08;搜索时间复杂度为O(n2)&#xff0c;很多时候会超时&#xff09; 2. 前缀和&#xff08;左上角&#xff08;二维&#xff09;前缀和&#xff09;&#xff1a;本题特殊在不是直接求前…

systrace/perfetto如何看surfaceflinger的vsync信号方法-android framework实战车载手机系统开发

背景&#xff1a; hi&#xff0c;粉丝朋友们&#xff1a; 大家好&#xff01;近期分享了surfaceflinger相关的一些blog&#xff0c;有同学就对相关的一些内容产生了一些疑问。 比如&#xff1a;vsync查看问题&#xff0c;即怎么才可以说是vsync到来了。 比如perfetto中surfac…