容器化技术(Docker相关)
容器化技术的背景是什么?
在软件开发过程中环境配置永远是最让人头疼的在开发之前我们需要准备各种运行环境、IDE及辅助工具同时软件部署也为程序员的谢顶助力三分。
搭建不同语言、不同技术栈适配的运行环境还要部署到多个服务器主机上并且这些主机还可能来自不同地方这为部署与运维人员带来了极大挑战。
而需求永远是推动技术发展的源动力正是在这样的背景下"容器化技术"出现了。
什么是容器化?
容器化实际上是一种轻量级的虚拟化技术。只不过相对于VM,属于进程级别的隔离(通过linux namespace实现),具备以下特点:
1)更大的弹性
2)更快的启动速度
3)更少的资源消耗
而最为大家熟悉的容器化运行时技术就非Docker莫属了。
容器化技术从大方向来看,可分为容器化运行技术和容器化编排技术,那何为容器化编排技术?
Docker本身非常适合管理单个容器。但随着越来越多的容器和容器化应用程序,并把它们划分成数百个部分,很可能会导致管理和编排变得非常困难。最终,需要对容器实施分组,以便跨所有容器提供网络、安全、遥测等服务。于是,Kubernetes(也称k8s) 应运而生。
真正的生产型应用会涉及很多容器,这些容器必须跨多个服务器主机进行部署。Kubernetes可以提供所需的编排和管理功能,以便针对这些工作负载大规模部署容器。借助Kubernetes编排功能,可以构建跨多个容器的应用服务、跨集群调度、扩展这些容器,并长期持续管理这些容器的健康状况。
什么是docker?
Docker是一种容器化运行技术或平台,基于Linux内核的cgroup和namespace,对进程进行了封装隔离,属于操作系统层面虚拟化技术。它以容器的形式将你的应用程序及所有的依赖项打包在一起,以确保你的应用程序在任何环境中无缝运行。
传统虚拟化技术是虚拟出一套硬件后,在其基础上运行一个完整的操作系统,再在此系统上运行所需的应用进程。而Docker技术是容器内的应用进程直接运行于宿主机的内核,容器内没有自己的内核,而且也不虚拟出硬件。因此,相对于传统的虚拟化技术而言,Docker更加轻便。
说人话:
- Docker是平台,Docker的虚拟机(即容器),在Docker平台上运行
- Docker容器有自己的虚拟环境,不管在什么系统中运行,环境都完全一致
为什么要使用docker?
1.环境一致
开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性。
2.更高效的利用系统资源
由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。
3.更快速的启动时间
传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。
4.更轻松的迁移
由于 Docker 一致的运行环境,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。
5.更轻松的维护和扩展
Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的 官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。
什么是Docker镜像?
- 类似于VMware虚拟机的镜像文件,或VirtualBox虚拟机的镜像文件
- 是一组磁盘文件
- 所有的依赖项打包在一起
- Docker镜像,就像是Docker容器的源代码
- Docker镜像用来创建容器
- 可以想象成Java中的类和实例之间的关系
什么是Docker容器?
- 可以想象成就像是VMware的虚拟机,只是更轻量,启动更快,占资源更少。
- Docker容器包括应用程序及所有的依赖项,作为操作系统的独立进程运行。
Docker容器有几种状态?
四种状态:运行、已停止、重新启动、已退出。
说出Docker常用的命令?
- docker pull 下载镜像
- docker images 查看镜像列表
- docker run 从镜像创建、运行容器
- docker ps 查看容器列表
- docker rm 删除容器
- docker rmi 删除镜像
Dockerfile中最常用的指令有哪些?
- FROM 指定基础镜像
- ADD 添加、解压文件到镜像
- COPY 复制文件到镜像
- RUN 运行命令
- ENV 设置环境变量
- CMD 容器启动时执行的默认命令
如何删除临时镜像(空悬镜像)?
空悬镜像,Dangling Image
这种镜像没有名称:<none>:<none>
在构建镜像过程中产生的临时镜像
在下载一个同名镜像时,之前镜像的名称被剥夺
空悬镜像一般无用,且占用空间
查看空悬镜像:
- docker images –f dangling=true
- -f参数:过滤条件
删除空悬镜像:
- docker rmi $(docker images –q –f dangling=true)
如何在容器与宿主机之间复制文件?
docker cp命令
容器复制到宿主机:
- docker cp 容器:文件路径 宿主机路径
宿主机复制到容器:
- docker cp宿主机路径 容器:文件路径
如何监控Docker容器?
docker stats命令
- 监控cpu、内存等的使用情况
限制容器使用的内存大小和cpu占用比例?
docker run –m 256m -c 512 镜像
- -m 256m:限制最大使用256m内存
- -c 512:与其他容器按此比例分配cpu
如何查看环境变量?
1. 进入容器,执行env命令
- docker exec -it 容器 env
2. 启动一个临时容器,执行env命令,执行完毕后容器自动删除
- docker run --rm 镜像 env
如何停止容器?
docker stop 容器
- 等待容器内运行的应用正常退出后,再停止容器,最长等待10秒
docker kill 容器
- 强行终止应用
容器退出后,可用通过docker ps –a查看,它的数据会丢失么?
- 容器退出后会处于终止(exited)状态,此时可以通过docker ps -a查看,其中数据不会丢失
- docker start可以重新启动容器,容器中的数据仍然存在
如何停止所有正在运行的容器?
docker stop $(docker ps -q)
或者 docker kill $(docker ps -q)
参数-q:列出容器的id
如何清理所有已经停止的容器?
- docker container prune
- docker container prune –f
- 参数-f:直接删除,不需要询问确认
如何向hub.docker.com推送镜像?
1.先对镜像改名,然后执行推送,之后按提示输入账户登录信息:
2.docker tag xxx:xxx 账户名/xxx:xxx
- 名称前面添加自己的账户名和斜杠
3.docker push 账户名/xxx:xxx
如何向私有镜像仓库推送镜像?
搭建私有仓库和推送镜像,参考: https://hub.docker.com/_/registry
修改镜像名称,在前面添加主机地址和端口
- docker tag xxx:xxx 主机:端口/xxx:xxx
例如:
- docker tag redis:m6 192.168.64.140:5000/redis:m6
- docker push 192.168.64.140:5000/redis:m6
容器化技术(Docker相关)相关推荐
- 学习笔记:云原生容器化技术——Docker
Docker学习笔记 前言 一.Docker概述 1.1 Docker为什么会出现? 1.2 Docker的历史 1.3 Docker为什么这么火爆? 1.4 虚拟机技术与容器化技术的区别 二.Doc ...
- 容器化技术Docker由入门到实战
目录 对docker的理解 能做什么 传统虚拟机 容器虚拟化技术 Docker 和传统虚拟化方式的不同之处 Docker的安装 前置环境 Vagrant虚拟机环境 编辑使用Vgrant安装虚拟机 虚 ...
- 容器化技术-Docker
文章目录 1. Docker基础 1.1 Docker的概念 1.2 安装Docker 1.3 Docker的架构 2. Docker命令 2.1 进程相关命令 2.2 镜像相关命令 2.2.1 查看 ...
- docker启动sqlserver_ASP.NET Core容器化技术Docker零基础从入门到实战演练
<ASP.NET Core使用Docker进行容器化托管部署> 一.课程介绍 人生苦短,我用.NET Core!今天给大家分享一下Asp.Net Core以Docker进行容器化部署托管, ...
- Java架构师-容器化(一):服务容器化技术-Docker、Cloud Foundry
一.服务容器化概述 1.应用的种类太多,码头林立 2.微服务 3.康威定律 二.容器技术对比:Docker 与 Cloud Foundry 三.Docker能做什么 四.Docker Client/S ...
- 一篇文章搞懂最流行的容器化技术Docker
说在前面的话 本篇文章什么样的人适合看? 刚入门学习docker的,看完对docker会有一个通篇的认识 有经验的人,在知识大爆炸时代,技术很多,没有人能记住所有东西,适合复盘的时候看 我想说的话:这 ...
- 三、容器化技术-docker网络
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮 ...
- 容器化技术(三):Docker的运转流程
Docker的本质是容器运行时,它是CS架构的,也就是我们通过客户端可以操作Docker服务端. 为了方便大家理解,我们不上来就讲解Docker内部的底层运作原理,我们先从Docker的运转流程开始, ...
- 容器化技术(十一):Kubernetes中Pod的调度策略-标签与污点实战
一.Pod的调度策略总述 Kubernetes中的容器编排功能的最大需要解决的问题就是将创建的Pod,调度到Node上去.那么Pod在选择调度到哪个Node上去时,是如何决策的.这就涉及到了我们在前面 ...
最新文章
- Android Jetpack 组件之 Lifecycle源码
- 非线程安全类ArrayList出现异常:java.util.ConcurrentModificationException
- TREK1000 评估套件的软件技术分析
- 中奖人员信息向上滚动
- SAP Spartacus central configuration - B2cStorefrontModule
- 微课|中学生可以这样学Python(例11.3):tkinter通信录管理系统1
- 1、lo4j.properties
- Lua 之table的测试
- 令人疑惑的defaultValueAttribute
- c语言程序设计实践教程课后题,《C语言程序设计实践教程》答案-完整版.doc
- IOS YYKit 源码解析
- 直通车测图需要满足哪些数据?
- 怎么添加校园邮箱到Outlook?
- 方正快速开发平台ES2007(3.5版本)新增功能特点
- 向量的数量积,向量积,混合积及应用
- 世界是客观存在的吗?
- 时间序列数据的分段线性表示
- 找不到包 \ 符号,idea中包已经导入,但是运行还是提示找不到包问题
- Gradle(古rua都)vs Maven(马文)
- 企业APP营销策略方案
热门文章
- com.google.guava包里面的相关简单方法
- 苹果电脑如何同时运行Mac和Windows--pd18
- 陈学贤华南理工大学计算机专业,张见威 - 华南理工大学 - 计算机科学与工程学院...
- MTK led闪烁改为呼吸灯模式
- 机器学习 (三) k-近邻算法应用-约会网站匹配系统
- 齐岳|马铃薯凝集素修饰PLGA纳米粒|利福平PLGA纳米粒|齐墩果酸/乳酸羟基乙酸共聚物-水溶性维生素E衍生物(PLGA-TPGS)纳米粒
- 在B站被催更的恰饭视频是什么样的?
- Leadtools Document教程:如何高效将数千个 PDF 文件拆分并转换为单页图像
- 【No JSON object could be decoded】问题解决
- 百度地图api调用时json.loads()报错ValueError: No JSON object could be decoded解决