docker 常见命令使用记录
1. swarm 集群
1. 集群创建
# 创建集群管理节点, --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. 集群网络创建
# --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
filebeat.inputs:
- type: filestreamenabled: truepaths:- /data/logs/*/*.logparsers:- multiline:type: patternpattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}'negate: truematch: aftermax_lines: 500timeout: 10sprocessors:- dissect:tokenizer: "%{log_timestamp} | %{log_level} | %{namespace} | %{file_path} | %{method} | %{track_id} | %{message}"field: "message"max_lines: 500target_prefix: ""overwrite_keys: true- timestamp:field: log_timestamplayouts:- '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. 创建配置
docker config create filebeat-config /data/docker/filebeat/config/filebeat.yml
3. 使用docker配置文件
version: '3.8'networks:base_service_database-net:external: trueservices:filebeat:container_name: filebeatimage: elastic/filebeat:7.17.7restart: alwaysnetworks:- base_service_database-netdeploy:mode: globalconfigs:- source: filebeat-configtarget: /usr/share/filebeat/filebeat.yml # 配置文件挂载路径volumes:- type: bindsource: /data/logs/target: /data/logs/- type: bindsource: /var/run/docker.socktarget: /var/run/docker.sock- type: bindsource: /var/lib/docker/containerstarget: /var/lib/docker/containersread_only: trueconfigs:filebeat-config:file: /data/docker/filebeat/config/filebeat.yml # 使用本地的 filebeat.yml 文件
3 集群堆栈服务
1. 启动堆栈服务
# 可以通过配置文件批量启动服务,类似docker-compose 效果,
# 在docker swarm中,可以根据配置文件中的配置将容器分发给其他的work节点进行启动服务
docker stack deploy -c filebeat.yml filebeat
2. 查看当前服务列表
docker service ls
3. 删除所有服务
docker service ls -q | xargs -r docker service rm
4. 查看服务日志
docker service logs 服务名称/服务id
5.查看当前堆栈列表
docker stack ls
6. 查看堆栈信息
docker stack ps 堆栈名称
有时候有些容器无法启动的时候,使用 docker service logs 堆栈名称
是无法看到容器启动异常报错信息的,这种情况下可以使用docker stack ps 堆栈名称 查看容器状态信息,但是这种情况下容器状态信息是被省略展示的,erro 有时候展示的不全面,这种情况下,可以使用 docker stack ps --no-trunc 堆栈名称
, 加 --no-trunc 参数,不省略展示堆栈信息
4 其他
1. 查看容器基本信息
# 查看当前容器列表
docker ps -a# 查看当前容器基本信息,如 pid,network等基本信息
docker inspect 容器id
2. 宿主机进入容器网络
有时候镜像没有指定的命令,比如 没有ping curl等命令的时候,但是又想要检查测试容器网络状态,这种情况下,可以使用 nsenter
命令进入容器网络命名空间,这样就可以在不进入容器的情况下,在宿主机上使用宿主机的命令发起容器的网络请求
nsenter -n -t `docker inspect -f '{{.State.Pid}}' 容器id `