微服务day06-Docker

news2024/11/18 5:32:29

Docker

大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题:

  • 依赖关系复杂,容易出现兼容性问题

  • 开发、测试、生产环境有差异

1.什么是Docker?

大型项目组件很多,运行环境复杂,部署时会遇到各种问题,各个应用依赖各不相同,版本不同等,linux系统不同等…部署时非常复杂,效率很低。
Docker如何解决依赖兼容的问题?

  • 将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包

  • 将每个应用放到一个隔离容器去运行,避免互相干扰

虽然解决了不同应用的兼容问题,但是开发、测试等环境会存在差异,操作系统版本也会有差异,怎么解决这些问题呢?

linux系统的原理
分为3层,系统应用层(ubuntu/centos等),linux内核(所有Linux系统使用的都是linux系统内核),计算机硬件;
内核:内核负责与硬件交互,对上层提供内核指令,用于操作硬件;
系统应用:操作系统本身提供的应用、函数库。这些函数库是对内核指令的封装,使用更加方便;

应用于计算机交互的流程如下:

1)应用调用操作系统应用(函数库),实现各种功能

2)系统函数库是对内核指令集的封装,会调用内核指令

3)内核指令操作计算机硬件

由于系统应用不同,因此ubuntu的一个应用安装到centos系统上可能无法执行(提示找不到函数等),因此Docker提供了解决方案:

  • Docker将用户程序与所需要调用的系统(比如Ubuntu)函数库一起打包
  • Docker运行到不同操作系统时,直接基于打包的函数库,借助于操作系统的Linux内核来运行

2.Docker与虚拟机的区分?

Docker可以让一个应用在任何操作系统中非常方便的运行。而以前我们接触的虚拟机,也能在一个操作系统中,运行另外一个操作系统,保护系统中的任何应用。

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

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

二者的性能指标对比:

综上所述,在实际的开发部署中通常Docker>虚拟机。

3.Docker架构

镜像
就是把一个应用在硬盘上的文件、及其运行环境、部分系统函数库文件一起打包形成的文件包。这个文件包是只读的。
容器
镜像中的应用程序运行后形成的进程就是,只不过要隔离起来。因此一个镜像可以启动多次,形成多个容器进程。

开源应用程序非常多,打包这些应用往往是重复的劳动。为了避免这些重复劳动,人们就会将自己打包的应用镜像,例如Redis、MySQL镜像放到网络上,共享使用,就像GitHub的代码共享一样。

  • DockerHub:DockerHub是一个官方的Docker镜像的托管平台。这样的平台称为Docker Registry。

  • 国内也有类似于DockerHub 的公开服务,比如 网易云镜像服务、阿里云镜像库等。

我们一方面可以将自己的镜像共享到DockerHub,另一方面也可以从DockerHub拉取镜像:

Docker是一个CS架构的程序,由两部分组成:

  • 服务端(server):Docker守护进程,负责处理Docker指令,管理镜像、容器等

  • 客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。本地直接使用指令即可,远程使用RestApi发送请求。
    在这里插入图片描述

4.Docker的安装

企业部署使用最多的时linux系统(Centos最多)

使用虚拟机安装CentOS7系统(满足了Docker CE对linux内核的最低要求)

1.卸载旧版Docker
如果虚拟机中可能存在旧版Docker,则需要删除旧的docker中相关内容

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce

2.卸载旧版Docker
2.1 虚拟机联网
记得使用NAT

2.2 安装yum工具

yum install -y yum-utils \ 
		   device-mapper-persistent-data \
           lvm2 --skip-broken

2.3 设置docker镜像源

yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast

2.4 下载以及安装docker-ce(社区免费版)

yum install -y docker-ce

2.5 启动Docker(如果是在虚拟机上为了避免逐个关闭端口号可以直接关闭防火墙,并设置禁用防火墙)

# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld

2.6 安装成功之后,查看版本

docker -v 

显示如下内容表名安装成功
在这里插入图片描述
2.7 新安装docker之后如果重启可能导致docker服务没有启动,报错如下,表示docker守护进程未启动:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
此时在root权限下执行

systemctl start docker 

5.镜像的命令

首先来看下镜像的名称组成:

  • 镜名称一般分两部分组成:[repository]:[tag]。
  • 在没有指定tag时,默认是latest,代表最新版本的镜像

比如[mysql]:[8.33];
在这里插入图片描述
常用命令:

  • 从dockerhub中拉取镜像
# 比如拉取nginx1.2.5版本
docker pull nginx:1.25.4
  • 查看本地镜像
docker images
  • 导出镜像到磁盘
# docker save -o [保存的目标文件名称] [镜像名称]
docker save -o nginx.tar nginx:1.25.4

如果只是指定保存文件名称,则会保存到当前目录下,如果想要保存到某个目录下可以直接指定:

docker save -o ./download/nginx.tar nginx:1.25.4
  • 从磁盘中加载镜像
# docker load -i [某个位置的镜像包(如果是在当前目录下直接用镜像名即可]
docker load -i ./download/nginx.tar
  • 删除镜像
docker rmi nginx:1.25.4

6.容器的命令

基本命令使用
在这里插入图片描述

  • 创建一个并运行一个nginx容器:
docker run --name contrainerName -p 80:8080 -d ngxin:1.24.5
# docker run 创建并运行一个nginx容器
# --name contrainerName  为容器起一个名字
# -p 80:8080 宿主机与容器的端口映射,左侧是宿主机端口,右侧是容器端口
# -d ngxin:1.24.5运行的容器是哪一个(-d是放到后台邮件)

对端口映射的解读:

由于容器是隔离的,所以并不能直接外部主机访问,外部主机可以访问宿主机(你可以将docker容器比作一个寄生虫,计生在宿主体内,外部无法与它直接交流,如果有必要交流,必须通过宿主作为中介,即外部告诉宿主,宿主告诉寄生虫),因此,将宿主机的端口与docker容器的端口作了一个映射之后,外部主机访问宿主机对应端口,宿主机端口再将对应的内容按照端口映射转发给docker容器

创建成功之后会返回该容器的ID:
在这里插入图片描述

  • 查看所有容器的状态:
docker ps 
  • 查看容器的日志
# 普通日志输出
docker logs mv
# 持续跟踪日志输出
docker logs -f mv 
  • 让一个停止的容器再次运行
docker start mv 
  • 停止一个容器的运行
docker stop mv 
  • 暂停(挂起)一个容器
docker pause mv 
  • 将暂停(挂起)的容器拿下来继续运行
docker unpause mv 

nginx容器创建之后,直接访问虚拟机对应的端口号:
在这里插入图片描述
进入容器,修改文件
进入容器。进入我们刚刚创建的nginx容器的命令为:

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

进入nginx默认页面的目录:

cd /usr/share/nginx/html

由于docker容器是阉割版的"系统",只提供了对应的镜像文件,因此不会提供vi等编辑器,如果要在里边修改内容,需要使用sed替换命令。

# sed命令详解
sed command file
# commond 针对每行的内容进行处理
	# -i 直接修改文件内容,而不是输出到屏幕上
	# -e 直接在命令行模式上进行sed的操作编辑
	# s 替换,将文件原内容替换为新内容。举例:s/old/new/g "/"是分割符号,用来区分新内容与旧内容的,也开始使用别的符号比如:“#”
	# g 表示行内全面替换
# file 要处理的文件,如果忽略该参数,会将标准输入作为对象进行处理

替换内容命令:

sed -i -e 's/传智教育欢迎您/NiHao/g' -e 's#<head>#<head><meta charset="utf-8">#g' index.html

替换之后结果
在这里插入图片描述

7.数据卷

在之前的操作中,容器与数据耦合过高,当需要修改更新等操作时,非常麻烦;因此引入数据卷的概念。
数据卷:一个虚拟目录,指向宿主主机文件系统中的某个目录。
在这里插入图片描述
可以类比映射,数据卷挂载之后,对etc/nginx/conf就相当于对宿主机中的conf目录下进行操作,html目录同理。
当需要修改/更新等操作时修改的实际上是宿主主机文件系统中的目录下的内容,就算将容器删除之后,数据也是存在的,如果想要获取原来的数据,只需要再将数据卷挂载到宿主文件系统中对应的目录就行了。

常用命令

  • docker volume命令是数据卷操作,根据命令后跟随的command来确定下一步的操作:

  • create 创建一个volume

# 创建一个名为html的数据卷
docker volume create html 
  • inspect 显示一个或多个volume的详细信息
docker volum inspect html

在该命令中我们可以查看该数据卷的详细信息,包括数据卷在宿主机中的存储位置:

在这里插入图片描述
可以看到该数据卷在宿主机中的实际位置是"/var/lib/docker/volumes/html/_data".

  • ls 列出所有的volume
docker volume ls 
  • prune 删除未使用的volume

  • rm 删除一个或多个指定的volume

数据卷挂载案例

  • 创建容器并挂载数据卷到容器内的目录
docker run --name mv -v html:/usr/share/nginx/html -p 80:80 -d nginx
# 创建容器的命令与之前相同,-v html:/usr/share/nginx/html 挂载数据卷html到容器内的/usr/share/nginx/html目录上

进入html数据卷所在位置,并修改HTML内容

# 查看html数据卷的位置
docker volume inspect html
# 进入该目录
cd /var/lib/docker/volumes/html/_data
# 修改文件
vi index.html

在宿主机下修改完成之后(或者说是在数据卷下修改之后),容器中的对应的文件也会同步修改。

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

  • 带数据卷模式:宿主机目录 --> 数据卷 —> 容器内目录
  • 直接挂载模式:宿主机目录 —> 容器内目录

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

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

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

1.创建目录/tmp/mysql/,以及2个子目录:/tmp/mysql/data , /tmp/mysql/conf

cd /tmp # /tmp已经存在
mkdir /mysql
mkdir /mysql/data
mkdir /mysql/conf

2.以mysql为例,首先拉取8.0.33版本的mysql镜像

docker pull docker:8.0.33

3.查看镜像列表是否成功导入

docker images

4.导入mysql的一个额外配置文件hmy.cnf
在这里插入图片描述
5.创建mysql容器

docker run \
--name mysql \
-e MYSQL_ROOT_PASSWORD=123 \
-p 3306:3306 \
-v /tmp/mysql/conf/hmy.conf:/ect/mysql/conf.d/hmy.cnf \
-v /tmp/mysql/data:/var/lib/mysql \
-d \
mysql:8.0.33

运行成功之后,返回mysql容器ID,使用docker ps命令查看
在这里插入图片描述
然后在外部(你的主机)使用mysql客户端连接
在这里插入图片描述
提示连接成功则成功

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

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

相关文章

java集合类常用的方法介绍

在 Java 中&#xff0c;集合&#xff08;Collections&#xff09;是用于存储多个元素的容器。Java Collections Framework 提供了丰富的集合类&#xff0c;用于满足不同的数据存储需求。以下是一些常用的 Java 集合类及其常用方法&#xff0c;以及简单的例子来说明它们的用法。…

最佳牛围栏(二分 + 前缀和)

最佳牛围栏 原题链接&#xff1a;https://www.acwing.com/problem/content/104/ 题目 思路 我们发现若是枚举答案的话&#xff0c;那么我们判断是否存在一个平均值大于等于mid&#xff0c;如果最优解是x&#xff0c;那么mid < x的时候&#xff0c;必然可以找到一段&#x…

【文件增量备份系统】使用Mysql的流式查询优化数据清理性能(针对百万量级数据)

文章目录 功能介绍原始方案测试 流式处理测试 功能可用性测试 功能介绍 清理功能的作用是&#xff1a;扫描数据库中已经备份过的文件&#xff0c;查看数据源中是否还有相应的文件&#xff0c;如果没有&#xff0c;说明该文件被删除了&#xff0c;那相应的&#xff0c;也需要将…

buuctf EasyBypass --不会编程的崽

buu后边的题有些确实难&#xff0c;有些其实也没那么复杂。昨天做一道异或绕过的题&#xff0c;现在还没看懂QAQ 先来一题简单的吧。哎&#xff0c;随缘更新吧 <?phphighlight_file(__FILE__);$comm1 $_GET[comm1]; $comm2 $_GET[comm2];if(preg_match("/\|\|\\|\…

新规正式发布 | 百度深度参编《生成式人工智能服务安全基本要求》

2024年2月29日&#xff0c;全国网络安全标准化技术委员会&#xff08; TC260 &#xff09;正式发布《生成式人工智能服务安全基本要求》&#xff08;以下简称《基本要求》&#xff09;。《基本要求》规定了生成式人工智能服务在安全方面的基本要求&#xff0c;包括语料安全、模…

弱电综合布线:连接现代生活的纽带

在当今信息化快速发展的时代&#xff0c;弱电网络布线作为信息传输的重要基础设施&#xff0c;其作用日益凸显。它不仅保障了数据的高效流通&#xff0c;还确保了通信的稳定性。从商业大厦到教育机构&#xff0c;从政府机关到医院急救中心&#xff0c;再到我们居住的社区&#…

【开课】云贝教育2024年3月9日-PostgreSQL中级工程师PGCE认证培训开课啦!

课程介绍 根据学员建议和市场需求,规划和设计了《PostgreSQL CE 认证课程》,本课程以内部原理、实践实战为主&#xff0c;理论与实践相结合。课程包含PG 简介、安装使用、服务管理、体系结构等基础知识。同时结合一线实战案例&#xff0c; 面向 PG 数据库的日常维护管理、服务和…

如何远程访问电脑文件?

远程访问电脑文件是当今数字化时代中十分常见且实用的技术。它允许我们从任何地方的计算机或移动设备访问和操作我们的电脑中的文件。无论是远程工作、远程学习、远程协作还是方便地获得自己计算机上的重要文件&#xff0c;远程访问电脑文件都为我们提供了巨大的便利。 在远程访…

从 iPhone 15/15 Pro 恢复丢失数据的 3 种方法

毫无疑问&#xff0c; iPhone 15 是迄今为止最令人印象深刻的 iPhone 。另一方面&#xff0c;我们知道&#xff0c;设备上保存的数据无论多么可靠&#xff0c;在设备使用过程中都可能因各种原因而丢失。 由于这些设备的性质&#xff0c;您在使用 iPhone 15、iPhone 15 Pro 或 …

大语言模型系列-GPT-2

文章目录 前言一、GPT-2做的改进二、GPT-2的表现总结 前言 《Language Models are Unsupervised Multitask Learners&#xff0c;2019》 前文提到&#xff0c;GPT-1利用不同的模型结构微调初步解决了多任务学习的问题&#xff0c;但是仍然是预训练微调的形式&#xff0c;GPT-…

[密码学]Base64编码

一、相关指令 1. 查看工具版本号 base64 --version2. 对字符串加密 echo 字符串 | base64 echo "Hello base64" | base643. 对字符串解密 echo 字符串 |base64 -d echo "SGVsbG8gTGV0aWFuLVJTQQo" | base64 -d4. 对文件加密 base64 文件名 base64 tex…

【Vue 3】

v-model 作用&#xff1a;给表单元素使用&#xff0c;双向数据绑定---->可以快速获取或设置表单元素内容 是value属性和input事件的合写 数据变化--->视图自动更新试图变化--->数据自动更新 语法&#xff1a;v-model"变量" 数据变&#xff0c;视图跟着变…

【你也能从零基础学会网站开发】Web建站之HTML+CSS入门篇 常用HTML标签(2)

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 超级链接标…

遗传算法优化BP神经网络时间序列回归分析,ga-bp回归分析

目录 BP神经网络的原理 BP神经网络的定义 BP神经网络的基本结构 BP神经网络的神经元 BP神经网络的激活函数, BP神经网络的传递函数 遗传算法原理 遗传算法主要参数 遗传算法流程图 完整代码包含数据下载链接: 遗传算法优化BP神经网络时间序列回归分析,ga-bp回归分析(代码完…

实现的一个网页版的简易表白墙

实现的一个网页版的表白墙 实现效果 代码截图 相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><tit…

Java面试(4)之 Spring Bean生命周期过程

一, 整个加载的完整链路图 更详细的生命周期函数链路图(仅供参考) 二, Bean实例化的四种方式: 1, 无参构造器(默认且常用)6 2, 静态工厂方法方式(factory-method指定实例化的静态方法) 3, 实例工厂方法方式(factory-bean指定bean的name,factory-method指定实例化方法) 4, 实…

(黑马出品_04)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

&#xff08;黑马出品_04&#xff09;SpringCloudRabbitMQDockerRedis搜索分布式 微服务技术异步通信 今日目标1.初识MQ1.1.同步和异步通讯1.1.1.同步通讯1.1.2.异步通讯 1.2.技术对比 2.快速入门2.1.安装RabbitMQ2.1.1.单机部署(1).下载镜像方式…

Spark实战-基于Spark日志清洗与数据统计以及Zeppelin使用

Saprk-日志实战 一、用户行为日志 1.概念 用户每次访问网站时所有的行为日志(访问、浏览、搜索、点击)用户行为轨迹&#xff0c;流量日志2.原因 分析日志&#xff1a;网站页面访问量网站的粘性推荐3.生产渠道 (1)Nginx(2)Ajax4.日志内容 日志数据内容&#xff1a;1.访问的…

2024_01蓝桥杯STEMA 考试 Scratch 中级试卷解析​​​​​​​

2024_01蓝桥杯STEMA 考试 Scratch 中级试卷解析一、选择题第一题、运行下列哪段程序后,蜜蜂会向上移动?(C ) 第二题、运行以下程序,输入下列哪个数后,角色会说“未通过”?( D) A. 90 B. 85 C. 60 D. 58第三题、运行以下程序后,n 的值为(B )。 A. 17 B…

机器学习 | 使用CatBoost处理缺失值

数据是任何分析或机器学习的基础。然而&#xff0c;现实世界的数据集并不完美&#xff0c;它们经常包含缺失值&#xff0c;这可能导致任何算法的训练阶段出现错误。处理缺失值至关重要&#xff0c;因为它们可能会导致数据分析和机器学习模型中出现偏差或不准确的结果。处理缺失…