微服务—Docker

news2024/9/21 2:47:36

目录

初识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 容器名或ID
 
docker unpause 容器名或ID

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

docker start 容器名或ID
 
docker restart 容器名或ID
 
docker 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.coloradmin.cn/o/1424365.html

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

相关文章

Linux ---- Shell编程三剑客之AWK

一、awk处理文本工具 1、awk概述 awk 是一种处理文本文件的语言,是一个强大的文本分析工具。AWK是专门为文本处理设计的编程语言,也是行处理软件,通常用于扫描、过滤、统计汇总工作。用来处理列。数据可以来自标准输入也可以是管道或文件。…

EBC金融英国CEO:高波动性周期下,如何寻找市场的稳定性?

利率主导的市场,将在2024年延续。目前,固收市场对于降息的定价,正通过利率传导至不同资产中。尽管市场迫切利用通胀去佐证降息,但各国央行仍囿于通胀目标的政策桎梏。政策和市场预期的博弈将继续牵动市场脉搏,引发价格…

酷开科技依托酷开系统新剧热播,引领潮流风向

随着科技的不断发展,智能电视已经成为了家庭娱乐的主流,是消费者居家休闲放松的好帮手。其中,作为国内智能电视操作系统领军者的酷开系统,一直致力于为消费者提供丰富的内容和贴心的体验。近日,酷开系统新剧热播&#…

数组常见算法题-评委打分

签名:但行好事,莫问前程。 文章目录 前言一、计算数组的最大值、最小值、总和、均值二、评委打分总结 前言 学习记录一下数组常见的算法题。 一、计算数组的最大值、最小值、总和、均值 需求:定义一个int型的数组,分别赋予随机两…

Tensorflow2.0笔记 - where,scatter_nd, meshgrid相关操作

本笔记记录tf.where进行元素位置查找,scatter_nd用于指派元素到tensor的特定位置,meshgrid用作绘图的相关操作。 import tensorflow as tf import numpy as np import matplotlib.pyplot as plttf.__version__#where操作查找元素位置 #输入的tensor是Tr…

检测头篇 | 原创自研 | YOLOv8 更换 SEResNeXtBottleneck 头 | 附详细结构图

左图:ResNet 的一个模块。右图:复杂度大致相同的 ResNeXt 模块,基数(cardinality)为32。图中的一层表示为(输入通道数,滤波器大小,输出通道数)。 1. 思路 ResNeXt是微软研究院在2017年发表的成果。它的设计灵感来自于经典的ResNet模型,但ResNeXt有个特别之处:它采用…

springboot 文件差异化对比以及可视化展示

maven依赖 <!-- 文件内容对比--><dependency><groupId>io.github.java-diff-utils</groupId><artifactId>java-diff-utils</artifactId><version>4.11</version></dependency>创建Diff 工具类 package com.system.ut…

大路灯和台灯哪个更适合学生?五款适合学生的大路灯分享

根据国家卫健委在上个月公布的数据&#xff0c;我国儿童青少年总体近视率为52.7%&#xff0c;其中&#xff0c;小学生为35.6%&#xff0c;初中生为71.1%&#xff0c;高中生为80.5%。随着这个数据公布以来&#xff0c;许多家长开始紧张自家孩子的近视问题&#xff0c;不少家长为…

Vue学习Element-ui

声明&#xff1a;本文来源于黑马程序员PDF讲义 Ajax 我们前端页面中的数据&#xff0c;如下图所示的表格中的学生信息&#xff0c;应该来自于后台&#xff0c;那么我们的后台和前端是 互不影响的2个程序&#xff0c;那么我们前端应该如何从后台获取数据呢&#xff1f;因为是2…

【FAS Survey】《Deep learning for face anti-spoofing: A Survey》

PAMI-2022 最新成果&#xff1a;https://github.com/ZitongYu/DeepFAS 文章目录 1 Introduction & Background1.1 Face Spoofing Attacks1.2 Datasets for Face Anti-Spoofing1.3 Evaluation Metrics1.4 Evaluation Protocols 2 Deep FAS with Commercial RGB Camera2.1 H…

幻兽帕鲁服务器游戏怎么升级版本?

幻兽帕鲁服务器游戏怎么升级版本&#xff1f;自建幻兽帕鲁服务器进入Palworld游戏提示“您正尝试加入的比赛正在运行不兼容的游戏版本&#xff0c;请尝试升级游戏版本”什么原因&#xff1f;这是由于你的客户端和幻兽帕鲁服务器版本不匹配&#xff0c;如何解决&#xff1f;更新…

pinctrl/gpio子系统(1)-pinctrl子系统介绍及驱动源码分析

1.简介 在如今的驱动开发工作中&#xff0c;实际上已经很少去对着寄存器手册进行驱动开发了&#xff0c;一般板子拿到手&#xff0c;已经有原厂的驱动开发工程师&#xff0c;在gpio子系统、pinctrl子系统中将自家芯片的引脚适配好了。 我们直接基于设备树已配置好的寄存器值&a…

jsonpath相关---JSONPath - 用于 JSON 的 XPath

一.简介 XML 的一个经常强调的优点是提供了大量工具来分析、转换和有选择地从 XML 文档中提取数据。XPath 就是这些强大的工具之一。 现在是时候想知道&#xff0c;是否需要像 XPath4JSON 这样的东西&#xff0c;以及它可以解决哪些问题。 无需特殊脚本&#xff0c;即可以交…

阿赵UE学习笔记——14、LOD

阿赵UE学习笔记目录   大家好&#xff0c;我是阿赵。   继续学习虚幻引擎的用法。这次看看虚幻引擎的Level Of Detail(LOD)的用法。 一、测试场景准备 用植物系统&#xff0c;在地形上面刷了好多草&#xff1a; 这个时候看一下网格&#xff0c;会发现网格比较多和密集。 …

中国的茶文化:历史、传统与生活

中国的茶文化&#xff1a;历史、传统与生活 一、引言 茶&#xff0c;这一神奇而古老的饮品&#xff0c;与中国的历史、文化和生活方式紧密相连。中国的茶文化&#xff0c;源远流长&#xff0c;博大精深&#xff0c;是中华文明的重要组成部分。它不仅是一种饮料&#xff0c;更是…

阿里云推出 3.x Java 探针,解锁应用观测与治理的全新姿势

作者&#xff1a;张铭辉、泮圣伟 前言 随着春节大促即将到来&#xff0c;为了确保线上业务高效稳定地运行&#xff0c;电商企业大多会对旗下关键业务应用进行多轮测试。通过模拟线上较高流量的请求&#xff0c;来观察服务性能的实际表现。以某企业的业务测试报告举例&#xf…

vue-cli初始化项目很慢?

第一种情况 大部分是由于npm的镜像源不是淘宝的 cmd输入npm config get registry查看是不是淘宝的&#xff0c;是的话看第二种情况试试不是的话输入npm config set registry https://registry.npm.taobao.org 第二种情况 vue-cli配置文件不是使用淘宝镜像源的 找到文件.vue…

sklearn 计算 tfidf 得到每个词分数

from sklearn.feature_extraction.text import TfidfVectorizer# 语料库 可以换为其它同样形式的单词 corpus [list(range(-5, 5)),list(range(-6,4)),list(range(12)),list(range(13))]# corpus [ # [Two, wrongs, don\t, make, a, right, .], # [The, pen, is, might…

深入浅出HBase:一文理解HBase基础概念(列存储、时间戳、key-value)、架构特点以及适合的使用场景

文章目录 一. HBase 数据模型1. 行存储与列式存储1.1. 行存储1.2. 列存储 2. HBase 数据模型2.1. 模型概览2.2. 列与列族2.3. 时间戳&#xff1a;定义数据版本2.4. HBase的Key-Value 三. HBase架构1. HBase读写流程简述2. HRegionServer内部内部数据流转&#xff1a;HRegion &l…

SparkStreaming---入门

文章目录 1.SparkStreaming简介1.1 流处理和批处理1.2 实时和离线1.3 SparkStreaming是什么1.4 SparkStreaming架构图 2.背压机制3.DStream案例实操 1.SparkStreaming简介 1.1 流处理和批处理 流处理和批处理是两种不同的数据处理方式&#xff0c;它们在处理数据的方式和特点…