当前位置: 首页 > 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句柄//创建红黑树根…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...