Docker 确实是个好东西, 相当于一个小型虚拟机, 里面环境隔离只要有对应的镜像就能运行业务应用, 运行基础应用, 能跑数据库等等, 还能跑 Linux 等等.
Docker 从狭义上来讲就是一个进程, 从广义上来讲是一个虚拟容器, 其实更专业的叫法是应用容器 ( Application Container ),Docker 进程和普通的进程没有任何区别, 它就是一个普通的应用进程. 不过是用来操作镜像文件的. 所以 Docker 进程 + 构建的应用镜像文件就等于 Docker 容器.
Docker 基本概念有三项: 镜像, 容器, 仓库
镜像相当于 java 中的 jar 包; 镜像仓库相当于 jar 存储的仓库, 只不过这里存储的是镜像; 容器就是一个镜像运行的实例, 相当于 java 运行起来的一个进程.
镜像有基础镜像, 如 CentOS,MySQL,Redis 镜像, 这些自己不用做 官网有人已经做好了这些镜像 可以直接拉下来用, 如果要做自己的特殊需要的镜像, 可以直接在这些基础镜像上构建.
容器
你可以从镜像中创建容器, 这如同运行一个程序, 不过更轻量, 启动更快, 秒启.
每个容器都是独立的封闭的, 需要对外提供服务就需要公开容器的特定端口, 在启动 Docker 的时候将容器的特定端口映射到宿主机上面的任意一个端口, 可以将容器的端口映射成任意的对外端口, 可解决多个应用端口相同产生的冲突, 所以就不需要通过代理来解决冲突. 容器对外端口与宿主机的端口映射可以通过下面的命令来完成.
启动 docker 容器
docker run -d -p 2222:22 --name 容器名 镜像名
-d 守护容器, 就是后台运行, 退出命令窗口容器也不会停止
-it 交互式容器 退出命令窗口容器就停止运行了
-p 宿主机端口和容器端口映射
8081:80 宿主机端口: 容器公开的端口
仓库 Docker registeries
docker 仓库用来存放镜像的, 仓库存在公有和私有之分, 公有仓库 docker hub 提供了非常多的镜像文件, 这些镜像直接拉取下来就可以运行了, 你也可以上传自己的镜像到 docker hub 上面. 同时也可以自己搭建私有仓库用于团队项目管理如可以用 Nexus, 怎么搭建下几篇再说, 在 k8s 中也在专门的仓库组件.
Docker 的生命周期
开发构建镜像并将镜像 push 到 Docker 仓库
测试或者运维从 Docker 仓库拉取镜像到测试服务器部署
通过镜像文件开启 Docker 容器并提供服务
总之构建容易分发简单 . 隔离应用解除依赖 . 快速部署测完就销
Docker 和传统虚拟机有啥区别
Docker 这个虚拟机超级轻量级, 仅仅是一个进程而已. 与传统的虚拟机比如 VM 有着巨大的差别:
Docker 相对于 VM 有以下几个优点:
启动速度快, 容器启动本质就是一个开启一个进程而已, 因此都是秒启, 而 VM 通常要更久.
资源利用率高, 一台普通 PC 可以跑成百上千个容器, 你跑十个 VM 试试.
性能开销小, VM 通常需要额外的 CPU 和内存来完成 OS 的功能, 这一部分占据了额外的资源.
所以很多移动互联网的应用或者云计算的后端节点都可以用 docker 来替换物理机器或者虚拟机, 比如腾讯地图的很多后台服务基本上都迁移 docker 部署了.
docker 是应用的基石
最后强调为什么要用 Docker
Docker 的镜像提供了除内核外完整的运行时环境, 确保了应用运行环境一致性, 从而不会再出现 "这段代码在我机器上没问题啊" 这类问题;-- 一致的运行环境
可以做到秒级, 甚至毫秒级的启动时间. 大大的节约了开发, 测试, 部署的时间.-- 更快速的启动时间
避免公用的服务器, 资源会容易受到其他用户的影响.-- 隔离性
善于处理集中爆发的服务器使用压力;-- 弹性伸缩, 快速扩展
可以很轻易的将在一个平台上运行的应用, 迁移到另一个平台上, 而不用担心运行环境的变化导致应用无法正常运行的情况.-- 迁移方便
使用 Docker 可以通过定制应用镜像来实现持续集成, 持续交付, 部署.-- 持续交付和部署
来源: https://www.cnblogs.com/zhangs1986/p/10611151.html