docker 常见命令使用记录

1. swarm 集群

1. 集群创建
python 复制代码
#  创建集群管理节点,  --advertise-addr  指定节点管理通信地址,--data-path-addr 指定容器通信地址
docker swarm init --advertise-addr 1.14.138.35 --data-path-addr 1.14.138.35

#  --advertise-addr  指明当前work节点的通信地址,如果当前集群机器是内网的话,各个机器之间可以直接进行通信的话,就不需要
#  如果当前服务器集群不是在内网中的话就需要指明,否则,work节点加入集群的时候是按照eth0网卡的ip地址进行加入,这样就无法进行通信
docker swarm join --token SWMTKN-1--aqjja2f6n8uilutv5udr0gq4e 1.14.138.35:2377  --advertise-addr 120.78.30.163
2. 集群网络创建
python 复制代码
# --driver 网络类型,默认有 overlay、bridge、host 三种,overlay 是docker swarm 中的默认网络驱动,
# 可以让各个节点中的容器进行跨主机、跨容器进行网络通信,还可以使用容器名称进行dns服务发现等功能
# --attachable  配置网络名称,想要容器进行跨主机、跨容器进行网络通信的话,在启动容器的时候需要指明适应的网络,
# 一个容器可以使用多个网络驱动
docker network create --driver overlay --attachable base_service_database-net 

# 查看 docker 网络列表
docker network ls

2 集群config配置

在docker swarm 集群中,当集群内的容器需要额外自定义的配置文件的时候,并且这个容器是global 全局运行的,每当加入一个work 节点的时候,想要自动给它配置的话,就可以使用config 进行配置管理,在管理节点上创建配置文件,然后将这个配置文件添加到集群中即可

1. filebeat.yml
yml 复制代码
filebeat.inputs:
- type: filestream
  enabled: true
  paths:
      - /data/logs/*/*.log

  parsers:
    - multiline:
        type: pattern
        pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}'
        negate: true
        match: after
        max_lines: 500
        timeout: 10s

processors:
  - dissect:
      tokenizer: "%{log_timestamp} | %{log_level} | %{namespace} | %{file_path} | %{method} | %{track_id} | %{message}"
      field: "message"
      max_lines: 500
      target_prefix: ""
      overwrite_keys: true
  - timestamp:
      field: log_timestamp
      layouts:
        - '2006-01-02 15:04:05.000'
      test:
        - '2025-04-14 09:16:52.758'
  - drop_fields:
      fields: ["log_timestamp"]


output.elasticsearch:
  hosts: ["http://elasticsearch:9200"]
  index: "caipu_srv-logs-%{+yyyy.MM.dd}"
  indices:
    - index: "caipu_srv-logs-%{+yyyy.MM.dd}"
      when.contains:
        tags: "xixi"
      pipeline: "xixi_processor"
      


setup.template.enabled: false
setup.template.name: "caipu_srv"
setup.template.pattern: "caipu_srv-*"
2. 创建配置
Bash 复制代码
docker config create filebeat-config  /data/docker/filebeat/config/filebeat.yml
3. 使用docker配置文件
python 复制代码
version: '3.8'

networks:
  base_service_database-net:
    external: true


services:

  filebeat:
    container_name: filebeat
    image: elastic/filebeat:7.17.7
    restart: always
    networks:
      - base_service_database-net
    deploy:
      mode: global
    configs:
      - source: filebeat-config
        target: /usr/share/filebeat/filebeat.yml  # 配置文件挂载路径
    volumes:
      - type: bind
        source: /data/logs/
        target: /data/logs/
        
      - type: bind
        source: /var/run/docker.sock
        target: /var/run/docker.sock
      - type: bind
        source: /var/lib/docker/containers
        target: /var/lib/docker/containers
        read_only: true
        

configs:
  filebeat-config:
    file: /data/docker/filebeat/config/filebeat.yml  # 使用本地的 filebeat.yml 文件

3 集群堆栈服务

1. 启动堆栈服务
python 复制代码
# 可以通过配置文件批量启动服务,类似docker-compose 效果,
# 在docker swarm中,可以根据配置文件中的配置将容器分发给其他的work节点进行启动服务
docker stack deploy -c filebeat.yml filebeat
2. 查看当前服务列表
bash 复制代码
docker service ls
3. 删除所有服务
bash 复制代码
docker service ls -q | xargs -r docker service rm
4. 查看服务日志
bash 复制代码
docker service logs 服务名称/服务id
5.查看当前堆栈列表
bash 复制代码
docker stack ls
6. 查看堆栈信息
bash 复制代码
docker stack ps 堆栈名称

有时候有些容器无法启动的时候,使用 docker service logs 堆栈名称 是无法看到容器启动异常报错信息的,这种情况下可以使用docker stack ps 堆栈名称 查看容器状态信息,但是这种情况下容器状态信息是被省略展示的,erro 有时候展示的不全面,这种情况下,可以使用 docker stack ps --no-trunc 堆栈名称, 加 --no-trunc 参数,不省略展示堆栈信息

4 其他

1. 查看容器基本信息
bash 复制代码
# 查看当前容器列表
docker ps -a

# 查看当前容器基本信息,如 pid,network等基本信息
docker inspect 容器id
2. 宿主机进入容器网络

有时候镜像没有指定的命令,比如 没有ping curl等命令的时候,但是又想要检查测试容器网络状态,这种情况下,可以使用 nsenter命令进入容器网络命名空间,这样就可以在不进入容器的情况下,在宿主机上使用宿主机的命令发起容器的网络请求

bash 复制代码
 nsenter -n -t `docker inspect -f '{{.State.Pid}}' 容器id `
相关推荐
玥轩_52131 分钟前
《Linux服务与安全管理》| 安装拼音输入法
linux·运维·服务器·centos·redhat·root·拼音输入法
阿巴~阿巴~31 分钟前
Linux中ELF区域与文件偏移量的关系
linux·运维·服务器
JAVA学习通2 小时前
【JavaEE进阶】使用云服务器搭建Linux环境
linux·运维·服务器
basketball6162 小时前
Linux C 多线程基本操作
linux·运维·c语言·ubuntu
芥子沫2 小时前
ROS 与 Ubuntu 版本的对应关系
linux·运维·ubuntu
苦逼IT运维3 小时前
Jenkins 不同节点间文件传递:跨 Job 与 同 Job 的实现方法
linux·运维·ci/cd·jenkins·运维开发
杰克逊的日记3 小时前
大数据集群运维常见的一些问题以及处理方式
大数据·运维·gpu·算力
JIAKSK3 小时前
宝塔利用 Git + WebHook 实现Vitepress自动部署
运维·vitepress
m0_694845573 小时前
服务器系统时间不准确怎么办?
linux·运维·服务器·游戏·云计算
专注API从业者4 小时前
自动化商品监控:利用淘宝API开发实时价格库存采集接口
大数据·运维·前端·数据库·数据挖掘·自动化