docker介绍

docker定义

根据官方的定义,Docker是以Docker容器为资源分割和调度的基本单位,封装整个软件运行时环境,为 开发者和系统管理员设计的,用于构建、发布和运行分布式应用的平台。

docker解决了什么问题

  1. 解决了应用程序本地运行环境与生产运行环境不一致的问题

  2. 解决了应用程序资源使用的问题,docker会一开始就为每个程序指定内存分配和CPU分配 。

  3. 让快速扩展、弹性伸缩变得简单。

docker技术边界

docker是容器化技术,针对的是应用及应用所依赖的环境做容器化。**遵循单一原则,一个容器只运行一 个主进程。**多个进程都部署在一个容器中,弊端很多。比如更新某个进程的镜像时,其他进程也会被迫重启,如果一个进程出问题导致容器挂了,所有进程都将无法访问。再根据官网的提倡的原则而言,容器 = 应用 + 依赖的执行环境而不是像虚拟机一样,把一堆进程都部署在一起。

docker给我们带来了哪些改变

(注:图源网络)

  1. 软件交付方式发生了变化。

  2. 替代了虚拟机 。

  3. 改变了我们体验软件的模式 。

  4. 降低了企业成本。

  5. 促进了持续集成、持续部署的发展 。

  6. 促进了微服务的发展。

docker和虚拟机的区别

(注:图源网络)

  1. vm(虚拟机)与docker(容器)框架,直观上来讲vm多了一层guest OS,同时Hypervisor会对硬件资源进行虚拟化,docker直接使用硬件资源,所以资源利用率相对docker低 。

  2. 服务器虚拟化解决的核心问题是资源调配,而容器解决的核心问题是应用开发、测试和部署

  3. 容器技术严格来说并不是虚拟化,没有客户机操作系统,是共享内核的。

docker基本框架

基本架构图

(注:图源网络)

涉及概念
  1. 镜像(Image):Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。

  2. 容器(Container):容器是独立运行的一个或一组应用,是镜像运行时的实体 。

  3. 客户端(client):Docker 客户端通过命令行或者其他工具使用DockerSDK(https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信 。

  4. 主机(host):一个物理或者虚拟的机器用于执行 Docker 守护进程和容器 。

  5. 注册中心(Registry):Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com)) 提供了庞大的镜像集合供使用。

  6. Docker Machine:Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令 行即可在相应的平台上安装Docker。

直观感受client请求serve

client 通过http协议访问 host

复制代码
sudo apt install socat

socat -v UNIX-LISTEN:/tmp/dockerapi.sock UNIX-CONNECT:/var/run/docker.sock &

这条命令中,-v 用于提高输出的可读性,带有数据流的指示。UNIX-LISTEN 部分是让socat 在一个Unix 套接字上进行监听,而UNIX-CONNECT 是让socat 连接到Docker 的Unix套接字。

复制代码
docker -H unix:///tmp/dockerapi.sock ps

输出:

复制代码
> 2023/11/27 01:32:04.062234  length=92 from=0 to=91
HEAD /_ping HTTP/1.1\r
Host: api.moby.localhost\r
User-Agent: Docker-Client/24.0.7 (linux)\r
\r
< 2023/11/27 01:32:04.062830  length=316 from=0 to=315
HTTP/1.1 200 OK\r
Api-Version: 1.43\r
Builder-Version: 2\r
Cache-Control: no-cache, no-store, must-revalidate\r
Content-Length: 0\r
Content-Type: text/plain; charset=utf-8\r
Docker-Experimental: false\r
Ostype: linux\r
Pragma: no-cache\r
Server: Docker/24.0.7 (linux)\r
Swarm: inactive\r
Date: Mon, 27 Nov 2023 01:32:04 GMT\r
\r
> 2023/11/27 01:32:04.063624  length=107 from=92 to=198
GET /v1.43/containers/json HTTP/1.1\r
Host: api.moby.localhost\r
User-Agent: Docker-Client/24.0.7 (linux)\r
\r
< 2023/11/27 01:32:04.065109  length=203 from=316 to=518
HTTP/1.1 200 OK\r
Api-Version: 1.43\r
Content-Type: application/json\r
Docker-Experimental: false\r
Ostype: linux\r
Server: Docker/24.0.7 (linux)\r
Date: Mon, 27 Nov 2023 01:32:04 GMT\r
Content-Length: 3\r
\r
[]
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

总结

1.Docker可以安装多个应用程序,但是Docker只有一个程序入口,也就是docker的启动命令只有一条。

2.Docker和虚拟机不一样,Docker本身是一个软件,管理自己的进程,没有虚拟硬件设备。

相关推荐
eight *2 小时前
docker部署elk+filebeat日志收集分析系统
elk·docker·容器
自己的九又四分之三站台3 小时前
docker安装pgvector、age和postgis
运维·docker·容器
幺零九零零4 小时前
Docker底层-IPC Namespace(进程间通信隔离)
运维·docker·容器
eddy-原5 小时前
ELKStack 与 Kubernetes 核心基础知识点综合作业
云原生·容器·kubernetes
V胡桃夹子5 小时前
Docker快速部署apollo
运维·docker·容器
oMcLin6 小时前
如何利用 Podman 替代 Docker:无 root 权限的容器管理实践
docker·dubbo·podman
程序员老赵8 小时前
ComfyUI Docker 镜像部署指南
人工智能·docker·aigc
会飞的土拨鼠呀8 小时前
Docker 部署开源蜜罐Cowrie
docker·容器·开源
我是谁??8 小时前
Rocky9.2离线安装docker和NVIDIA Container Toolkit训练环境搭建
运维·docker·容器
oMcLin8 小时前
如何在 Linux 上的 aaPanel 中使用 Docker 部署 WordPress 博客:从配置到上线一站式教程
linux·运维·docker