当前位置: 首页 > news >正文

Docker 详解+示例

介 绍

Docker 是一个开源的容器化平台,它的核心目标是解决 “软件在不同环境下运行不一致” 的问题,实现 “一次构建,到处运行” 。

它基于 Linux 内核的底层技术,将应用程序及其依赖(如库文件、配置、运行环境等)打包成一个标准化的 “容器”——>这个容器就像一个轻量级的 “独立沙箱”,它能够在隔离应用与宿主系统的同时,也隔离不同应用之间的资源和运行环境,这意味着每个应用都如同处于一个独立的空间中,既不会受宿主系统的干扰,也不会与其他应用产生资源冲突或环境干扰。同时又避免了传统虚拟机因包含完整操作系统而导致的体积庞大、启动缓慢问题。

与传统虚拟机相比,Docker 容器具有显著优势:启动时间通常以秒级计算(远快于虚拟机的分钟级),单个宿主可同时运行数百个容器(资源利用率更高),且容器体积仅包含应用和依赖(通常为 MB 级,而虚拟机常为 GB 级)。

实际场景中,Docker 已成为开发、测试、部署全流程的核心工具;开发人员可在本地用容器模拟生产环境,避免 “本地能跑、线上报错”;运维人员可通过容器快速实现应用的批量部署、扩容缩容;企业则借助 Docker 构建微服务架构,将复杂应用拆分为多个独立容器,降低耦合度,提升迭代效率。

Docker 核心命令详解及示例

1. 基础命令
命令说明示例
docker version查看 Docker 版本信息docker version
docker info查看 Docker 系统信息docker info
docker --help查看 Docker 帮助文档docker --help
2. 镜像相关命令
命令说明示例
docker images列出本地镜像docker images
docker search <镜像名>搜索远程镜像docker search ubuntu
docker pull <镜像名:标签>拉取远程镜像docker pull ubuntu:20.04
docker rmi <镜像ID/名称>删除本地镜像docker rmi ubuntu:20.04
docker build -t <镜像名:标签> <Dockerfile路径>构建镜像docker build -t myapp:1.0 .
docker tag <原镜像> <新镜像名:标签>为镜像打标签docker tag myapp:1.0 username/myapp:1.0
docker push <镜像名:标签>推送镜像到仓库docker push username/myapp:1.0
3. 容器相关命令
命令说明示例
docker run [选项] <镜像名>创建并启动容器docker run -it --name mycontainer ubuntu:20.04 /bin/bash
docker ps列出运行中的容器docker ps
docker ps -a列出所有容器(包括停止的)docker ps -a
docker start <容器ID/名称>启动已停止的容器docker start mycontainer
docker stop <容器ID/名称>停止运行中的容器docker stop mycontainer
docker restart <容器ID/名称>重启容器docker restart mycontainer
docker rm <容器ID/名称>删除容器docker rm mycontainer
docker exec [选项] <容器ID/名称> <命令>在运行的容器中执行命令docker exec -it mycontainer /bin/bash
docker logs <容器ID/名称>查看容器日志docker logs mycontainer
docker inspect <容器ID/名称>查看容器详细信息docker inspect mycontainer
docker cp <本地路径> <容器ID/名称>:<容器路径>复制文件到容器docker cp file.txt mycontainer:/root/
docker cp <容器ID/名称>:<容器路径> <本地路径>从容器复制文件到本地docker cp mycontainer:/root/file.txt .
4. 容器资源限制
命令说明示例
docker run -m <内存大小>限制容器内存docker run -m 512m ubuntu:20.04
docker run --cpus <CPU核心数>限制容器 CPUdocker run --cpus 0.5 ubuntu:20.04
5. 网络相关命令
命令说明示例
docker network ls列出网络docker network ls
docker network create <网络名>创建网络docker network create mynetwork
docker network connect <网络名> <容器名>连接容器到网络docker network connect mynetwork mycontainer
docker network disconnect <网络名> <容器名>断开容器与网络的连接docker network disconnect mynetwork mycontainer

示例:使用 Docker 安装运行 Kafka 镜像容器

-----> 方式一 docker run

旧版kafka需要zookeeper支持,新版kafka有kraft不需要zookeeper

1.docker run 配置(如下)

docker run -d 
--name kafka-kraft 
-e CLUSTER_ID=whaEHdjVT1Oacl9hnbmn1w 
-e KAFKA_PROCESS_ROLES=broker,controller 
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://你的虚拟机ens33地址:9092 
-e KAFKA_CONTROLLER_QUORUM_VOTERS=0@虚拟机回环地址:9093-e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1-p 9092:9092-p 9093:9093 
confluentinc/cp-kafka:latest

2.docker ps

3.docker pa -a

4.docker start 容器名

5.docker ps

-----> 方式二 docker-compose

旧版kafka需要zookeeper支持

步骤 1:创建工作目录

首先创建一个专门用于运行 Kafka 的目录,避免文件混乱:

mkdir -p ~/docker-kafka
cd ~/docker-kafka
步骤 2:创建 Docker Compose 配置文件

Kafka 依赖 ZooKeeper 进行集群管理,我们使用 Docker Compose 同时启动这两个服务。

cd进入到kafka目录下创建 docker-compose.yml 文件:

version: '3.8'services:# ZooKeeper 服务zookeeper:image: confluentinc/cp-zookeeper:7.4.0  # 使用指定版本,避免兼容性问题container_name: zookeeperenvironment:ZOOKEEPER_CLIENT_PORT: 2181  # 客户端连接端口ZOOKEEPER_TICK_TIME: 2000    # 心跳间隔时间(毫秒)ports:- "2181:2181"  # 映射到宿主机的 2181 端口volumes:- zookeeper-data:/var/lib/zookeeper/data  # 持久化数据- zookeeper-log:/var/lib/zookeeper/log    # 持久化日志restart: unless-stopped  # 异常退出时自动重启# Kafka 服务kafka:image: confluentinc/cp-kafka:7.4.0  # 与 ZooKeeper 版本保持一致container_name: kafkadepends_on:- zookeeper  # 确保 ZooKeeper 先启动ports:- "9092:9092"  # 宿主机访问端口environment:KAFKA_BROKER_ID: 1  #  broker 唯一标识(集群中需不同)KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181  # 连接 ZooKeeperKAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXTKAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092# 内部服务间通信使用 29092 端口,外部访问使用 9092 端口KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1  # 偏移量主题的副本数KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1volumes:- kafka-data:/var/lib/kafka/data  # 持久化 Kafka 数据restart: unless-stopped  # 异常退出时自动重启# 定义持久化卷
volumes:zookeeper-data:zookeeper-log:kafka-data:
步骤 3:启动服务

在 docker-compose.yml 所在目录执行以下命令启动服务:

# 后台启动服务(-d 表示 detached 模式)
docker-compose up -d# 查看启动状态
docker-compose ps

Windows系统访问kafka

注意:

不能直接通过浏览器访问 Kafka 的 9092 端口来操作 Kafka(比如发送 / 接收消息、管理主题等),核心原因是 Kafka 不支持 HTTP 协议(浏览器默认使用 HTTP/HTTPS 协议),它采用的是自定义的二进制协议(基于 TCP),浏览器无法解析这种协议,自然无法直接交互。

为什么浏览器无法访问 Kafka?

  1. 协议不兼容
    浏览器的核心功能是通过 HTTP/HTTPS 协议与服务器通信(比如访问网页、调用 API),而 Kafka 基于 TCP 实现了一套自定义二进制协议,用于处理消息生产、消费、主题管理等操作,两者协议完全不同,浏览器无法识别 Kafka 的协议格式。

  2. Kafka 无 Web 界面
    Kafka 本身是一个 “后端消息中间件”,默认没有内置 Web 管理界面或 HTTP 接口,不像 Nginx、Tomcat 那样可以通过浏览器访问默认页面。即使你在浏览器中输入 http://Linux服务器IP:9092,也只会得到 “连接失败” 或 “无法访问” 的提示。

与 Kafka 不同,RabbitMQ 默认支持通过浏览器访问—— 因为它内置了一个官方的 Web 管理界面(RabbitMQ Management Plugin),该界面基于 HTTP 协议提供服务,浏览器可以直接解析和交互。下面详细说明如何通过浏览器访问 RabbitMQ,以及相关配置和操作。

http://www.xdnf.cn/news/1383481.html

相关文章:

  • 进程组 会话 作业控制 守护进程
  • 【Canvas与盾牌】“靡不有初,鲜克有终”黄竖条盾牌
  • Redis 哨兵(Sentinel)全面解析
  • 海康相机开发---设备登录
  • Subdev与Media子系统的数据结构
  • redis单哨兵模式
  • 把 AI 塞进「智能水杯」——基于声学指纹的零样本水质检测杯
  • open webui源码分析11-四个特征之记忆
  • GD32VW553-IOT OLED移植
  • Intern-S1-mini模型结构
  • Python训练营打卡 DAY 50 预训练模型+CBAM模块
  • DQN(深度Q网络):深度强化学习的里程碑式突破
  • 【LeetCode每日一题】160.相交链表 206. 反转链表
  • 在Xcode中查看设备日志的完整指南
  • 消息队列核心问题解决方案:从丢失到重复消费的全方位保障
  • Windows 11 中 PowerShell 与 CMD 的深度对比:从定位到实战
  • Python DELL Logo
  • LCEDA电气规则
  • 整体设计 修订 之1 三“先”之“基” 与范畴重构:康德先验哲学的批判性程序化实现
  • MapStruct用法和实践
  • Vibe Coding到底是什么:什么是 Vibe Coding?AI编程?
  • 深度学习----卷积神经网络实现数字识别
  • 从0开始学习Java+AI知识点总结-27.web实战(Maven高级)
  • 漫谈《数字图像处理》之区域生长和区域分离聚合
  • CDN 临时下载链接
  • OpenCV 图像操作进阶:像素、边界与融合技术
  • 嵌入式学习日记(36)TCP并发服务器构建——epoll
  • 详细介绍Linux 内存管理 匿名页面和page cache页面有什么区别?
  • SplinePSF——应用于光学成像中的 PSF 建模
  • 详细介绍Linux 内存管理struct page数据结构中的_count和_mapcount有什么区别?