目录
1.Docker是什么
2.DockerFile的使用
3.常用命令
4.Docker和Web服务的交互流程
5.资料
一、Docker是什么
Docker通过轻量级的容器化技术,使得应用程序及其依赖可以打包在一个可移植的容器中运行,确保应用在不同环境下的一致性和效率。
1.1 核心组件
1.1.1 Docker引擎(Docker Engine)
Docker引擎是一个C/S架构,包括三个主要组件:
-
服务器:一个长时间运行的守护进程。
-
REST API:指定服务器可以使用的接口,让程序可以控制和与Docker守护进程交互。
-
命令行接口(CLI)客户端:docker命令,用于用户通过命令行或终端与Docker守护进程通信。
1.1.2 镜像( Images)
Docker镜像是一个轻量级、可执行的独立软件包,包含运行应用所需的所有内容:代码、运行时环境、库、环境变量和配置文件。镜像在构建时被定义,且永远不会变化。
1.1.3 容器 (Containers)
容器是镜像的运行实例。当用户使用Docker运行镜像时,Docker会在镜像的顶部添加一个可写文件层创建容器。同一镜像可以运行多个容器,容器可以被开始、停止、移动和删除。
1.1.4 镜像仓库 (Docker Hub)
Docker Hub是一个云服务,用于寻找和发布Docker镜像。它提供了一个中央资源库,用户可以从中拉取镜像到本地环境,也可以将自己构建的镜像推送到Docker Hub上分享给其他人。
1.2 基本使用流程
1.2.1 安装Docker
Docker支持多种平台,包括Windows、macOS和Linux。可以从Docker官网下载对应平台的安装包进行安装。
1.2.2 获取Docker镜像
可以从Docker Hub等仓库拉取已有的镜像到本地,也可以通过Dockerfile定义一个新的镜像并构建它。
拉取镜像的命令如下:
docker pull [IMAGE_NAME]
1.2.3 构建镜像
docker build -t [IMAGE_NAME]:[TAG] .
1.2.4 运行容器
运行容器的命令如下:
docker run -d -p [HOST_PORT]:[CONTAINER_PORT] --name [CONTAINER_NAME] [IMAGE_NAME]
1.2.5 管理Docker容器
可以查看、停止、重新启动和删除容器。
查看正在运行的容器:
docker ps
停止容器:
docker stop [CONTAINER_NAME]
整体流程如如下
二、DockerFile的使用
Dockerfile是一个文本文件,包含了一系列的指令和参数,用于自动构建Docker镜像。
当我们执行docker build命令时,Docker会逐行读取执行Dockerfile中的指令,来创建一个新的镜像。
示例和详细说明如下:
#From指令,指定基础镜像,所有Dockerfile都必须以FROM指令开始
FROM python:3.8-slim-buster
#设置工作目录
WORKDIR /app
#将当前目录内容复制到位于容器/app的工作目录中
COPY . /app
#ADD指令和COPY类似,但它还可以从URL下载文件和解压压缩文件
#ADD . /app
#在当前镜像层上执行命令
RUN pip install --no-cache-dir -r requirements.txt
# 或者使用apt install安装软件包
RUN apt install ffmpeg
# 声明容器运行时监听的端口。实际运行时需要通过-p参数指定端口映射。
EXPOSE 8080
#定义环境变量
ENV NAME World
#在容器启动时运行app.py
CMD ["python", "app.py"]
三、Docker常用命令
3.1 基础命令
启动:systemctl start docker
关闭:systemctl stop docker
重启:systemctl restart docker
设置随服务自启动:systemctl enable docker
查看运行状态: systemctl status docker
3.2 镜像命令
docker search 镜像id或name:在Docker Hub仓库中镜像
docker pull 镜像id或name:从仓库中下载镜像
docker push dockerHub仓库地址:tagName :推送到镜像仓库
docker tag 本地镜像 dockerHub仓库地址:tagName:打标签
docker images:查看镜像
docker rmi 镜像id或name:删除本地镜像
docker build -t 镜像name .:构建镜像
docker run --name ${container_name} --rm -v /data1:/data1 -p 8080:8080 -itd ${images_name} bash : 启动镜像
3.3 容器命令
docker ps:查看运行中的容器
docker ps -a :查看所有容器,包括未运行
docker stop 容器id或name:停止容器
docker kill 容器id:强制停止容器
docker start 容器id或name:启动已停止的容器
docker top 容器id:查看容器里的进程
docker exec -it 容器id /bin/bash:进入容器
exit:退出容器
docker rm 容器id或name:删除已停止的容器
docker rm -f 容器id:删除正在运行的容器
四、Docker和web服务之间的交互流程
基础架构流程
假设我们有一个Web服务,它负责接收客户端的请求,维护待处理的任务队列。Docker容器中运行的脚本(以下简称为Docker脚本)定期从Web服务获取任务(Task),执行相应的处理,并将结果通过HTTP请求回传给Web服务。这样的架构在处理大量并发任务、实现负载均衡等场景下非常有效
4.1 任务分发流程
-
客户端请求:客户端通过HTTP请求向Web服务提交一个新的任务,包括任务类型、所需数据等信息。
-
任务队列维护:Web服务接收到任务请求后,根据任务类型和内容将任务存入相应的队列中。这个队列可以是简单的内存队列,也可以是Redis等高效的消息队列系统。
-
任务获取:Docker脚本定时向Web服务发起请求,查询是否有待处理的任务。这通常通过一个特定的API接口实现,Docker脚本发送请求并携带自身的标识信息,以便Web服务根据Docker脚本的能力或任务处理优先级分配任务。
-
任务派发:Web服务根据Docker脚本的请求返回待处理的任务信息,Docker脚本接收到任务信息后,根据任务类型和所需操作调用相应的处理脚本或程序。
4.2 任务处理与结果回传
-
任务处理:Docker脚本根据任务信息执行具体的处理逻辑。这可能涉及数据处理、模型训练、文件操作等多种类型的任务。
-
结果生成:任务完成后,Docker脚本生成相应的结果数据。这些结果可能是处理后的数据文件、处理状态、日志信息等。
-
结果回传:Docker脚本通过HTTP请求将处理结果回传给Web服务。通过另一个API接口实现,请求中包含任务标识(Task ID)、处理结果等信息。
-
结果处理:Web服务接收到处理结果后,更新任务状态,并根据需要将结果数据存储或通知给客户端。
安全和性能
-
安全性:在Docker脚本与Web服务之间的交互中,确保数据传输的安全性非常重要。使用HTTPS、验证令牌(Token)等机制可以保护数据不被截获或篡改。
-
容错与重试机制:网络请求可能因为各种原因失败。实现适当的重试逻辑,以及在Docker脚本和Web服务中处理异常情况,可以提高系统的稳定性和鲁棒性。
-
性能与扩展性:随着任务数量的增加,确保系统的响应速度和处理能力成为关键。使用负载均衡、容器编排(如Kubernetes)等技术可以有效地扩展系统。
五、资料
1. docker介绍及常用命令大全(超详细)https://blog.csdn.net/qq_25919879/article/details/127054566
2. B站看过最全最详细的【Docker】https://www.bilibili.com/video/BV1cV4y1V7Sq?p=8&vd_source=03a763fa6cf49b01f658f32592f5a6f3
感谢你的阅读
接下来我们继续学习输出AIGC相关内容,欢迎关注公众号“音视频开发之旅”,一起学习成长。
欢迎交流