当前位置: 首页 > news >正文

微服务05-Docker基本操作

Docker的定义

1.什么是Docker

Docker是一个快速交付应用、运行应用的技术:

  • 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统
  • 运行时利用沙箱机制形成隔离容器,各个应用互不干扰
  • 启动、移除都可以通过一行命令完成,方便快捷

2.为什么要用Docker

例如一个项目中,部署时需要依赖于node.js、Redis、RabbitMQ、MySQL等,这些服务部署时所需要的函数库、依赖项各不相同,甚至会有冲突。给部署带来了极大的困难。
在这里插入图片描述

Docker·为了解决依赖的兼容问题的,采用了两个手段:

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

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

在这里插入图片描述
这样打包好的应用包中,既包含应用本身,也保护应用所需要的Libs、Deps,无需再操作系统上安装这些,自然就不存在不同应用之间的兼容问题了。

Docker如何解决开发、测试、生产环境有差异的问题?

  • Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行

Docker的基本操作

1 Docker命令

常见的镜像操作命令如图:
在这里插入图片描述

举例:
需求:从DockerHub中拉取一个nginx镜像并查看

1)首先去镜像仓库搜索nginx镜像,比如DockerHub:

在这里插入图片描述

2)根据查看到的镜像名称,拉取自己需要的镜像,通过命令:docker pull nginx

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3)通过命令:docker images 查看拉取到的镜像
在这里插入图片描述

保存、导入镜像
命令格式:

docker save -o [保存的目标文件名称] [镜像名称]

1)使用docker save导出镜像到磁盘

运行命令:

docker save -o nginx.tar nginx:latest

结果如图:

在这里插入图片描述

2)使用docker load加载镜像

先删除本地的nginx镜像:

docker rmi nginx:latest

然后运行命令,加载本地文件:

docker load -i nginx.tar

结果:

在这里插入图片描述

2 容器相关命令

容器操作的命令如图:
在这里插入图片描述
容器保护三个状态:

  • 运行:进程正常运行
  • 暂停:进程暂停,CPU不再运行,并不释放内存
  • 停止:进程终止,回收进程占用的内存、CPU等资源

其中:

  • docker run:创建并运行一个容器,处于运行状态

  • docker pause:让一个运行的容器暂停

  • docker unpause:让一个容器从暂停状态恢复运行

  • docker stop:停止一个运行的容器

  • docker start:让一个停止的容器再次运行

  • docker rm:删除一个容器

举例
创建并运行nginx容器的命令:

docker run --name containerName -p 80:80 -d nginx

命令解读:

  • docker run :创建并运行一个容器
  • –name : 给容器起一个名字,比如叫做mn
  • -p :将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口
  • -d:后台运行容器
  • nginx:镜像名称,例如nginx

这里的-p参数,是将容器端口映射到宿主机端口。

默认情况下,容器是隔离环境,我们直接访问宿主机的80端口,肯定访问不到容器中的nginx。

现在,将容器的80与宿主机的80关联起来,当我们访问宿主机的80端口时,就会被映射到容器的80,这样就能访问到nginx了:
在这里插入图片描述

我们可以通过docker logs 容器名字 来查看日志

在这里插入图片描述

  1. 先利用镜像产生容器,然后再对容器进行命令执行模式
    在这里插入图片描述

exit退出容器

docker stop 容器名称:停掉容器名称,直接死掉

docker ps:默认查看运行中的容器

docker ps -a:查看所有容器

docker start 容器名字:开始容器,停掉的容器再开始

在这里插入图片描述

总结:

在这里插入图片描述
docker exec -it 容器名字 命令:是进入容器后修改文件,因为容器是隔离性的,所以我们不能使用vi命令,非常不方便修改,而且修改时没有日志记录的;

数据卷

出现问题:多个容器修改困难

在这里插入图片描述

解决方案:

我们可以利用数据卷(是一个虚拟目录),将容器挂载到数据卷上,而数据卷映射文件系统:

所以我们改动主机的文件系统,那么容器就会改变:因为容器挂载到了数据卷上->映射在主机文件系统上;

主机文件系统位置:在创建数据卷的时候就自动设置了(数据卷相当于代理帮你自动设置位置),实际上跟你你设置的数据卷名字有关;

容器挂载数据卷位置:通过创建容器的-v参数设置

在这里插入图片描述
在这里插入图片描述
容器删除,数据卷不会被删,这样有利于数据的保存与维护(直接改变数据卷,也就是可以通过主机修改数据——>容器升级),较为安全;

操作数据卷常见命令

在这里插入图片描述

作用:

将容器与数据分离,降低耦合,方便操作容器内的数据(->通过主机进行操作),方便数据维护升级——>容器删除,数据卷依然在;

注意:

docker volume prune相当于强制删除卷(未使用)

docker volume rm xx:指定删除

练习数据卷操作:

在这里插入图片描述

挂载数据卷

在这里插入图片描述

如果此时我将数据卷删除的话,创建容器直接设置数据卷挂载位置,docker非常智能会自动创建没有的数据卷
在这里插入图片描述

练习:创建并且运行mysql容器,将宿主机目录挂载到容器(目录挂载)

在这里插入图片描述
步骤:

通过mysql镜像启动mysql容器,设置主机挂载目录的位置以及容器挂载的位置(一一对应的感觉,没有代理帮你管理,自己设置两边的位置)

docker run --name mysql -p 3308:3306 -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf -v /tmp/mysql/data:/var/lib/mysql -d mysql:5.7.25

在这里插入图片描述

目录挂载与数据卷挂载的区别

在这里插入图片描述

在这里插入图片描述

http://www.lryc.cn/news/164325.html

相关文章:

  • OpenHarmony创新赛|赋能直播第三期
  • docker镜像详解
  • 二叉树的顺序结构以及堆的实现——【数据结构】
  • 手写一个摸鱼神器:使用python手写一个看小说的脚本,在ide中输出小说内容,同事直呼“还得是你”
  • 【Python 实战】---- 实现批量图片的切割
  • MAYA粒子基础_场
  • 趣解设计模式之《我买了宝马,为啥不让我停这?》
  • MyBatis Plus 中 LocalDateTime 引发的一些问题和解决办法
  • 谁懂啊!自制的科普安全手册居然火了
  • 强化学习-论文调研-泛化性能力度量
  • CSS中图片旋转超出父元素解决办法
  • QML、C++ 和 JS 三者之间的交互
  • ProEasy机器人:TCP无协议通讯(socket通讯)时打印log日志
  • 算法通过村第六关-树白银笔记|层次遍历
  • SpringCloud理解篇
  • 编写LED灯的驱动,实现三盏灯的控制
  • Flink报错处理-1
  • bim与数字孪生智能建造的关系
  • 【Linux】进程篇(补):守护进程
  • SpringMVC自定义视图完成步骤 和 视图解析的源码剖析
  • 合宙Air724UG LuatOS-Air lvgl字库
  • C#,数值计算——指数微分(exponential deviates)的计算方法与源程序
  • ADAS自动驾驶
  • Python从零到一构建项目
  • 使用todesk或者向日葵远程Ubuntu22.04系统的客户机黑屏
  • JBoss JMXInvokerServlet 反序列化漏洞复现(CVE-2015-7501)
  • 比Mojo慢68000倍,Python性能差的锅该给GIL吗?
  • CSS读书笔记
  • Qt使用QSqlDatabase remoeDatabase()连接提示仍在使用解决方案
  • 管易云与金蝶云星空对接集成仓库查询打通仓库新增