docker-compose部署Kafka

Docker之compose介绍

https://blog.csdn.net/weixin_71429850/article/details/127437081
使用一个Dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。下面介绍Docker官方产品,Docker Compose。
Dockerfile可以让用户管理一个单独的应用容器,而compose则允许用户在一个模板(yaml格式)中定义一组相关联的应用容器(被称为一个project,即项目)
例如一个web服务再加上后端的数据库服务容器等。
image
引用自
https://docs.docker.com/compose/#compose-v2-and-the-new-docker-compose-command

Compose V2 and the new docker compose command
    Important
    The new Compose V2, 
which supports the compose command as part of the Docker CLI, is now available.

    Compose V2 integrates compose functions into the Docker platform, 
continuing to support most of the previous docker-compose features and flags. 
You can run Compose V2 by replacing the hyphen (-) with a space, 
using docker compose, instead of docker-compose.

#停止并删除所有相关容器
docker-compose down
docker compose down

# 停止所有容器
docker stop $(docker ps -aq)
# 删除所有容器
docker rm $(docker ps -aq)
# 删除所有镜像
docker rmi $(docker images -q)
# 删除所有已经停止运行的容器
docker container prune
# 删除所有未使用的镜像
docker image prune


https://qa.1r1g.com/sf/ask/4656010551/
https://www.cnblogs.com/YINBin/p/17075091.html
https://blog.csdn.net/vecloud/article/details/126138621

docker create network

image
image
image
image

# 创建bridge网络
比如 docker network create lzwj 网络默认采用桥接网络
docker network ls
docker network create kfk-net
docker network create --driver bridge kfk-net
docker network create --driver host kfk-net2
docker network create --driver overlay kfk-net3
docker network create --driver macvlan kfk-net4
docker network create --driver none kfk-net5


docker network create --driver bridge my-network
bridge:多由于独立container之间的通信
host: 直接使用宿主机的网络,端口也使用宿主机的
overlay:当有多个docker主机时,跨主机的container通信
macvlan:每个container都有一个虚拟的MAC地址
none: 禁用网络


[root@vue ~]# docker network create --driver bridge my-network

创建两个通过network bridge 通讯的容器
[root@vue ~]# docker run -dit --name emqttd1 --network my-network local/emqttd:v1
24ab86a617d83ed44ce8080d65917300810b5ac4d092b4a4d456e5f59df5d6d8
[root@vue ~]# docker run -itd --name emqttd2 --network my-network local/emqttd:v1
b5f980d7ffaf8bba8ca1f5e4f23e970eb20d9921783ef71f7cfa7ce6311c75a2

[root@vue ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
b5f980d7ffaf        local/emqttd:v1     "/bin/sh -c '/usr/lo…"   3 seconds ago       Up 2 seconds        18083/tcp           emqttd2
24ab86a617d8        local/emqttd:v1     "/bin/sh -c '/usr/lo…"   37 seconds ago      Up 36 seconds       18083/tcp           emqttd1

#  容器内ping容器name
[root@vue ~]# docker exec emqttd1 ping emqttd2
PING emqttd2 (172.19.0.3) 56(84) bytes of data.
64 bytes from emqttd2.my-network (172.19.0.3): icmp_seq=1 ttl=64 time=0.147 ms
64 bytes from emqttd2.my-network (172.19.0.3): icmp_seq=2 ttl=64 time=0.104 ms
64 bytes from emqttd2.my-network (172.19.0.3): icmp_seq=3 ttl=64 time=0.090 ms
^C
[root@vue ~]# docker exec emqttd2 ping emqttd1
PING emqttd1 (172.19.0.2) 56(84) bytes of data.
64 bytes from emqttd1.my-network (172.19.0.2): icmp_seq=1 ttl=64 time=0.082 ms
64 bytes from emqttd1.my-network (172.19.0.2): icmp_seq=2 ttl=64 time=0.090 ms
64 bytes from emqttd1.my-network (172.19.0.2): icmp_seq=3 ttl=64 time=0.102 ms

https://www.jianshu.com/p/83615cdc2507

docker-compose部署Kafka

firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --zone=public --add-port=9092/tcp --permanent
firewall-cmd --zone=public --add-port=19092/tcp --permanent
firewall-cmd --reload
mkdir -p /docker/kafka/data
chmod -R 777 /docker/kafka

docker-compose up -d zookeeper kafka kafka-manager

防火墙的五表五链N规则

防火墙的五表五链N规则---个人理解整理
https://blog.csdn.net/jt_121217/article/details/125047779
image

五表

filter 表用于过滤包,最常用的表,有INPUT、FORWARD、OUTPUT三个链

nat 表用于网络地址转换,有PREROUTING、OUTPUT、POSTROUTING三个链

managle 表用于给数据包做标记,然后根据标记去操作那些包,几乎用不到

raw 表可以实现不追踪某些数据包,几乎用不到

security 表在centos6中并没有(此时四表),用于强制访问控制(MAC)的网络规则,由Linux安全模块(如SELinux)实现,规则太复杂几乎用很少用。

规则优先:security -->raw-->mangle-->nat-->filter

常用到的表基本在nat、filter
image
image
getenforce 查看当前 selinux 的状态,Enforcing 表示开启,Permissive 表示关闭。
setenforce 0 临时关闭 selinux
vi /etc/selinux/config 进入配置selinux文件,更改SELINUX=disabled,可以永久关闭selinux
systemctl disable firewalld 表示先停止防火墙服务
systemctl stop firewalld 表示关闭防火墙服务
5个表: filter,nat,mangle,raw,security
5个链: PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
本机: PREROUTING →INPUT →OUTPUT →POSTROUTING
非本机:PREROUTING→FORWARD→POSTROUTING

firewall-cmd命令详解

image

# 安装firewalld
yum install firewalld firewall-config
 
systemctl start  firewalld # 启动
systemctl status firewalld # 或者 firewall-cmd --state 查看状态
systemctl disable firewalld # 停止
systemctl stop firewalld  # 禁用
 
# 关闭服务的方法
# 你也可以关闭目前还不熟悉的FirewallD防火墙,而使用iptables,命令如下:
 
systemctl stop firewalld
systemctl disable firewalld
yum install iptables-services
systemctl start iptables
systemctl enable iptables

firewall-cmd --version  # 查看版本
firewall-cmd --help     # 查看帮助
 
# 查看设置:
firewall-cmd --state  # 显示状态
firewall-cmd --get-active-zones  # 查看区域信息
firewall-cmd --get-zone-of-interface=eth0  # 查看指定接口所属区域
firewall-cmd --panic-on  # 拒绝所有包
firewall-cmd --panic-off  # 取消拒绝状态
firewall-cmd --query-panic  # 查看是否拒绝
 
firewall-cmd --reload # 更新防火墙规则
firewall-cmd --complete-reload
# 两者的区别就是第一个无需断开连接,就是firewalld特性之一动态添加规则,第二个需要断开连接,类似重启服务
 
 
# 将接口添加到区域,默认接口都在public
firewall-cmd --zone=public --add-interface=eth0
# 永久生效再加上 --permanent 然后reload防火墙
 
# 设置默认接口区域,立即生效无需重启
firewall-cmd --set-default-zone=public
 
# 查看所有打开的端口:
firewall-cmd --zone=dmz --list-ports
 
# 加入一个端口到区域:
firewall-cmd --zone=dmz --add-port=8080/tcp
# 若要永久生效方法同上
 
# 打开一个服务,类似于将端口可视化,服务需要在配置文件中添加,/etc/firewalld 目录下有services文件夹,这个不详细说了,详情参考文档
firewall-cmd --zone=work --add-service=smtp
 
# 移除服务
firewall-cmd --zone=work --remove-service=smtp
 
# 显示支持的区域列表
firewall-cmd --get-zones
 
# 设置为家庭区域
firewall-cmd --set-default-zone=home
 
# 查看当前区域
firewall-cmd --get-active-zones
 
# 设置当前区域的接口
firewall-cmd --get-zone-of-interface=enp03s
 
# 显示所有公共区域(public)
firewall-cmd --zone=public --list-all
 
# 临时修改网络接口(enp0s3)为内部区域(internal)
firewall-cmd --zone=internal --change-interface=enp03s
 
# 永久修改网络接口enp03s为内部区域(internal)
firewall-cmd --permanent --zone=internal --change-interface=enp03s

# 显示服务列表 
Amanda, ftp, Samba和tftp等最重要的服务已经被FirewallD提供相应的服务,可以使用如下命令查看:
 
firewall-cmd --get-services
 
# 允许ssh服务通过
firewall-cmd --enable service=ssh
 
# 禁止SSH服务通过
firewall-cmd --disable service=ssh
 
# 打开TCP的8080端口
firewall-cmd --enable ports=8080/tcp
 
# 临时允许Samba服务通过600秒
firewall-cmd --enable service=samba --timeout=600
 
# 显示当前服务
firewall-cmd --list-services
 
# 添加HTTP服务到内部区域(internal)
firewall-cmd --permanent --zone=internal --add-service=http
firewall-cmd --reload     # 在不改变状态的条件下重新加载防火墙

# 打开443/TCP端口
firewall-cmd --add-port=443/tcp
 
# 永久打开3690/TCP端口
firewall-cmd --permanent --add-port=3690/tcp
 
# 永久打开端口好像需要reload一下,临时打开好像不用,如果用了reload临时打开的端口就失效了
# 其它服务也可能是这样的,这个没有测试
firewall-cmd --reload
 
# 查看防火墙,添加的端口也可以看到
firewall-cmd --list-all

# FirewallD包括一种直接模式,使用它可以完成一些工作,例如打开TCP协议的9999端口
 
firewall-cmd --direct -add-rule ipv4 filter INPUT 0 -p tcp --dport 9000 -j accept
firewall-cmd --reload

  可以通过两种方式控制端口的开放,一种是指定端口号另一种是指定服务名。虽然开放 http 服务就是开放了 80 端口,<br>但是还是不能通过端口号来关闭,也就是说通过指定服务名开放的就要通过指定服务名关闭;通过指定端口号开放的就要通过指定端口号关闭。<br>还有一个要注意的就是指定端口的时候一定要指定是什么协议,tcp 还是 udp。知道这个之后以后就不用每次先关防火墙了,可以让防火墙真正的生效。
firewall-cmd --add-service=mysql        # 开放mysql端口
firewall-cmd --remove-service=http      # 阻止http端口
firewall-cmd --list-services            # 查看开放的服务
firewall-cmd --add-port=3306/tcp        # 开放通过tcp访问3306
firewall-cmd --remove-port=80tcp        # 阻止通过tcp访问3306
firewall-cmd --add-port=233/udp         # 开放通过udp访问233
firewall-cmd --list-ports               # 查看开放的端口

firewall-cmd --query-masquerade # 检查是否允许伪装IP
firewall-cmd --add-masquerade   # 允许防火墙伪装IP
firewall-cmd --remove-masquerade# 禁止防火墙伪装IP

端口转发可以将指定地址访问指定的端口时,将流量转发至指定地址的指定端口。转发的目的如果不指定 ip 的话就默认为本机,如果指定了 ip 却没指定端口,则默认使用来源端口。 如果配置好端口转发之后不能用,可以检查下面两个问题:
1.比如我将 80 端口转发至 8080 端口,首先检查本地的 80 端口和目标的 8080 端口是否开放监听了
2.其次检查是否允许伪装 IP,没允许的话要开启伪装 IP
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080   # 将80端口的流量转发至8080
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1 # 将80端口的流量转发至192.168.0.1
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1:toport=8080 # 将80端口的流量转发至192.168.0.1的8080端口








参考

https://blog.csdn.net/cl939974883/article/details/126511784
https://blog.csdn.net/m0_37942145/article/details/125894309
https://blog.csdn.net/qq_39787367/article/details/132187472
https://blog.csdn.net/qq_39526294/article/details/124293954
https://blog.csdn.net/m0_37678007/article/details/123686933
https://blog.csdn.net/weixin_40461281/article/details/125855550
https://blog.csdn.net/weixin_42697074/article/details/103874777
https://blog.csdn.net/qq_27229113/article/details/126015972
https://blog.csdn.net/y_bccl27/article/details/130958492
https://blog.csdn.net/weixin_61959079/article/details/131826026

posted @ 2023-10-22 16:58  三里清风18  阅读(1307)  评论(0)    收藏  举报