- 参考链接:https://docs.docker.com/compose/compose-file/#external_links
- 参考链接(中文):https://www.jianshu.com/p/2217cfed29d7
个人体会
-
1,首先呢,docker如果可以用起来,对于部署服务是非常方便的,不用每次都去配置环境(小公司很多环境都是自己来的话是非常难受的)
-
2, docker-compose除开这样初始化配置可以省事,还有一个就是有docker-compose的命令也是特别方便的具体的话大家可以Google搜一下(因为最近用的少。。。就不写了)
-
3, 其中大部分配置是比较好理解的,我就说一个因为我们部署在docker中的服务需要捕捉网卡的流量,所以研究了一下的一个配置 我们设置成的是host模式,这样和主机共享网卡,就意味着在docker中的程序可以直接监听网卡的流量,参考链接:https://www.jianshu.com/p/270125484301
-
ports:端口映射,故名思意,就是把容器中对外的端口和宿主机进行映射,但是这其中又涉及到不同的映射方式:
-
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转换,就如直接跑在宿主机中一样。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。 -
container模式
在理解了host模式后,这个模式也就好理解了。这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。 -
none模式
这个模式和前两个不同。在这种模式下,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。 -
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=threathunternebula-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.confnebula:
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
-
-