微服务—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.rhkb.cn/news/251469.html

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

相关文章

MySql 慢SQL配置,查询,处理

一.慢SQL配置相关 1.查看慢SQL是否开启 执行下面命令查看是否开启慢SQL show variables like %slow_query_log; 复制代码 OFF: 未开启ON: 2.打开慢SQL配置 执行下面的命令开启慢查询日志 set global slow_query_logON; 复制代码 3.修改慢查询阈值 前面介绍了SQL执行到达了…

DATAX改造支持geometry类型数据同步

数据库使用postgresql安装了postgis插件存储了geometry空间数据,想使用datax做数据同步,但datax本身不支持geometry类型数据,如何改造呢? 1.首先下载已改造支持geometry类型的datax引擎,下载地址 https://download.c…

九州金榜|孩子不想上学的原因是什么

在当今社会,越来越多的孩子表现出对上学的抵触情绪。这不仅让家长们感到困惑,也给教育工作者带来了挑战。那么,孩子不想上学的原因究竟是什么呢?九州金榜家庭教育带大家一起探讨孩子不想上学的原因以及解决办法: 一、…

[SWPUCTF 2021 新生赛]easy_md5

用get给name 用post给password 二个值不相等MD5相等 可以通过php的弱类型绕过 $a!$b md5($a)md5($b)找到不同 a 和 a和 a和b,两者的md5值均为0e开头的形式

Banana Pi BPI-R4开源路由器开发板快速上手用户手册,采用联发科MT7988芯片设计

介绍 Banana Pi BPI-R4 路由器板采用 MediaTek MT7988A (Filogic 880) 四核 ARM Corex-A73 设计,4GB DDR4 RAM,8GB eMMC,板载 128MB SPI-NAND 闪存,还有 2x 10Gbe SFP、4x Gbe 网络端口,带 USB3 .2端口,M.2…

华为---STP(二)---STP报文和STP端口状态

目录 1. STP报文简介 1.1 Configuration BPDU 1.2 TCN BPDU 2. STP交换机端口状态 2.1 STP交换机端口状态表 2.2 STP交换机端口状态迁移过程图 2.3 STP交换机端口状态变化举例说明 3 引起的STP网络拓扑改变的示例 3.1 根桥出现故障 3.2 有阻塞端口的交换机根端口所在…

电脑用的视频编辑软件有哪些 视频剪辑软件排行榜 视频剪辑软件推荐 视频剪辑培训学习 视频剪辑制作自学 电脑视频剪辑需要什么配置

电脑视频剪辑软件这么多,到底哪些比较好用?下面就让我们以十大电脑视频剪辑软件排行榜来细数好用的软件。另外,电脑视频剪辑需要什么配置?本文也会给大家从内存、CPU等参数上介绍,并推荐好用的电脑设备。 一、十大电脑…

深度学习技巧应用35-L1正则化和L2正则在神经网络模型训练中的应用

大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用35-L1 正则化和L2正则在神经网络模型训练中的应用。L1正则化和L2正则化是机器学习中常用的两种正则化方法,用于防止模型过拟合并提高模型的泛化能力。这两种正则化方法通过在损失函数中添加惩罚项来控制模型的复杂性。…

1 月 30 日算法练习-数论

唯一分解定理 唯一分解定理指的是:对于任意一个>1的正整数,都可以以唯一的一种方式分解为若干质因数的乘积。 x p 1 k 1 ⋅ p 2 k 2 ⋅ … ⋅ p m k m x p_1^{k_1} \cdot p_2^{k_2} \cdot \ldots \cdot p_m^{k_m} xp1k1​​⋅p2k2​​⋅…⋅pmkm​…

Web服务器之Tomcat

文章目录 Web 服务器软件简介资源分类访问流程常见的Web服务器软件 Tomcat简介使用步骤使用Tomcat注意事项部署项目的方式方式一方式二方式三 问题中文乱码黑窗口一闪而过启动报错 Web 服务器软件 简介 服务器:安装了服务器软件的计算机服务器软件:接收…

hbuilderx uniapp运行到真机控制台显示手机端调试基座版本号1.0.0,调用uni.share提示打包时未添加share模块

记录一个困扰了几天的一个蠢问题,发现真相的我又气又笑。 由于刚开始接触uniapp 移动端开发,有个需求需要使用uni.share API,但是我运行项目老提示打包时没配置share模块 我确实没在manifest内配置。网上搜了一些资料,但是我看官…

Allegro中设置让Route Keepout(禁止布线区)允许布线或打过孔的方法

Allegro中设置让Route Keepout(禁止布线区)允许布线或打过孔的方法 Chapter1 Allegro中设置让Route Keepout(禁止布线区)允许布线或打过孔的方法一、前言二、设置方法 Chapter2 Cadence Allegro PCB设计88问解析(二十三) 之 Alleg…

Ai知识图谱

总结:从AI技术栈全貌来看,基础模型、基础算法,个人及小公司是玩不起的,大公司才有对应人力、财力、算力 去做,个人更多的是要在应用场景上创新,几个关键的技术必须会:编码语言(Pytho…

聊聊ClickHouse MergeTree引擎的固定/自适应索引粒度

前言 我们在刚开始学习ClickHouse的MergeTree引擎时,就会发现建表语句的末尾总会有SETTINGS index_granularity 8192这句话(其实不写也可以),表示索引粒度为8192。在每个data part中,索引粒度参数的含义有二&#xf…

Qt多语言翻译

Qt多语言翻译概述 Qt提供了非常简单易用的多语言翻译机制,其核心类为QTranslator.概括来说就是利用Qt的lupdate工具将项目中所有tr函数包裹的字符串提取到.ts文件中,然后使用Qt Linguist由专门的翻译人员对提取的.ts文件进行逐个单词短语的翻译工作. 翻译…

Node.js Express 框架 2024版 笔记

1.0 操作命令 Node.js express 框架 https://www.expressjs.com.cn/ npm install -g express-generator expressexpress --pug --git // --pug 添加对 pug 模板引擎的支持 // --git 添加 .gitignore 代码仓库排除 //无法直接安装新版pug模板 npm i npm …

CentOS7中安装ElasticSearch

文章目录 检测是否安装了Elasticsearch安装JDK下载java配置 下载Elasticsearch解压安装Elasticsearch修改配置文件启动Elasticsearch常见问题 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasti…

C++ Qt开发:SqlTableModel映射组件应用

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍SqlTableModule组件的常用方法及灵活运用。 …

Java 数据结构 二叉树(一)二叉查询树

目录 树的种类 二叉树 二叉查找树 满二叉树 ​编辑 完全二叉树 二叉树的数据存储 链式存储 数组存储 寻址方式: 二叉树的遍历(了解即可) ​编辑 二叉查询树缺点 前言-与正文无关 生活远不止眼前的苦劳与奔波,它还充满…

如何在Windows系统使用Plex部署影音服务与公网访问本地资源【内网穿透】

文章目录 1.前言2. Plex网站搭建2.1 Plex下载和安装2.2 Plex网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通…