微服务—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,一经查实,立即删除!

相关文章

Android AudioManager

Android AudioManager API AudioManager(audio翻译过来就是声音、音频): AudioManager,音频管理类,它主要提供了丰富的API让开发者对应用的音量和铃声模式进行控制以及访问。主要内容涉及到音频流、声音、蓝牙、扩音…

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

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

selenium元素定位总结 - xpath定位高级用法

文章目录 1.8种元素定位方法2.xpath定位的高级用法1. 绝对路径2.相对路径3. 索引定位4.使用XPATH的属性值定位元素5.使用XPATH的属性名称定位元素6.使用任意值来匹配属性及元素7.使用模糊的属性值匹配starts-with()ends-with()contains()text()last() 8.过虑某个元素name() 9.常…

【2023遥感应用组一等奖】“变”捷施肥-基于遥感的精准施肥检测决策实施一体化系统

作品介绍 1 应用背景 冬小麦是我国主要的粮食作物之一,粮食安全有利于社会稳定发展。氮是作物生长的重要元素之一,影响作物籽粒形成与品质优劣,是作物产量最重要的限制因素。氮肥对粮食增产的贡献率达到30%~50%,是保证作物高产、稳产的关键。实现作物氮素营养的精准监测…

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

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

CMake官方教程中文翻译 Step 11: Adding Export Configuration

鉴于自己破烂的英语,所以把cmake的官方文档用 谷歌翻译 翻译下来方便查看。 英语好的同学建议直接去看cmake官方文档(英文)学习:地址 点这里 或复制:https://cmake.org/cmake/help/latest/guide/tutorial/index.html …

《区块链简易速速上手小册》第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.…

linux查询文件夹及文件数目

1.查询文件夹下的文件夹数目 expr $(find ./uploud_from_machine/formal_dom/18 -maxdepth 1 -type d | wc -l) - 1 2.查询文件夹下的文件数目 要统计目录中的所有项(文件和子目录),但不包括目录本身,可以使用以下命令&#xf…

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 几乎是模…

W801学习笔记十:HLK-W801制作学习机/NES游戏机(总结)

本章总结一下整个开发过程中遇到的问题: 1、引脚的抗干扰问题: 屏幕显示的时候,概率出现花屏。无论怎么修改代码都不能解决,一个偶然的机会,发现当手触摸屏幕的WR和CS引脚时,屏幕会正常。查阅资料&#x…

C# 递归执行顺序

为了方便进一步理解递归,写了一个数字输出 class Program {static void Main(string[] args){int number 5;RecursiveDecrease(number);}static void RecursiveDecrease(int n){if (n > 0){Console.WriteLine("Before recursive call do : " n);Rec…

IAR编译和调试CMS32L051

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

[Python小工具]Python批量生成数据到MySQL

[Python小工具]Python批量生成数据到MySQL base.py #!/usr/bin/python # -*- coding:utf-8 -*- import time import random from datetime import datetime, timedelta from faker import Faker import stringfake Faker(zh_CN)class Base_conn:# 数据库连接配置初始化def _…