我们在开发的过程中,会出现这样一种问题:需要横向扩容(增加服务器)的时候,我们会怎么做呢?申请服务器、连接服务器、安装各种环境、安装程序包、部署、测试、应用。一连串的问题,想都不敢想。
那么,我们应该如何快速的进行横向扩容,而且能够确保应用能够在这些环境中运行和通过质量检测、能够快速安装各种依赖程序包、在部署过程中不出现令人头疼的版本、配置问题呢 ?
对的,那就是使用容器。
Docker发展的非常迅速,也正是因为它针对这种标准化的问题给出了一个标准化的解决方案……系统平滑移植,容器虚拟化技术。
一次镜像,处处运行
docker核心就是为了解决:运行环境和配置程序这两个核心问题的。
Docker是基于Go语言实现的云开源项目。
Docker的主要目标是“Build,Ship and Run Any App,Anywhere] 也就是通过对应用组件的封装、分发、部署、运行等生命周期
的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。
说了这么多,那我不用容器,直接安装虚拟机不也是一样的么?
说的没错,实际上虚拟机完全可以实现上面的问题。但是:虚拟机有几点缺点
1、资源占用多:它需要运行一个完整的虚拟操作系统出来。
2、冗余步骤多:在创建虚拟机时。创建步骤很多很重复。
3、启动慢:运行一个完整的操作系统,启动会很慢。
容器实际就是为了解决虚拟机这几个问题而产生的。
容器不是模拟一个完整的操作系统而是对进程进行隔离。
它可以将软件运行所需要的所有资源,将资源打包到一个隔离的容器中。这样,容器就不需要需要捆绑一整套操作系统,只需要软件所需要的一些配置和资源了。
少了底层操作系统中的一些资源,系统就会变得高效轻量并保证部署在任何环境中的软件都能一致了。
比如安装redis和mysql。这2个公用一套底层操作系统资源,然后将redis和mysql的一些配置和数据存储进行隔离,这样就轻量了。
核心三要素:镜像、容器、仓库
镜像:将一个软件按docker的规范进行打包,也就是将当前的软件状态备份。
容器:一个容器运行一个镜像程序,
仓库:类似网盘。存镜像的地方。
docker image -a/-q
-a 列出本地所有镜像
-q 只显示镜像id
docker search 镜像名称
比如:docker search redis
docker pull 镜像名称[:tag]
tag是版本的意思。如果不输版本,则下载最新版本
比如: docker pull redis
docker rmi 镜像id
docker ps
-a 列出所有容器
-l 列出最近创建的容器
-n 列出最近创建的n个容器
-q 静默模式。只显示容器编号
docker logs 容器id
docker exec -it 容器id [bash/***/**]
docker attach 容器id
区别:
exec是打开新的终端并启动新进程,exit退出不会退出容器
attach直接进入容器启动终端,不会启动新进程,exit会退出容器
docker cp 容器id:容器内路径 目标路径
总结:docker整体来说打破了“代码即应用”的观念,而是从环境开始,自上而下的打包了应用。
对于公司自定义的镜像,开发者不需要考虑各种环境、依赖、配置等信息,所有的一切,在镜像中都存在。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有