SpringCloud微服务 【实用篇】| Docker镜像、容器、数据卷操作

news2024/11/17 7:24:08

目录

一:Docker基本操作

1. 镜像操作

镜像相关命令

2. 容器操作

容器相关命令

3. 数据卷(容器数据管理)

数据卷

操作数据卷

挂载数据卷

挂载的方式区别


前些天突然发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,感兴趣的同学可以进行学习人工智能学习

一:Docker基本操作

1. 镜像操作

镜像相关命令

镜像的命名规范

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

镜像操作命令:CRUD

①获取镜像的方式有两种:

第一种是从本地获取,需要一个Dockerfile文件,利用docker build命令把它构件成一个镜像

第二种是从镜像服务器拉取,使用docker pull进行拉取镜像,可以从私服拉,也可以从DockerHub拉取。

②想知道本地有哪些镜像,使用docker images命令查看镜像。这里image理解为镜像的意思。

③使用docker rmi命令删除镜像,rmi是remove image的缩写。

④分享镜像的两种方式:

第一种是把镜像推送到镜像服务器,使用docker push命令推送到Docker Register

第二种是使用docker save命令保存镜像为一个压缩包进行拷贝;然后在使用docker load命令解压加载镜像压缩包为镜像

⑤也可以使用docker --help命令查看帮助文档

案例1:从DockerHub中【拉取】一个nginx镜像并【查看】

第一步:去镜像仓库搜索nginx镜像,比如DockerHub

第二步:根据查看到的镜像名称,拉取自己需要的镜像

通过命令docker pull nginx拉取,没指定版本号就是最新版本

第三步:通过命令docker images 查看拉取到的镜像

案例2:利用docker save将nginx镜像导出磁盘,然后再通过load加载回来

步骤一:利用docker 命令 --help命令查看docker save和docker load的语法

docker save --help查看命令,o压缩包的名称


 

docker load --help查看命令,i参数会打印日志,q参数不会打印日志

步骤二:使用docker save导出镜像到磁盘

docker save -o nginx.tar nginx:lastest

步骤三:使用docker load加载镜像

 首先先删除原来的镜像,可以根据 镜像名称+版本号 或者 镜像id 进行删除

docker rmi -f  镜像名称:版本号 # -f参数表示删除正在运行的镜像

加载压缩包为镜像

docker load -i nginx.tar

2. 容器操作

学习完了镜像,接下来就学习一下怎么基于镜像(image)创建容器(container),完成容器的各种操作!

容器相关命令

创建容器比较常用的命令就是docker run,不仅仅可以创建容器,还可以让容器处于运行状态---三大状态之一。

②三大状态之二就是暂停状态,使用docker pause命令,让容器处于暂停状态。要想恢复到运行状态,使用docker unpause命令。

③三大状态之二就是停止状态,使用docker stop命令,从停止恢复运行使用docker start命令。

Tip:暂停和停止的区别,为什么暂停可以使用pause和unpause;而stop确不使用unstop?

暂停和停止的区别在于操作系统的处理方式不同

暂停:操作系统会将容器的进程挂起,内存暂存起来;一恢复就可以直接运行。

停止:操作系统直接把进程杀死,容器所占为内存回收;进程被杀死只能重新创建一个新的容器。

④使用docker ps命令可以查看当前所有运行的容器及状态docker logs命令查看容器运行日志docker exec命令可以进入容器的内部

⑤使用docker rm 可以删除指定容器

案例1:创建运行一个Nginx容器

去Docker Hub查看Nginx的容器运行命令,以下命令为例:

docker run --name some-nginx -d -p 8080:80 some-content-nginx

*docker run :创建并运行一个容器;

*--name:给容器起一个名字;

*-p:将宿主机端口与容器端口映射,冒号左侧是宿主机端口(可以随意改变),右侧是容器端口;作用是让本来完全隔离的容器暴露一个窗口,让外界进行访问;

*-d:后台运行容器

*some-content-nginx:镜像名称,例如nginx

解释:端口映射

对于一个容器是对外隔离的,如果用户想要访问容器,直接访问肯定是不行的;这样就需要端口映射,让宿主机的端口与容器的端口产生映射关系;以后直接访问宿主机的80端口就会转发到容器的80端口去处理请求。

创建并运行容器

查看容器的状态:docker ps

访问nginx

# 前面是虚拟机的IP,后面是我们指定的端口
192.168.2.129:81

查看容器的日志信息

docker logs -f 容器名称 # -f 表示持续更新查看日志

案例2:进入Nginx容器,修改HTML文件内容,添加“北京欢迎您”

进入我们刚刚创建的nginx容器

docker exec -it mn bash # bash表示使用linux命令操作

*docker exec :进入容器内部,执行一个命令;

*-it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互 ;

*mn :要进入的容器的名称 ;

*bash:进入容器后执行的命令,bash是一个linux终端交互命令;

进入容器内部

查看nginx在那个目录,就需要查看DockerHub,静态页面的文件夹/usr/share/nginx/html

cd /usr/share/nginx/html

找到index.html

镜像只是封装必要的函数库,对于vim命令没有封装不能使用,使用sed命令进行修改

sed -i 's#Welcome to nginx#北京欢迎您#g' index.html # 替换原始的标签
sed -i 's#<head>#<head><meta charset="utf-8">#g' index.html #支持中文

再次去访问:成功替换

使用exit退出容器,然后停掉容器

docker stop 容器名称

 此时查看容器的状态

docker ps -a # 默认是只能查看正在运行的容器,-a表示查看所有(包括停掉的)

要想在启动,使用

docker start 容器名称

此时在删除容器

对于-f参数表示强制删除正在运行的容器;如果直接删除正在运行的容器会报错无法删除,需要我们stop停止容器才可以删除比较麻烦;所以可以使用-f参数强制删除!删除以后使用docker ps -a也无法查到,是真正意义的上被删除了。

docker rm -f 容器名称

案例3:创建并运行一个redis容器,并且支持数据持久化,进入redis容器,并执行redis-cli客户端命令,存入num=666

创建并运行容器

docker run --name mr -p 6379:6379 -d redis --appendonly yes #aof模式的持久化

进入容器内部并连接redis

存入数据

查看容器状态:

docker ps 添加 -a 参数查看所有状态的容器; 

删除容器:

docker rm 不能删除运行中的容器,除非添加 -f 参数; 

进入容器:

命令是docker exec -it [容器名] [要执行的命令] ;exec命令可以进入容器修改文件,但是在容器内修改文件是不推荐的:第一点不方便,连vim命令都没有,第二点:在容器中进行修改是没有任何记录的。

3. 数据卷(容器数据管理)

容器与数据耦合的问题

不便于修改:当我们要修改Nginx的html内容时,需要进入容器内部修改,很不方便。

数据不可复用:在容器内的修改对外是不可见的,所有修改对新创建的容器是不可复用的。

升级维护困难:数据在容器内,如果要升级容器必然删除旧容器,所有数据都跟着删除了。

数据卷

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

例如:对于一个Docker主机管理很多的数据卷,而对应的数据卷一定会指向宿主机的/var/lib/docker/volumes目录创建。然后让容器的内部目录与数据卷进行关联,关联以后本质上就是与宿主机的目录进行关联!

注:相当于通过数据卷进行容器和宿主机的文件建立了联系!就不要进入容器内部修改了!

数据卷的作用: 将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全!

操作数据卷

数据卷操作的基本语法如下:

docker volume [COMMAND] # 二级命令,后面才是真正的操作数据卷的命令

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

*create:创建一个volume

*inspect:显示一个或多个volume的详细信息

*ls:列出所有的volume  

*prune:删除未使用的所有的volume  

*rm:删除一个或多个指定的volume

案例1:创建一个数据卷,并查看数据卷在宿主机的目录位置

创建一个数据卷

docker volume create 数据卷名称 # 创建一个数据卷

查看数据卷

docker volume ls # 列出所有的数据卷
docker volume inspect 数据卷名称 # 查看某个数据卷的详细信息

删除数据卷

docker volume prune # 删除所有未使用的数据卷
docker volume rm 数据卷名称 # 删除某个指定的数据卷

挂载数据卷

前面的操作相当于让数据卷宿主机的某个文件建立了联系;下面就需要容器挂载数据卷,让数据卷容器建立联系

首先创建好数据卷,在运行容器时,可以通过 -v 参数来挂载一个数据卷到某个容器目录

docker run --name mn -p 88:80 -v html:/root/html -d nginx

*docker run :就是创建并运行容器

*-- name mn :给容器起个名字叫mn

*-v html:/root/htm :把html数据卷挂载到容器内的/root/html这个目录中

*-p 8080:80 :把宿主机的88端口映射到容器内的80端口

*nginx :镜像名称

案例1:创建一个nginx容器,修改容器内的html目录内的index.html内容

这个案例前面已经做过了,先进入nginx容器内部,然后进入到/usr/share/nginx/html目录,然后使用sed命令修改index.html比较麻烦!现在就使用数据卷volume来实现这个功能。

步骤一:创建容器并挂载数据卷到容器内的html目录

注:直接使用-v参数,如果此时html数据卷没有创建,docker会帮我们创建好!

docker run --name mn -p 88:80 -v html:/usr/share/nginx/html -d nginx

步骤二:进入html数据卷所在的位置,并修改html内容

docker volume inspect html # 查看数据卷所在的位置
cd //var/lib/docker/volumes/html/_data # 进入数据卷所在的目录
ls # 查看目录下的文件,nginx文件会被同步过来
vim index.html # 可以使用vim命令进行修改

数据卷挂载方式: -v 数据卷名称: /容器的目标目录, 如果容器运行时volume不存在,会自动被创建出来!所以以后就没有必要刻意的去创建数据卷!

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

注:实际上不通过数据卷这个媒介,宿主机目录可以直接与容器的目录进行挂载

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

第一种方式:-v [宿主机目录]:[容器内目录] ;与数据卷挂载的结构是相同的。

第二种方式:-v [宿主机文件]:[容器内文件];数据卷挂载方式所没有的,会用宿主机文件覆盖容器内的文件。

第一步:从DockerHub拉取myql的镜像

docker pull mysql

也可以加载已经下载好的压缩包,把压缩包上传到一个目录,例如tmp目录,然后执行load命令

docker load -i mysql.tar # 把压缩包加载为镜像

第二步:创建两个目录

mkdir -p /tmp/mysql/data # 创建mysql存储数据的目录,-p表示递归创建
mkdir -p /tmp/mysql/conf # 创建mysql配置目录,并把mysql的配置文件传进去

第三步:运行mysql容器

docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 \ # 设置密码
 -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \ # 挂载配置文件
 -v /tmp/mysql/data:/var/lib/mysql \ #挂载数据目录
 -d  mysql:5.7.25 

挂载的方式区别

数据卷挂载的方式:Docker全自动创建数据卷对应的目录;耦合度低,由Docker来管理目录,但是目录较深,不好找。

目录挂载的方式:目录挂载耦合度高,需要我们自己管理目录,不过目录容易寻找查看。

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

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

相关文章

MySQL面试经典50题

本文使用的MySQL版本为5.7.21&#xff0c;需要的数据表创建如下&#xff1a; 1.学生表student(SId,Sname,Sage,Ssex) --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10))…

jdk 线程池与 tomcat 线程池对比

一、线程池的作用 1. 提高性能&#xff1a;线程的创建需要开辟虚拟机栈、本地方法栈、程序计数器等线程私有空间&#xff0c;同时也会一比一的创建一个内核线程&#xff0c;在线程销毁时需要回收这些系统资源。频繁地创建和销毁线程会大大浪费系统资源&#xff0c;这时候就需要…

2023_Spark_实验三十:测试Flume到Kafka

实验目的&#xff1a;测试Flume采集数据发送到Kafka 实验方法&#xff1a;通过centos7集群测试&#xff0c;将flume采集的数据放到kafka中 实验步骤&#xff1a; 一、 kafka可视化工具介绍 Kafka Tool是一个用于管理和使用Apache Kafka集群的GUI应用程序。 Kafka Tool提供了…

《点云处理》 点云去噪

前言 通常从传感器&#xff08;3D相机、雷达&#xff09;中获取到的点云存在噪点&#xff08;杂点、离群点、孤岛点等各种叫法&#xff09;。噪点产生的原因有不同&#xff0c;可能是扫描到了不想要扫描的物体&#xff0c;可能是待测工件表面反光形成的&#xff0c;也可能是相…

原子学习笔记2——输入设备应用编程

一、输入类设备介绍 1、输入设备 常见的输入设备有鼠标、键盘、触摸屏、遥控器、电脑画图板等&#xff0c;用户通过输入设备与系统进行交互。 2、input子系统 常见的输入设备有鼠标、键盘、触摸屏、遥控器、电脑画图板等&#xff0c;用户通过输入设备与系统进行交互。 基于…

docker 在线安装redis

1、远程仓库拉取redis镜像&#xff0c; docker pull redis&#xff0c;默认拉取最新版本 2、在本地宿主机文件夹下创建相关目录文件&#xff0c;供容器卷使用&#xff0c;创建 /usr/local/data/redisdocker/data 文件夹&#xff0c;准备一个纯净版 redis.conf 配置文件 &#x…

【Linux】ip命令使用

ip命令 用于管理与配置网络接口和路由表。 ip命令的安装 ip 命令来自 iproute2 软件包&#xff0c;在 CentOS 7 中默认已安装。 yum install -y iproute 语法 ip [ OPTIONS ] OBJECT { COMMAND | help }ip [ -force ] -batch filename选项及作用 执行令 &#xff1a; ip …

el-form与el-upload结合上传带附件的表单数据(后端篇)

1.写在之前 本文采用Spring Boot MinIO MySQLMybatis Plus技术栈&#xff0c;参考ruoyi-vue-pro项目。 前端实现请看本篇文章el-form与el-upload结合上传带附件的表单数据&#xff08;前端篇&#xff09;-CSDN博客。 2.需求描述 在OA办公系统中&#xff0c;流程表单申请人…

【SQL】根据年月,查询月份中每一天的数据量

传入YYYY-MM-01&#xff0c;查询这个月中每一天的数据量&#xff0c;没有数据的天数用0表示 WITH RECURSIVE DateRange AS (SELECT :startDate AS DateUNION ALLSELECT DATE_ADD(Date, INTERVAL 1 DAY) FROM DateRangeWHERE Date < LAST_DAY(:startDate) ) SELECTdr.Date,CO…

从 MySQL 到 DolphinDB,Debezium + Kafka 数据同步实战

Debezium 是一个开源的分布式平台&#xff0c;用于实时捕获和发布数据库更改事件。它可以将关系型数据库&#xff08;如 MySQL、PostgreSQL、Oracle 等&#xff09;的变更事件转化为可观察的流数据&#xff0c;以供其他应用程序实时消费和处理。本文中我们将采用 Debezium 与 K…

单总线cpu设计(包含定长指令周期和变长指令周期和现代时序设计)

来都来了点个赞收藏一下再走呗~~~&#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f339; 一、定长指令周期cpu设计 第1关&#xff1a;MIPS指令译码器设计 此实验就是只需要知道mips知道操作码op对应的值是什么就可以了&#xff0c;下面给出实验中用到的mips指令…

大型语言模型:RoBERTa — 一种稳健优化的 BERT 方法

slavahead 一、介绍 BERT模型的出现BERT模型带来了NLP的重大进展。 BERT 的架构源自 Transformer&#xff0c;它在各种下游任务上取得了最先进的结果&#xff1a;语言建模、下一句预测、问答、NER标记等。 尽管 BERT 性能出色&#xff0c;研究人员仍在继续尝试其配置&#xff0…

JNDI注入Log4jFastJson白盒审计不回显处理

目录 0x00 前言 0x01 Maven 仓库及配置 0x02 JNDI 注入简介 0x03 Java-第三方组件-Log4J&JNDI 0x04 Java-第三方组件-FastJson&反射 0x05 白盒审计 - FastJson 0x06 白盒审计 - Log4j 0x07 不回显的处理方法 0x00 前言 希望和各位大佬一起学习&#xff0c;如果…

RK3399平台开发系列讲解(内核入门篇)网络协议的分层

🚀返回专栏总目录 文章目录 一、应用层二、传输层三、网络层四、数据链路层(Data Link Layer)五、物理层沉淀、分享、成长,让自己和他人都能有所收获!😄 📢对于多数的应用和用户而言,使用互联网的一个基本要求就是数据可以无损地到达。用户通过应用进行网络通信࿰

Android的组件、布局学习

介绍 公司组织架构调整&#xff0c;项目组需要承接其他项目组的android项目&#xff0c;负责维护和开发新需求&#xff0c;故学习下基础语法和项目开发。 组件学习 Toolbarheader布局部分 就是app最顶部的部分 他的显示与否&#xff0c;是与F:\androidProject\android_lear…

LVGL 显示图片

LVGL 显示图片 LVGL显示图片1. 显示图片文件2. 显示C数组格式3. 显示RAM中的图像文件4. 图像符号显示5. 显示GIF动画LVGL显示图片代码分析 LVGL显示图片 lvgl 8.3版本默认支持PNG,BMP,JPG,SJPG和GIF动图等格式的图片显示&#xff1b; 需要在lv_conf.h配置文件里使能对应图片的…

【网络安全】—Shell编程入门(1)

文章目录 基础变量概念介绍特殊变量进阶数值计算实践条件测试比较条件判断语句流程控制语句循环语句应用 Shell 是 Unix/Linux 操作系统下的一种命令行解释器&#xff0c;它接收用户输入的命令然后调用相应的程序。我们可以通过 Shell 脚本来自动执行一系列的命令。接下来&…

基于python的leetcode算法介绍之递归

文章目录 零 算法介绍一 简单示例 辗转相除法Leetcode例题与思路[509. 斐波那契数](https://leetcode.cn/problems/fibonacci-number/)解题思路&#xff1a;题解&#xff1a; [206. 反转链表](https://leetcode.cn/problems/reverse-linked-list/)解题思路&#xff1a;题解&…

最新AI创作系统ChatGPT系统源码+DALL-E3文生图+AI绘画+GPT语音对话功能

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…

计算机网络 网络层下 | IPv6 路由选择协议,P多播,虚拟专用网络VPN,MPLS多协议标签

文章目录 5 IPv65.1 组成5.2 IPv6地址5.3 从IPv4向IPv6过渡5.3.1 双协议栈5.3.2 隧道技术 6 因特网的路由选择协议6.1 内部网关协议RIP6.2 内部网关协议 OSPF基本特点 6.3 外部网关协议 BGP6.3.1 路由选择 6.4 路由器组成6.4.1 基本了解6.4.2 结构 7 IP多播7.1 硬件多播7.2 IP多…