微服务—Docker

目录

初识Docker

Docker与虚拟机的区别 

镜像与容器

Docker架构

常见Docker命令

镜像命令

容器命令

数据卷挂载

直接挂载


初识Docker

        在项目部署的过程中,如果出现大型项目组件较多,运行环境也较为复杂的情况,部署时会碰到一些问题:依赖关系复杂,容易出现兼容性问题;nede开发、测试、生产环境有差异等。而Docker可以帮我们解决这些问题。

问1:Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题?
答:Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像Docker应用运行在容器中,使用沙箱机制,相互隔离,避免互相干扰。

问2:Docker如何解决开发、测试、生产环境有差异的问题
答:Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行。

小结
Docker是一个快速交付应用、运行应用的技术:
1. 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统;
2. 运行时利用沙箱机制形成隔离容器,各个应用互不干扰;
3. 启动、移除都可以通过一行命令完成,方便快捷 。


Docker与虚拟机的区别 

虚拟机(virtual machine)是在操作系统中模拟硬件设备,然后运行另一个操作系统,比如在 Windows 系统里面运行 Ubuntu 系统,这样就可以运行任意的Ubuntu应用了。

Docker仅仅是封装函数库,并没有模拟完整的操作系统。

虚拟机中的应用在执行时会先调用虚拟的操作系统,再通过Hypervisor与外部操作系统进行交互,调用本机操作系统。而Docker应用在执行时直接调用本机操作系统。

小结
Docker和虚拟机的差异:
docker是一个系统进程;虚拟机是在操作系统中的操作系统;
docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般。


镜像与容器

Docker中有几个重要的概念:

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

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

问3:我们应该怎么共享镜像,或者下载其他人分享的镜像呢? 
答:可以通过DockerHub进行镜像分享与下载,DockerHub是一个Docker镜像的托管平台。这样的平台称为Docker Registry。国内也有类似于DockerHub 的公开服务,如:网易云镜像服务、阿里云镜像库等。


Docker架构


常见Docker命令

查询所有docker命令含义:docker --help
查询单条dockers命令的使用方法(以docker images为例):docker images --help

镜像命令

镜像名称表示

镜像命令思维导图 

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

列出本地所有镜像
docker images

删除镜像ubuntu:20.04
docker image rm ubuntu:20.04
docker rmi  ubuntu:20.04

将镜像ubuntu:20.04保存为压缩包ubuntu_20_04.tar
docker save -o ubuntu_20_04.tar ubuntu:20.04

从压缩包ubuntu_20_04.tar中加载镜像
docker load -i ubuntu_20_04.tar

创建某个容器的镜像
docker [container] commit CONTAINER IMAGE_NAME:TAG


容器命令

容器命令思维导图

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

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

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

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

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

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

运行容器与暂停容器之间的切换

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

运行容器与停止容器之间的切换

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

展示容器信息

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

查看容器元数据 

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

docker logs :获取容器的日志

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

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

docker port [OPTIONS] CONTAINER

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

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

数据卷挂载

数据卷帮助我们解决容器与数据耦合之间的问题:
1. 不便于修改:当我们要修改Nginx的html内容时,需要进入容器内部修改,很不方便;
2. 数据不可复用:在容器内的修改对外是不可见的。所有修改对新创建的容器是不可复用的;
3. 升级维护困难:数据在容器内,如果要升级容器必然删除旧容器,所有数据都跟着删除了。

数据卷(volume)是一个虚拟目录,指向宿主机文件系统中的某个目录。

一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了。这样,我们操作宿主机的/var/lib/docker/volumes/html目录,就等于操作容器内的/usr/share/nginx/html目录了

数据卷操作的基本语法

docker volume [COMMAND]docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作:
- create 创建一个volume
- inspect 显示一个或多个volume的信息
- ls 列出所有的volume
- prune 删除未使用的volume
- rm 删除一个或多个指定的volume注意:
容器正在使用的数据卷与绑定挂载的数据卷无法删除。

创建一个数据卷名为html,并查询该数据卷的宿主机挂载点

挂载数据卷

如果该数据卷html不存在,则会被自动创建出来。之后我们可以通过docker volume inspect html查询该数据卷的宿主机挂载点,并cd到该挂载点目录中,即可在该挂载点中看到与容器挂载目录内相同的文件,并且可以通过对这些文件进行修改,实现对容器挂载目录中对应文件的对应修改。


直接挂载

容器不仅仅可以挂载数据卷,也可以直接挂载到宿主机目录上。关联关系如下:

  • 带数据卷模式:宿主机目录 --> 数据卷 ---> 容器内目录

  • 直接挂载模式:宿主机目录 ---> 容器内目录

语法

目录挂载与数据卷挂载的语法是类似的:

  • -v [宿主机目录]:[容器内目录]

  • -v [宿主机文件]:[容器内文件]

案例
要求创建并运行一个MySQL容器,将宿主机目录直接挂载到容器。

实现思路如下:
1)在将课前资料中的mysql.tar文件上传到虚拟机,通过load命令加载为镜像
2)创建目录/tmp/mysql/data
3)创建目录/tmp/mysql/conf,将课前资料提供的hmy.cnf文件上传到/tmp/mysql/conf
4)去DockerHub查阅资料,创建并运行MySQL容器,要求:
① 挂载/tmp/mysql/data到mysql容器内数据存储目录
② 挂载/tmp/mysql/conf/hmy.cnf到mysql容器的配置文件

ps: 


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

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

相关文章

算法练习-逆波兰表达式求值(思路+流程图+代码)

难度参考 难度:中等 分类:栈与队列 难度与分类由我所参与的培训课程提供,但需要注意的是,难度与分类仅供参考。且所在课程未提供测试平台,故实现代码主要为自行测试的那种,以下内容均为个人笔记&#xff0c…

Plant, Cell Environment:DNA pull down技术助力揭示AP2/ERF类转录因子提高芍药耐高温能力的分子机制

芍药是一种传统的中药材,并且具有极高的欣赏价值,其生长发育经常受到高温胁迫的影响。褪黑素是一种内源性微分子吲哚胺化合物,在各种生物体中具有多种生理功能,大量研究表明调节与褪黑素生物合成相关的基因来提高植物对高温的耐受…

《区块链简易速速上手小册》第8章:区块链的技术挑战(2024 最新版)

文章目录 8.1 可扩展性问题8.1.1 基础知识8.1.2 主要案例:比特币的可扩展性挑战8.1.3 拓展案例 1:以太坊的可扩展性改进8.1.4 拓展案例 2:侧链和分层解决方案 8.2 安全性与隐私8.2.1 基础知识8.2.2 主要案例:比特币交易的安全性8.…

DVI接口如何连接HDMI接口显示器?DVI转HDMI转换器DHA

DVI转HDMI转换器DHA简介 DVI转HDMI转换器DHA能够将DVI信号和R/L音频信号输入转换成HDMI信号输出,独特的功能使其顺畅地整合到家庭影院中,并且播放出高品质的图像。主要用于数据监控中心、大型会议展示中心、学校及各个公司 DVI转HDMI转换器DHA特点 01.支持分辨率4K…

网络协议 TCP协议

网络协议 TCP协议 文章目录 网络协议 TCP协议1. TCP协议段格式2. 可靠传输保障机制2.1 确认应答2.2 超时重传 3. 连接保障机制3.1 三次握手(建立连接)3.2 四次挥手(断开连接)3.3 TCP状态转换过程 4. 传输效率保障机制4.1 滑动窗口…

MySQL原理(二)存储引擎(1)概述

一、存储引擎介绍 1、概念: (1)MySQL中的数据用各种不下同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在MySQL中称为存储引擎…

【全csdn最前沿LVGL9】按钮的使用(lv_button)、标签的使用(lv_label)

文章目录 前言一、按钮概述二、按钮的使用2.1 创建一个按钮2.2 按钮的样式 三、标签概述四、标签的使用4.1 创建一个标签4.2 样式4.3 设置文本4.4 长文本模式4.5 文本选择4.6 文本对齐4.7 非常长的文本4.8 字体设置字体支持的Unicode字符字体列表特殊的字体 总结 前言 欢迎来到…

Unity使用反向遮罩实现镂空shader

实现步骤: 1,创建两个材质球,遮罩层的属性如下: 被遮罩层的属性如下: 2,使用两张image,遮罩层在父节点,被遮罩层在子节点,然后分别添加材质球与镂空图片 实现效果如下&a…

k8s存储之PV、PVC

在k8s集群中,资源存储会散落到各个工作节点上,这样对用资源调用很不方便,那么k8s是如何实现存储资源共享的呢,本文浅尝辄止的探讨一下,k8s是通过pv、pvc实现的。 一、PV、PVC的概念 1、持久卷(PV) pv是Pe…

2024-01-07-AI 大模型全栈工程师 - AI 产品部署和交付

摘要 2024-01-07 周日 杭州 阴 本节内容: 如何选择 GPU 和云服务器,追求最高性价比如何部署自己的 fine-tune 的模型,向业务提供高可用服务如何控制内容安全,做好算法备案,确保合规 课程内容 1. 硬件选型 a. Nvidia 几乎是模…

IAR编译和调试CMS32L051

0 Preface/Foreword 0.1 参考文档 中微半导体BAT系列单片机学习笔记_V1.1.pdf 1 配置方法 1.1 编译工具链添加 CMS对于IAR工具,有一个插件文件,用于安装对应的CMS系列芯片。 工具名称:iar_plug20210926.7z 按照完成之后,可…

如果我要访问一个网址,那么在网络中会有哪些过程

访问一个网址是我们日常网络使用中非常常见的操作,背后涉及到一系列精密而复杂的步骤。这个过程包括DNS解析、建立TCP连接、发起HTTP请求、服务器处理请求、服务器响应、浏览器渲染等环节。在这篇文章中,我们将深入探讨这些步骤,并解释它们在…

强大的虚拟机Parallels Desktop 19 mac中文激活

Parallels Desktop是一款功能全面、易于使用的虚拟机软件,它为用户提供了在Mac电脑上同时运行多个操作系统的便利。 软件下载:Parallels Desktop 19 mac中文激活版下载 Parallels Desktop 19 mac具有快速启动和关闭虚拟机的能力,让用户能够迅…

基于SpringBoot+Vue学科竞赛管理系统

文章目录 基于SpringBootVue学科竞赛管理系统1系统概述1.3系统设计思想 2相关技术2.1 MYSQL数据库2.2 B/S结构2.3 Spring Boot框架简介2.4 Vue简介 3系统分析3.1可行性分析3.1.1技术可行性3.1.2经济可行性3.1.3操作可行性 3.2系统性能分析3.2.1 系统安全性3.2.2 数据完整性 3.4…

Wampserver 切换中文时无法启动报错处理

在使用 Wampserver 软件时默认为英语,可以看到有语言选择功能,切换其他语言。但选择中文切换后,软件重启时报如下错误: The configuration file contains a systax error on line 44:[EParseError] Mismatched or misplaced quoue…

(十六)串口UART

文章目录 UART简介传输数据帧和波特率定时器1作为串口1波特率发生器串口部分相关寄存器TMODAUXRPCONSCONSBUF 串口1工作模式1:8位UART,波特率可变总体工作原理如何简单接收一个字符和发送数据一步之遥的设置现象演示 UART简介 通用异步收发传输器(Unive…

一种轻量分表方案-MyBatis拦截器分表实践|京东零售技术实践

背景 部门内有一些亿级别核心业务表增速非常快,增量日均100W,但线上业务只依赖近一周的数据。随着数据量的迅速增长,慢SQL频发,数据库性能下降,系统稳定性受到严重影响。本篇文章,将分享如何使用MyBatis拦…

微软Azure-OpenAI 测试调用及说明

本文是公司在调研如何集成Azure-openAI时,调试测试用例得出的原文,原文主要基于官方说明文档简要整理实现 本文已假定阅读者申请部署了模型,已获取到所需的密钥和终结点 变量名称值ENDPOINT从 Azure 门户检查资源时,可在“密钥和…

Advanced CNN

文章目录 回顾Google NetInception1*1卷积Inception模块的实现网络构建完整代码 ResNet残差模块 Resedual Block残差网络的简单应用残差实现的代码 练习 回顾 这是一个简单的线性的卷积神经网络 然而有很多更为复杂的卷积神经网络。 Google Net Google Net 也叫Inception V…

5、应急响应-拒绝服务钓鱼识别DDOS压力测试邮件反制分析应用日志

目录 前言: 1、#内网应急-日志分析-爆破&横向&数据库 2、#红队APT-钓鱼邮件识别-内容&发信人&附件 3、#拒绝服务攻击-DDOS&CC-代理&防火墙防御 用途:个人学习笔记,欢迎指正! 前言: 了解和…