docker-compose 使用记录

个人体会

  • 1,首先呢,docker如果可以用起来,对于部署服务是非常方便的,不用每次都去配置环境(小公司很多环境都是自己来的话是非常难受的)

  • 2, docker-compose除开这样初始化配置可以省事,还有一个就是有docker-compose的命令也是特别方便的具体的话大家可以Google搜一下(因为最近用的少。。。就不写了)

  • 3, 其中大部分配置是比较好理解的,我就说一个因为我们部署在docker中的服务需要捕捉网卡的流量,所以研究了一下的一个配置 我们设置成的是host模式,这样和主机共享网卡,就意味着在docker中的程序可以直接监听网卡的流量,参考链接:https://www.jianshu.com/p/270125484301

  • ports:端口映射,故名思意,就是把容器中对外的端口和宿主机进行映射,但是这其中又涉及到不同的映射方式:

    1. host模式
      众所周知,Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络等。一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、Iptable规则等都与其他的Network Namespace隔离。一个Docker容器一般会分配一个独立的Network Namespace。但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
      例如,我们在10.10.101.105/24的机器上用host模式启动一个含有web应用的Docker容器,监听tcp80端口。当我们在容器中执行任何类似ifconfig命令查看网络环境时,看到的都是宿主机上的信息。而外界访问容器中的应用,则直接使用10.10.101.105:80即可,不用任何NAT转换,就如直接跑在宿主机中一样。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

    2. container模式
      在理解了host模式后,这个模式也就好理解了。这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。

    3. none模式
      这个模式和前两个不同。在这种模式下,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。

    4. bridge模式
      bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。下面着重介绍一下此模式。

      version: ‘2’
      services:
      nebula-db:
      image: mariadb # 镜像名
      container_name: nebula-db # 容器名
      volumes:
      - ./data/mariadb:/var/lib/mysql # 数据挂载地址
      environment: # mysql的变量设置
      - MYSQL_ROOT_PASSWORD=threathunter
      - MYSQL_USER=nebula
      - MYSQL_PASSWORD=threathunter

      nebula-redis:
      image: redis
      container_name: nebula-redis
      ports:
      - “16379:6379” # 端口映射
      volumes:
      - ./logs/redis:/data/logs/redis
      - ./data/redis:/data/redis
      - ./conf/redis/redis.conf:/etc/redis/redis.conf
      command: redis-server /etc/redis/redis.conf # 容器启动后默认执行的命令

      nebula-aerospike:
      image: aerospike
      container_name: nebula-aerospike
      volumes:
      - ./data/aerospike:/data/aerospike
      - ./conf/aerospike/aerospike.conf:/opt/aerospike/etc/aerospike.conf
      - ./logs/aerospike:/data/logs/aerospike
      command: asd --foreground --config-file /opt/aerospike/etc/aerospike.conf

      nebula:
      build:
      context: .
      image: threathunterx/nebula:latest
      container_name: nebula
      restart: always
      ports:
      - “9001:9001”
      environment:
      - Xms=1g
      - Xmx=1g
      - Xmn=256m
      volumes:
      - ./conf/nebula:/etc/nebula

      • ./logs/db_writer:/data/logs/db_writer

      • ./logs/java-web:/data/logs/java-web

      • ./logs/labrador:/data/logs/labrador

      • ./logs/labrador:/data/logs/monitor

      • ./logs/offline:/data/logs/offline

      • ./logs/online:/data/logs/online

      • ./logs/query_web:/data/logs/query_web

      • ./logs/sniffer:/data/logs/sniffer

      • ./logs/utils:/data/logs/utils

      • ./logs/web:/data/logs/web

      • ./logs/crond:/data/logs/crond

      • ./data/tmp:/data/tmp

      • ./data/config:/data/config

      • ./data/log_query:/data/log_query

      • ./data/persistent:/data/persistent
        depends_on: # 基于什么服务,要以下服务先启动后才能启动

      • nebula-db

      • nebula-redis

      • nebula-aerospike
        external_links: # 链接名

      • nebula-db:mysql

      • nebula-redis:redis

      • nebula-aerospike:aerospike

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值