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

微服务——Docker

docker与虚拟机的区别

首先要知道三个层次

硬件层:计算机硬件

内核层:与硬件交互,提供操作硬件的指令

应用层: 系统应用封装内核指令为函数,便于程序员调用。用户程序基于系统函数库实现功能。 

docker在打包的时候直接把应用层的函数库也进行打包,所以不管是linux的什么系统都可以跑docker。

虚拟机基于Hypervisor,这个技术可以模拟计算机硬件,所以可以运行不同的操作系统。

 docker的架构

镜像和容器

docker和DockerHub

docker架构 

 镜像基本命令

拉取镜像

docker pull ubuntu:20.04:拉取一个镜像
docker pull nginx

列出本地所有镜像

docker images

删除镜像

docker image rm ubuntu:20.04
docker rmi  ubuntu:20.04

导出压缩镜像

docker save -o ubuntu_20_04.tar ubuntu:20.04

加载镜像

docker load -i ubuntu_20_04.tar

创建某个容器的镜像

docker [container] commit CONTAINER IMAGE_NAME:TAG

容器相关命令

容器生命周期管理命令

docker exec :在运行的容器中执行命令

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]-d :分离模式: 在后台运行-i :即使没有附加也保持STDIN 打开-t :分配一个伪终端
bash: 进入容器后执行的命令在容器 mynginx 中以交互模式执行容器内 /root/runoob.sh 脚本:
runoob@runoob:~$ docker exec -it mynginx /bin/sh /root/runoob.sh
http://www.runoob.com/在容器 mynginx 中开启一个交互模式的终端:
runoob@runoob:~$ docker exec -i -t  mynginx /bin/bash
root@b1a0703e41e7:/#

docker rm :删除一个或多个容器。

docker rm [OPTIONS] CONTAINER [CONTAINER...]-f :通过 SIGKILL 信号强制删除一个运行中的容器。-l :移除容器间的网络连接,而非容器本身。-v :删除与容器关联的卷。

docker run :创建一个新的容器并运行一个命令

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]-i: 以交互模式运行容器,通常与 -t 同时使用
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
-d:  后台运行,并返回容器ID-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
--name="nginx-lb": 为容器指定一个名称

docker kill :杀掉一个运行中的容器。

docker kill [OPTIONS] CONTAINER [CONTAINER...]-s :向容器发送一个信号杀掉运行中的容器mynginxrunoob@runoob:~$ docker kill -s KILL mynginx
mynginx

运行与暂停之间切换的两条

docker pause 容器名或IDdocker unpause 容器名或ID

运行与停止之间切换

docker start 容器名或IDdocker restart 容器名或IDdocker stop 容器名或ID

 容器操作命令

docker ps : 列出容器

docker ps [OPTIONS]-a :显示所有的容器,包括未运行的。-f :根据条件过滤显示的内容。--format :指定返回值的模板文件。-l :显示最近创建的容器。-n :列出最近创建的n个容器。--no-trunc :不截断输出。-q :静默模式,只显示容器编号。-s :显示总的文件大小。

docker inspect : 获取容器/镜像的元数据。

docker inspect [OPTIONS] NAME|ID [NAME|ID...]-f :指定返回值的模板文件。-s :显示总的文件大小。--type :为指定类型返回JSON。

docker top :查看容器中运行的进程信息,支持 ps 命令参数。

docker top [OPTIONS] CONTAINER [ps OPTIONS]

docker attach :连接到正在运行中的容器。(建议不要用这个,用docker exec比较好)

区别如下:docker exec与docker attach的区别_Christina_2020的博客-CSDN博客

docker attach [OPTIONS] CONTAINER
docker exec -it CONTAINER bash 这个代替--sig-proxy=false 保证按下ctrl+c不会关闭容器

docker logs : 获取容器的日志

docker logs [OPTIONS] CONTAINER-f : 跟踪日志输出--since :显示某个开始时间的所有日志-t : 显示时间戳--tail :仅列出最新N条容器日志

docker export :将文件系统作为一个tar归档文件导出到STDOUT。

docker export [OPTIONS] CONTAINER-o :将输入内容写到文件。docker export -o xxx.tar CONTAINER:将容器CONTAINER导出到本地文件xxx.tar中docker export/import与docker save/load的区别:export/import会丢弃历史记录和元数据信息,仅保存容器当时的快照状态save/load会保存完整记录,体积更大

docker port 用于列出指定的容器的端口映射

docker port [OPTIONS] CONTAINER

docker stats : 显示容器资源的使用情况,包括:CPU、内存、网络 I/O 等。

docker stats [OPTIONS] [CONTAINER...]--all , -a :显示所有的容器,包括未运行的。--format :指定返回值的模板文件。--no-stream :展示当前状态就直接退出了,不再实时更新。--no-trunc :不截断输出。

其他一些命令

docker cp xxx CONTAINER:xxx 或 docker cp CONTAINER:xxx xxx:在本地和容器间复制文件
docker rename CONTAINER1 CONTAINER2:重命名容器
docker update CONTAINER --memory 500MB:修改容器限制

docker数据卷

容器和数据耦合的问题

挂载好数据卷之后就可以在外面修改相关配置文件。 

 操作数据卷

挂载数据卷

 直接用宿主机目录挂载到容器目录

总结

自定义镜像

 镜像结构

镜像就是将应用程序及其需要的系统函数库,环境,配置,依赖打包而成。

 

 DockerFile

案例

  dockerfile文件命令如下

依赖一个基础的镜像,配置了JDK,又准备了相对应项目和入口文件,然后制作了一个项目镜像。

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar# 安装JDK
RUN cd $JAVA_DIR \&& tar -xf ./jdk8.tar.gz \&& mv ./jdk1.8.0_144 ./java8# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

如果是基于一个完成度更高的镜像来搭建,比如说一个配置好了jdk的ubuntu镜像,那么就可以减少配置的流程。

 DockerCompose

version是命令的版本,这里有多个版本。 

docker run \--name mysql \-e MYSQL_ROOT_PASSWORD=123 \-p 3306:3306-v tmp/mysgl/data:/var/lib/mysql \-v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \-d \
mysql:5.7.25

 这个里面将上面这个docker run语句中的必要参数都转换为了docker指令。在微服务集群里面mysql只供给集群内的服务,不需要暴露。然后这里默认就是-d,后台运行。

构建镜像
docker build -t web:1.0 .
创建容器
docker run --name web -p8090:8090 -d web:1.0 

而第二个则是将这两个命令集合,里面的 . 就是从当前目录先构建镜像再运行容器。属于临时构建镜像并运行。

实践的视频讲的不行。

docker镜像仓库

 

docker私人仓库除非是做运维,不然没什么必要搭建。

官方搭建是没有UI界面的,有人人提供的UI界面。

 部署好之后就如下所示

相关文章:

微服务——Docker

docker与虚拟机的区别 首先要知道三个层次 硬件层:计算机硬件 内核层:与硬件交互,提供操作硬件的指令 应用层: 系统应用封装内核指令为函数,便于程序员调用。用户程序基于系统函数库实现功能。 docker在打包的时候直接把应用层的函数库也进行打包&a…...

测试|测试用例方法篇

测试|测试用例方法篇 文章目录 测试|测试用例方法篇1.测试用例的基本要素:测试环境,操作步骤,测试数据,预期结果…2.测试用例带来的好处3.测试用例的设计思路,设计方法,具体设计方法之间的关系**设计测试用…...

负载均衡的策略有哪些? 负载均衡的三种方式?

负载均衡的策略有哪些? 负载均衡的策略有如下: 1. 轮询(Round Robin):按照请求的顺序轮流分配到不同的服务器。 2. 权重(Weighted):给不同的服务器分配不同的权重,根据权重比例来…...

二十三章:抗对抗性操纵的弱监督和半监督语义分割的属性解释

0.摘要 弱监督语义分割从分类器中生成像素级定位,但往往会限制其关注目标对象的一个小的区域。AdvCAM是一种图像的属性图,通过增加分类分数来进行操作。这种操作以反对抗的方式实现,沿着像素梯度的相反方向扰动图像。它迫使最初被认为不具有区…...

curator实现的zookeeper可重入锁

Curator是一个Apache开源的ZooKeeper客户端库,它提供了许多高级特性和工具类,用于简化在分布式环境中使用ZooKeeper的开发。其中之一就是可重入锁。 Curator提供了InterProcessMutex类来实现可重入锁。以下是使用Curator实现ZooKeeper可重入锁的示例&am…...

抽象工厂模式——产品族的创建

1、简介 1.1、简介 抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品 1.2、定义 抽象工厂模式(Abstract Factory Pattern):提供…...

【C语言初阶篇】自定义类型结构体我不允许还有人不会!

🎬 鸽芷咕:个人主页 🔥 个人专栏:《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想,就是为了理想的生活! 文章目录 📋 前言1 . 什么是结构体1.1 结构的定义1.2 结构的声明 2.结构体初始化2.1 用标签名定义和初始化2.2…...

重大更新|Sui主网即将上线流动性质押,助力资产再流通

Sui社区一直提议官方上线流动质押功能,现在通过SIP过程,已经升级该协议以实现这一功能。 Sui使用委托权益证明机制(DPoS)来选择和奖励负责运营网络的验证节点。为了保障网络安全,验证节点通过质押SUI token获得质押奖…...

day3 驱动开发 c语言编程

通过ioctl(内核应用层) 控制led灯三盏,风扇,蜂鸣器,小马达 头文件head.h #ifndef __LED_H__ #define __LED_H__typedef struct {volatile unsigned int TZCR; // 0x000volatile unsigned int res1[2]; // 0x…...

【字节跳动青训营】后端笔记整理-3 | Go语言工程实践之测试

**本文由博主本人整理自第六届字节跳动青训营(后端组),首发于稀土掘金:🔗Go语言工程实践之测试 | 青训营 目录 一、概述 1、回归测试 2、集成测试 3、单元测试 二、单元测试 1、流程 2、规则 3、单元测试的例…...

【Android】Recyclerview的缓存复用

介绍 RecyclerView是Android开发中常用的一个高度可定制的列表视图组件。它是在ListView和GridView的基础上进行了改进和增强,旨在提供更好的性能和更灵活的布局管理。 RecyclerView的主要特点如下: 灵活的布局管理器(LayoutManager&#…...

机器学习:混合高斯聚类GMM(求聚类标签)+PCA降维(3维降2维)习题

使用混合高斯模型 GMM,计算如下数据点的聚类过程: Datanp.array([1,2,6,7]) 均值初值为: μ1,μ21,5 权重初值为: w1,w20.5,0.5 方差: std1,std21,1 K2 10 次迭代后数据的聚类标签是多少? 采用python代码实现: from scipy import…...

libuv库学习笔记-processes

Processes libuv提供了相当多的子进程管理函数,并且是跨平台的,还允许使用stream,或者说pipe完成进程间通信。 在UNIX中有一个共识,就是进程只做一件事,并把它做好。因此,进程通常通过创建子进程来完成不…...

c++ 给无名形参提供默认值

如上图,若函数的形参不在函数体里使用,可以不提供形参名,而且可以给此形参提供默认值。也能编译通过。 在看vs2019上的源码时,也出现了这种写法。应用SFINAE(substitute false is not an error)原则&#x…...

NO1.使用命令行创建Maven工程

①在工作空间目录下打开命令窗口 ②使用命令行生成Maven工程 mvn archetype:generate 运行 MVN 原型:生成命令,下面根据提示操作 选择一个数字或应用过滤器(格式:[groupId:]artifactId,区分大小写包含)&a…...

深度学习入门(一):神经网络基础

一、深度学习概念 1、定义 通过训练多层网络结构对位置数据进行分类或回归,深度学习解决特征工程问题。 2、深度学习应用 图像处理语言识别自然语言处理 在移动端不太好,计算量太大了,速度可能会慢 eg.医学应用、自动上色 3、例子 使用…...

网络知识整理

网络知识整理 网络拓扑网关默认网关 数据传输拓扑结构层面协议层面 网络拓扑 网关 连接两个不同的网络的设备都可以叫网关设备,网关的作用就是实现两个网络之间进行通讯与控制。 网关设备可以是交换机(三层及以上才能跨网络) 、路由器、启用了路由协议的服务器、代…...

如何有效地使用ChatGPT写小说讲故事?

​构思故事情节,虽有趣但耗时,容易陷入写作瓶颈。ChatGPT可提供灵感,帮你解决写作难题。要写出引人入胜的故事,关键在于抓住八个要素——主题、人物、视角、背景、情节、语气、冲突和解决办法。 直接给出故事模板,你可…...

原生求生记:揭秘UniApp的原生能力限制

文章目录 1. 样式适配问题2. 性能问题3. 原生能力限制4. 插件兼容性问题5. 第三方组件库兼容性问题6. 全局变量污染7. 调试和定位问题8. 版本兼容性问题9. 前端生态限制10. 文档和支持附录:「简历必备」前后端实战项目(推荐:⭐️⭐️⭐️⭐️…...

网络编程 IO多路复用 [epoll版] (TCP网络聊天室)

//head.h 头文件 //TcpGrpSer.c 服务器端 //TcpGrpUsr.c 客户端 通过IO多路复用实现服务器在单进程单线程下可以与多个客户端交互 API epoll函数 #include<sys/epoll.h> int epoll_create(int size); 功能&#xff1a;创建一个epoll句柄//创建红黑树根…...

利用快马平台自动化生成contextmenumanager提升前端开发效率

最近在开发一个后台管理系统时&#xff0c;遇到了一个很常见的需求&#xff1a;需要为表格、图表等元素添加右键菜单功能。这种需求看似简单&#xff0c;但实际开发中却要花费不少时间在重复的配置工作上。经过一番摸索&#xff0c;我发现利用InsCode(快马)平台可以大幅提升这类…...

Steam API集成:构建智能游戏生态的完整PHP解决方案

Steam API集成&#xff1a;构建智能游戏生态的完整PHP解决方案 【免费下载链接】Steam A composer package to make use of the steam web api. 项目地址: https://gitcode.com/gh_mirrors/stea/Steam 在当今游戏开发和社区管理领域&#xff0c;与Steam平台的深度集成已…...

毫米波雷达开发者必看:双级联方案如何用DDMA波形实现300米精准测距?

毫米波雷达双级联方案实战&#xff1a;DDMA波形设计如何突破300米测距极限&#xff1f; 当特斯拉HW4.0的雷达模块在暴雨中依然稳定输出300米外的障碍物坐标时&#xff0c;背后的技术密码正是双级联架构与DDMA波形的完美融合。作为L3级自动驾驶系统的"全天候之眼"&am…...

别只盯着Flag!从‘金盾信安杯’赛题看企业级安全实战:文件上传、源码泄露与RSA的坑

企业安全实战&#xff1a;从CTF赛题到真实威胁的防御之道 当安全工程师们在CTF竞赛中破解一道道赛题时&#xff0c;很少有人意识到这些看似游戏化的挑战背后&#xff0c;隐藏着企业安全防护体系中最致命的漏洞原型。本文将带您穿越虚拟赛场与真实战场之间的界限&#xff0c;揭示…...

禅道16.4开源版二次开发实战:手把手教你给测试用例新增“测试方式”字段(附完整代码)

禅道16.4开源版二次开发实战&#xff1a;从零构建测试方式字段全流程指南 当测试团队同时管理手工与自动化用例时&#xff0c;原生禅道系统缺少测试类型标识字段的问题会直接导致统计混乱。上周我接手的一个金融项目就遇到这种情况——自动化测试报告总是混入手工用例数据。经过…...

八股文的终结:为什么2026年大厂面试开始大规模考察“内存安全”?

在2026年的北美IT求职市场中&#xff0c;底层系统开发&#xff08;Infrastructure, Backend, Systems Engineering&#xff09;岗位的技术面试逻辑正在经历一场深刻的底层范式转换。过去几年中&#xff0c;候选人凭借熟练背诵C虚函数表、STL底层源码剖析、以及各类设计模式等标…...

Java实战:阿里云OSS文件操作工具类封装与优化

1. 阿里云OSS基础认知与Java集成准备 第一次接触阿里云OSS时&#xff0c;我完全被文档里那些专业术语搞懵了。后来才明白&#xff0c;它本质上就是个超级网盘&#xff0c;只不过比我们平时用的网盘更专业、更稳定。想象一下&#xff0c;你有个无限容量的保险箱&#xff0c;可以…...

G-Helper终极指南:华硕笔记本轻量级性能控制工具完全解析

G-Helper终极指南&#xff1a;华硕笔记本轻量级性能控制工具完全解析 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix,…...

终极指南:五分钟让Win11老游戏重获联机能力的完整解决方案

终极指南&#xff1a;五分钟让Win11老游戏重获联机能力的完整解决方案 【免费下载链接】ipxwrapper 项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper 还在为Win11系统下无法联机玩《星际争霸》《魔兽争霸2》《暗黑破坏神》等经典游戏而烦恼吗&#xff1f;今天…...

保姆级教程:用C# WinForm给STM32写个Modbus固件升级工具(附完整源码)

从零构建STM32固件升级工具&#xff1a;C# WinForm与Modbus协议深度实践 1. 开发环境与项目初始化 在Visual Studio 2022中新建Windows窗体应用项目时&#xff0c;建议选择.NET Framework 4.7.2或更高版本以获得最佳兼容性。项目创建后&#xff0c;首先需要配置NuGet包管理器安…...