【Docker学习总结】12.Docker的CS模式

一、Docker的C/S模式介绍

下图为Docker官方提供的Docker的CS运行模式的介绍:

                                         

在Docker Client中来运行Docker的各种命令,而这些命令会传送给在Docker的宿主机上运行的Docker的守护进程。而Docker的守护进程是负责来实现Docker的各种功能。
下面的图是去掉了一些没有用的信息,专注于Docker的客户端与守护进程的描述:

       

如图所示,Docker的守护进程运行在宿主机上,也就是我们常说的“C/S架构”的Server(服务)端,守护进程会在启动后,一直在后台运行,负责实现Docker的各种功能。而Docker的使用者并不会直接与守护进程进行交互,而是要通过Docker的客户端,也就是我们在前面演示过的Docker的命令行接口,来与Docker守护进程进行通信。而这个命令行接口,也就是我们在Shell中执行Docker命令时运行的二进制程序,它是Docker最主要的用户接口,用来从用户处接收Docker的命令,并且传递给守护进程;而守护进程将命令执行的结果返回给客户端,返显示在命令行接口中。
 

二、Remote API

除了上面提到的客户端的命令行接口,Docker也提供了另外的与守护进程进行通信的方式。这就是Remote API。
Remote API和我们常见的网络平台提供的API非常相似,它也是一个RESTful风格的API。我们可以通过Remote API与Docker的守护进程进行通信。也就是说,我们可以通过编写程序,调用这个API,来将我们自己的程序与Docker进行集成。
 

Docker的Remote在某些复杂的情况下,也支持以下方式进行交互:
STDIN、STDOUT、STDERR
备注:标准输入(STDIN)、标准输出(STDOUT)、标准错误输出(STDERR)

下面这幅图我们可以看到,通过Remote API的形式,来实现Docker的C/S架构的模式:

用户可以与自定义的程序(JAVA、C++等)进行交互,而这些程序通过调用Remote API与Docker的守护进行进行协作。

三、Docker客户端与守护进程的通信方式

Docker的客户端与守护进程,实际上是通过Socket进行连接的。
Docker提供了三种进行Socket连接的模式:
(1)Unix的端口模式
unix:///var/run/docker.sock
(2)TCP协议的host:port模式:
tcp://host:port
(3)fd的Socket模式
fd://socketfd
其中,Unix的端口模式是Docker默认的客户端与守护进程的连接方式。我们也可以通过配置进行修改,来使用其它的Socket连接方式。


下图就是一个完整的Docker的C/S模式的运行方式:

四、连接演示

刚才我们了解到,Docker的守护进程,在启动后,会一直运行,那么我们就可以使用Linux的PS命令,来查看当前进程中是否已经启动了Docker的服务:

我们使用“grep”来过滤Docker关键字。我们看到的第一条就是正在运行的Docker的守护进程。
我们在命令行中使用的Docker命令,实际上就是使用的Docker的客户端程序在与守护进程进行交互。

 

我们运行version命令:

其中的“server API version”指的就是我们刚刚讲的Remote API的版本。

下面我们再来演示Docker的Remote API是什么样子。这里我们需要使用Linux的netcat(nc)的命令,来实现socket的连接:

注意:没有nc命令,使用“yum install -y nc”即可安装。
上面我们使用“-U”来指明使用的是socket,Docker使用的socket地址为“/var/run/docker.sock”。回车后,就已经成功连接了socket:

此时我们使用socket来发起一个http的指令,用来查看Remote API中的一个接口---info,这个接口用来返回Docker的相关信息。后面的“HTTP/1.1”为指定的协议类型。我们看到返回的结果就是通过Docker的Remote API所返回的结果,这个结果使用了json的格式。(这里我始终得不到JSON反馈)
 

### Container介绍 Container(容器)是镜像的运行实例,类似轻量级沙盒,包含应用程序及其依赖项,具备隔离和可移植性,各容器相互独立,拥有自己的文件系统、进程空间等。 ### Docker介绍(Docker初探) Docker是用于开发、部署和运行应用程序的开源平台,采用容器化技术,将应用及其依赖打包成独立容器。核心组件有镜像、容器和仓库,可解决不同环境中应用部署的兼容性问题。 ### 部署Docker 以Ubuntu系统为例,部署步骤如下: ```bash # 更新系统包列表 sudo apt update # 安装必要的依赖包 sudo apt install apt-transport-https ca-certificates curl software-properties-common # 添加Docker的官方GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 添加Docker软件源 echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 更新系统包列表 sudo apt update # 安装Docker Engine sudo apt install docker-ce docker-ce-cli containerd.io # 启动Docker服务并设置开机自启 sudo systemctl start docker sudo systemctl enable docker ``` ### Harbor部署(Docker仓库) Harbor是开源的企业级Docker仓库,用于存储和管理Docker镜像,其组件以Docker容器形式构建,使用Docker Compose部署。部署步骤如下: 1. 下载Harbor离线安装包并解压: ```bash wget https://github.com/goharbor/harbor/releases/download/v2.5.0/harbor-offline-installer-v2.5.0.tgz tar xvf harbor-offline-installer-v2.5.0.tgz cd harbor ``` 2. 编辑`harbor.cfg`文件,配置相关参数。 3. 执行准备脚本: ```bash ./prepare ``` 4. 执行安装脚本: ```bash ./install.sh ``` ### Docker客户端操作 Docker客户端提供管理容器、镜像、网络等资源的命令,常用操作命令如下: - 查看Docker版本: ```bash docker version ``` - 查看Docker信息: ```bash docker info ``` - 拉取镜像: ```bash docker pull ubuntu:20.04 ``` - 运行容器: ```bash docker run -it ubuntu:20.04 /bin/bash ``` - 查看容器列表: ```bash docker ps -a ``` - 停止容器: ```bash docker stop <container_id> ``` - 删除容器: ```bash docker rm <container_id> ``` ### Docker数据卷 数据卷是Docker持久化数据的机制,绕过容器文件系统,将数据存储在宿主机,实现数据持久化和共享。示例如下: ```bash # 创建数据卷 docker volume create my_volume # 运行容器并挂载数据卷 docker run -it -v my_volume:/data ubuntu:20.04 /bin/bash ``` ### Docker网络架构 Docker提供多种网络模式,如`bridge`、`host`、`none`等。默认使用`bridge`网络模式,容器通过虚拟网桥与宿主机和其他容器通信。 ### Docker网络配置 可创建自定义网络,运行容器时指定网络,示例如下: ```bash docker network create my_network docker run -it --network my_network ubuntu:20.04 /bin/bash ``` ### 跨主机容器通讯 可使用Docker的overlay网络或第三方工具(如Weave Net、Flannel)实现跨主机容器通讯。以overlay网络为例,先创建Swarm集群,再创建overlay网络: ```bash # 初始化Swarm集群 docker swarm init # 创建overlay网络 docker network create -d overlay my_overlay_network ``` ### 创建镜像 使用Dockerfile创建自定义镜像,示例如下: ```Dockerfile # 使用基础镜像 FROM ubuntu:20.04 # 安装必要的软件包 RUN apt update && apt install -y nginx # 复制配置文件 COPY nginx.conf /etc/nginx/nginx.conf # 暴露端口 EXPOSE 80 # 启动Nginx服务 CMD ["nginx", "-g", "daemon off;"] ``` 使用以下命令构建镜像: ```bash docker build -t my_nginx:v1 . ``` ### Namespace介绍 Namespace是Linux内核的隔离机制,用于隔离系统资源(如进程、网络、文件系统等),Docker利用Namespace实现容器隔离性。 ### Cgroup介绍 Cgroup是Linux内核的资源管理机制,用于限制和监控容器使用的系统资源(如CPU、内存、磁盘I/O等),使Docker能精确控制容器资源使用。 ### Overlay覆盖文件系统 OverlayFS是Docker常用的存储驱动,通过分层方式管理镜像和容器的文件系统。 ### Docker-compose Docker Compose用于定义和运行多容器Docker应用,通过YAML文件配置应用的服务、网络和数据卷等。示例如下: ```yaml version: '3' services: web: image: nginx:latest ports: - "80:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf db: image: mysql:8.0 environment: - MYSQL_ROOT_PASSWORD=password - MYSQL_DATABASE=mydb ``` 使用以下命令启动Docker Compose项目: ```bash docker-compose up -d ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值