Docker 初始
1. Docker 是什么?
官网的介绍是“Docker is the world’s leading software container platform.
” 官方给Docker的定位是一个应用容器平台;
Docker 是一个容器平台的领导者 Docker 容器平台 Docker 应用容器平台。
2. Docker 的优势
a)合作开发的时候,在本机可以跑,别人的电脑跑不起来;
这里我们拿 JavaWeb 应用程序举例,我们一个JavaWeb 应用程序设计很多东西,比如: jdk、tomcat、spring 等等。当这些其中某一项版本不一致的时候,可能就会导致应用程序跑不起来这种情况。Docker 则将程序直接打包成镜像,直接运行在容器中即可。
b)服务器自己的程序挂了,结果发现是别人程序出了问题把内存吃完了,自己程序因为内存不够就挂了;
这种也是一种比较常见的情况,如果你的程序重要性不是特别高的话,公司基本上不可能让你的程序独享一台服务器的,这时候你的服务器就会跟公司其他人的程序共享一台服务器,所以不可避免地就会受到其他程序的干扰,导致自己的程序出现为问题。Docker 就很好解决了环境隔离的问题,别人程序不会影响到自己的程序。
c)公司要弄一个活动,可能会有大量的流量进来,公司需要再多部署几十台服务器;
在没有 Docker 的情况下,要在几天内部署几十台服务器,这对运维来说是一件非常折磨人的事,而且每台服务器的环境还不一定一样,就会出现各种问题,最后部署地头皮发麻。用 Docker 的话,我只需要将程序打包到镜像,你要多少台服务,我就给跑多少容器,极大的提高了部署效率。
3. Docker 和虚拟机的区别
比较上面两张图,我们发现虚拟机是携带操作系统,本身很小的应用程序却因为携带了操作系统而变得非常大,很笨重。Docker 是不携带操作系统的,所以 Docker 的应用就非常轻巧。另外在调用宿主机的CPU、磁盘等等这些资源的时候,拿内存举例,虚拟机是利用 Hypervisor 去虚拟化内存,整个调用过程是虚拟内存 -> 虚拟物理内存 -> 真正物理内存,但是 Docker 是利用 Docker Engine 去调用宿主的资源,这时候是虚拟内存 -> 真正物理内存。
4. Docker 的核心
a)镜像:一个镜像代表一个应用环境,他是一个只读的文件,如:mysql 镜像、tomcat 镜像、nginx 镜像等等;
Docker 中的镜像是分层的,可复用的,而非简单的一堆文件迭在一起,底层是一个 debian 操作系统镜像,上面比如叠加一个 mysql 层,就完成了一个 mysql 镜像的构建;
层级概念就不难理解,每一层都可以添加、删除文件,成为一个新的 image,不同的 image 可以共享相同的 layer ;当然镜像是不包含操作系统 Linux 内核的。
b)容器:镜像每次运行之后就是产生一个容器,就是正在运行的镜像,特点就是可读可写;
容器的存在离不开镜像的支持,他是镜像运行时的一个载体(类似于实例和类的关系)。
依托 Docker 的虚拟化技术,给容器创建了独立的端口、进程、文件等“空间”,Container 就是一个与宿主机隔离的“容器”。容器和宿主机之间可以进行 port、volumes、network 等的通信。
c)仓库:用来存放镜像的位置,类似于 maven 仓库,也就是镜像下载和上传的位置;
常用的 Docker hub 有 https://hub.docker.com、 https://cr.console.aliyun.com、 https://c.163yun.com/dashboard 等。
d)DockerFile:Docker 生成镜像配置文件,用来书写自定义镜像的一些配置;
f)Tag:一个队镜像打包的文件,日后可以还原成镜像。
5. 安装
centos7 在线安装 Docker
1 | yum install -y docker |
测试:
1 | docker run hello-world |
结果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1 . The Docker client contacted the Docker daemon. 2 . The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3 . The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4 . The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https: //hub.docker.com/ For more examples and ideas, visit: https: //docs.docker.com/get-started/ |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架