Docker 详解+示例(部署Kafka镜像容器)

介 绍

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 ps -a

4.docker start 容器名

5.docker ps

-----> 方式二 docker compose

旧版kafka需要zookeeper支持,这里使用docker compose进行集群管理。

步骤 1:创建工作目录

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

mkdir -p ~/docker-kafka
cd ~/docker-kafka

步骤 2:创建 Docker Compose 配置文件

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

cd进入到kafka目录下,创建 docker-compose.yml 文件,并使用vi命令编写保存:

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.pswp.cn/diannao/97561.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/97561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SciPy科学计算与应用:SciPy应用实战-数据分析与工程计算

SciPy案例研究&#xff1a;从理论到实践 学习目标 通过本课程&#xff0c;学员将了解一系列实际案例&#xff0c;深入探讨SciPy库在数据分析、物理模拟和工程计算中的应用。同时学员将学习如何利用SciPy解决实际问题&#xff0c;加深对SciPy各个模块的理解和应用能力。 相关知识…

React学习教程,从入门到精通, ReactJS - 架构(6)

ReactJS - 架构 React应用的架构 React的架构就像一个井然有序的厨房&#xff0c;每个工具都有其特定的位置和用途。在其核心&#xff0c;React遵循一个基于组件的架构&#xff0c;这意味着我们使用可重用的组件构建应用程序。 组件&#xff1a;构建块 可以把组件想象成乐高积木…

Bias / variance and neural networks|偏差/方差和神经网络

----------------------------------------------------------------------------------------------- 这是我在我的网站中截取的文章&#xff0c;有更多的文章欢迎来访问我自己的博客网站rn.berlinlian.cn&#xff0c;这里还有很多有关计算机的知识&#xff0c;欢迎进行留言或…

Linux HMM(Heterogeneous Memory Management)的应用

原理篇见【https://blog.csdn.net/shenjunpeng/article/details/150931847?spm1011.2415.3001.5331】 1. HMM 的优势与挑战 1.1 优势 统一虚拟地址空间&#xff1a;简化异构计算平台的数据共享和访问。 高效页表同步&#xff1a;支持设备端的 page fault 和页表同步&#x…

鸿蒙创新赛活动——Mac提交压缩失败后续

Mac提交压缩失败后续来了… 传送带【上一篇】 背景 华为2025HarmonyOS创新赛 上传作品的时候&#xff0c;遇到了一个提示 ZIP包中的Office文件含有嵌入文件&#xff0c;就去这个Office文件找&#xff0c;怎么也找不到嵌入的文件。 解决方法1 上次推荐的解决方式是&#xff0…

Ubuntu操作系统下使用mysql、mongodb、redis

目录 一、核心步骤概览 二. MySQL &#xff08;下面以其他用户为例&#xff09; 1,、安装 2、管理服务 3、连接与使用 4、配置文件位置 5、下面来演示一下安装好之后如何在Linux操作系统中远程登录和window互连Linux 远程登录 window连Linux&#xff08;连不上的&…

springboot java开发的rocketmq 顺序消息保证

首先要明确一个关键点&#xff1a;RocketMQ 保证的是一种局部顺序&#xff08;Partially Ordered&#xff09;​&#xff0c;而非全局顺序&#xff08;Globally Ordered&#xff09;。这意味着消息的顺序性只在某个特定维度&#xff08;比如同一个订单ID&#xff09;下保证&…

【机器学习】 14 Kernels

本章目录 14 Kernels 479 14.1 Introduction 479 14.2 Kernel functions 479 14.2.1 RBF kernels 480 14.2.2 Kernels for comparing documents 480 14.2.3 Mercer (positive definite) kernels 481 14.2.4 Linear kernels 482 14.2.5 Matern kernels 482 14.2.6 String kerne…

Android开发-工程结构

一、项目视图模式在开始之前&#xff0c;确保你的 Project 面板使用的是 【Android】 视图&#xff08;默认&#xff09;。这是最常用的视图&#xff0c;它将相关文件按功能逻辑分组展示。&#x1f4a1; 你也可以切换到 【Project】 视图查看完整的文件系统结构。二、顶级项目结…

mysql的内置函数

文章目录mysql的内置函数时间函数1. 返回值的数据类型和格式2. 功能侧重点3. 函数别名情况我现在想给一个日期加上十天&#xff0c;然后输出加上十天之后的日期&#xff0c;我该怎么做&#xff1f;我现在想给一个日期减去两天&#xff0c;然后输出减去两天之后的日期&#xff0…

【动态规划】子序列问题

一、[最长递增子序列](https://leetcode.cn/problems/longest-increasing-subsequence/description/)二、[摆动序列](https://leetcode.cn/problems/wiggle-subsequence/description/)三、[最长递增子序列的个数](https://leetcode.cn/problems/number-of-longest-increasing-s…

P2P技术应用:去中心化

P2P技术应用&#xff1a;https://www.bilibili.com/video/BV1WH4y1Y7i9 P2P与下载器 P2P技术实现的下载协议&#xff1a; 1、种子文件 2、磁力 3、电骡 播放器&#xff1a; 快车、电骡、迅雷 BT&#xff08;种子&#xff09;下载的基本技术原理 网盘与P2P技术 网盘公司的主…

数据结构(C语言篇):(八)栈

目录 前言 一、概念与结构 二、栈的实现 2.1 头文件的准备 2.2 函数的实现 2.2.1 STInit( )函数&#xff08;初始化&#xff09; 2.2.2 STDestroy( )函数&#xff08;销毁&#xff09; 2.2.3 STPush( )函数&#xff08;入栈&#xff09; 2.2.4 STPop( )函数&#…

Elasticsearch数据迁移快照方案初探(一):多节点集群配置踩坑记

背景介绍 在生产环境中&#xff0c;我们经常需要将测试环境的Elasticsearch索引数据迁移到生产环境。这次我们遇到了一个典型的多节点集群快照配置问题&#xff1a;需要为所有节点添加path.repo配置&#xff0c;但过程中遇到了各种挑战。 问题描述 我们的Elasticsearch集群包含…

leedcode 算法刷题第二十天

39. 组合总和 class Solution { public:vector<vector<int>> result;vector<int> temp;void backtructing(vector<int>& candidates, int target, int sum,int start){if(sumtarget){result.push_back(temp);return;}if(sum>target){return;}f…

身份证实名认证API集成—身份核验接口-网络平台安全合规

在数字化浪潮席卷各行各业的今天&#xff0c;网络空间的安全问题日益受到关注。为防范网络诈骗、虚假注册、身份盗用等风险&#xff0c;国家陆续出台多项法律法规&#xff0c;如《网络安全法》《个人信息保护法》等&#xff0c;明确要求互联网服务提供者落实用户真实身份核验机…

谷歌TIGER爆火!生成式召回颠覆推荐系统:用语义ID破解冷启动+多样性难题,3大数据集性能碾压传统模型

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《GPT多模态大模型与AI Agent智能体》&#xff08;跟我一起学人工智能&#xff09;【陈敬雷编著】【清华大学出版社】 清华《GPT多模态大模型与AI Agent智能体》书籍配套视频课程【陈敬雷…

分享一个实用的B站工具箱(支持音视频下载等功能)

文章目录 📖 介绍 📖 🏡 演示环境 🏡 📒 一款实用的B站工具箱 📒 💥 项目亮点 💥 🛠️ 下载与安装 🚀 使用指南 📢 注意事项 ⚓️ 相关链接 ⚓️ 📖 介绍 📖 很多小伙伴在B站追番或者学习时,总会遇到一个很头疼的问题:想把视频下载到本地,要么被限…

大话 IOT 技术(4) -- 答疑篇

文章目录前言手机能与设备直接通信吗多协议能统一用一个吗假设我们统一用http协议假设我们统一用mqtt协议bypass服务端和设备不能mqtt直接通信设备必有wifi 和蓝牙功能设备为什么不能自己连接网络配网模式是什么后话当你迷茫的时候&#xff0c;请点击 物联网目录大纲 快速查看前…

机器视觉学习-day14-绘制图像轮廓

1. 轮廓的概念轮廓是目标物体或者区域在图像外部的边界线&#xff0c;通常由一系列像素点相连组成&#xff0c;这些像素点共同构成了一个封闭的形状&#xff0c;这样形状就是轮廓。轮廓与边缘不同&#xff1a;轮廓是连续的&#xff0c;边缘可以连续也可以离散轮廓是完整的&…