本课程经过对Docker核心技术的讲解以及利用Docker搭建单主机ELK系统实战项目的演示,使你掌握Docker的各个核心组件、功能及其原理,掌握Docker的特性,并能够熟悉应用Docker。node
Docker有五种网络驱动模式
bridge network 模式(网桥):默认的网络模式。相似虚拟机的nat模式
host network 模式(主机):容器与宿主机之间的网络无隔离,即容器直接使用宿主机网络
None network 模式:容器禁用全部网络。
Overlay network 模式(覆盖网络): 利用VXLAN实现的bridge模式
Macvlan network 模式:容器具有Mac地址,使其显示为网络上的物理设备
好比swarm集群,使用overlay的模式redis
bridge能够链接,而且链接多个
host不能断开和链接
null能够断开和链接
Macvlan 容器一样能够链接多个,也能够与bridge混合
Overlay网络不能断开和链接docker
建立好一个bridge后,他的网关等于宿主机的一个veth pair虚拟网络设备
好比建立一个my-bridge的 bridge的网络
再次建立一个容器设置网络为my-briageshell
docker run -id -p 外部端口ip(可无):端口(可无):容器端口
#经过host的模式建立一个redis的容器 docker run -id --network host redis #经过host的模式建立一个centos的容器 docker run -id --network host centos:7
表示和其余容器经过相似host的方式链接
经过建立新的按照container网络模式的容器,由于redis的端口冲突因此没法启动bootstrap
在同一步骤下若是内容没有更改的话,则不从新执行ubuntu
dockerfile每一行的命令本地都会构建一个镜像,一层一层的引用centos
FROM: 指定基础镜像
RUN: 构建镜像过程当中须要执行的命令。能够有多条。docker build
CMD:添加启动容器时须要执行的命令。多条只有最后一条生效。能够在启动容器时被覆盖和修改。
ENTRYPOINT:同CMD,但这个必定会被执行,不会被覆盖修改。
:为镜像添加对应的数据。
MLABELAINTAINER:代表镜像的做者。将被遗弃,被LABEL代替。
EXPOSE:设置对外暴露的端口。
ENV:设置执行命令时的环境变量,而且在构建完成后,仍然生效
ARG:设置只在构建过程当中使用的环境变量,构建完成后,将消失
ADD:将本地文件或目录拷贝到镜像的文件系统中。能解压特定格式文件,能将URL做为要拷贝的文件
COPY:将本地文件或目录拷贝到镜像的文件系统中。
VOLUME:添加数据卷
USER:指定以哪一个用户的名义执行RUN, CMD 和ENTRYPOINT等命令
WORKDIR:设置工做目录服务器
查看全部的数据卷 docker volume ls
docker compose config查看yml文件是否有语法的问题 docker compose down关闭
#改命令会删除全部的数据 docker compose down关闭
#查看启动的日志 docker-compose logs
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]网络
1.切换到root用户,执行命令:app
sysctl -w vm.max_map_count=262144
2.查看结果:
sysctl -a|grep vm.max_map_count
3.显示:
vm.max_map_count = 262144
在/etc/sysctl.conf文件最后添加一行:
vm.max_map_count=262144
重启虚拟机
version: '2.2' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:6.2.4 container_name: elasticsearch environment: - cluster.name=docker-cluster - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - esdata1:/usr/share/elasticsearch/data ports: - 9200:9200 networks: - esnet #根据内存大小可省略 elasticsearch2: image: docker.elastic.co/elasticsearch/elasticsearch:6.2.4 container_name: elasticsearch2 environment: - cluster.name=docker-cluster #限制使用内存 - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" # 数据同步 - "discovery.zen.ping.unicast.hosts=elasticsearch" #限制使用内存 ulimits: memlock: soft: -1 hard: -1 volumes: - esdata2:/usr/share/elasticsearch/data networks: - esnet logstash: image: docker.elastic.co/logstash/logstash:6.2.4 environment: - "LS_JAVA_OPTS=-Xms256m -Xmx256m" container_name: logstash networks: - esnet depends_on: - elasticsearch - elasticsearch2 logstash2: image: docker.elastic.co/logstash/logstash:6.2.4 environment: - "LS_JAVA_OPTS=-Xms256m -Xmx256m" container_name: logstash2 networks: - esnet depends_on: - elasticsearch - elasticsearch2 kibana: image: docker.elastic.co/kibana/kibana:6.2.4 container_name: kibana ports: - "5601:5601" networks: - esnet depends_on: - elasticsearch - elasticsearch2 volumes: esdata1: driver: local esdata2: driver: local networks: esnet:
查看swarm信息
docker swarm init
查看节点
docker node ls
另外一台服务器加入主节点
具体的步骤显示为:
deploy模式下,如下的配置将被忽略
DOCKER STACK DEPLOY
The following sub-options (supported for docker-compose up
and docker-compose run
) are not supported for docker stack deploy
or the deploy
key.
另外还有 ulimits等
deploy: mode: replicated(此外还有global模式) replicas: 2
表示整个swarm集群中总共启动几个容器。若是两台服务器的话,每台服务器为1个容器节点
常见的配置显示
mode
version: "3.9" services: worker: image: dockersamples/examplevotingapp_worker deploy: mode: global
resources
version: "3.9" services: redis: image: redis:alpine deploy: resources: limits: cpus: '0.50' memory: 50M reservations: cpus: '0.25' memory: 20M
placement
version: "3.9" services: db: image: postgres deploy: placement: constraints: - "node.role==manager" - "engine.labels.operatingsystem==ubuntu 18.04" preferences: - spread: node.labels.zone
version大于3 这里取3.6
version: '3.6' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:6.2.4 environment: - cluster.name=docker-cluster - bootstrap.memory_lock=false - "ES_JAVA_OPTS=-Xms512m -Xmx512m" volumes: - esdata1:/usr/share/elasticsearch/data ports: - 9200:9200 networks: - esnet deploy: placement: constraints: - node.role == manager elasticsearch2: image: docker.elastic.co/elasticsearch/elasticsearch:6.2.4 environment: - cluster.name=docker-cluster - bootstrap.memory_lock=false - "ES_JAVA_OPTS=-Xms512m -Xmx512m" - "discovery.zen.ping.unicast.hosts=elasticsearch" volumes: - esdata2:/usr/share/elasticsearch/data networks: - esnet deploy: placement: constraints: - node.role == worker logstash: image: docker.elastic.co/logstash/logstash:6.2.4 environment: - "LS_JAVA_OPTS=-Xms256m -Xmx256m" networks: - esnet deploy: replicas: 2 logstash2: image: docker.elastic.co/logstash/logstash:6.2.4 environment: - "LS_JAVA_OPTS=-Xms256m -Xmx256m" networks: - esnet deploy: replicas: 2 kibana: image: docker.elastic.co/kibana/kibana:6.2.4 ports: - "5601:5601" networks: - esnet deploy: placement: constraints: - node.role == manager volumes: esdata1: driver: local esdata2: driver: local networks: esnet: driver: "overlay"
若是出现如下的错误
[root@localhost ~]# docker swarm join --token SWMTKN-1-42dhkex570et9er8d3ff2gp61drbxc1zf1eyzxxlbuibr7gtn3-5f0id35vz2qp5m9c22fm8wzmo 192.168.200.131:2377 Error response from daemon: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp 192.168.200.131:2377: connect: no route to host"
则开放主节点的2377端口便可
启动容器
docker stack deploy -c docker-compose.yaml elk
部署完成之后查看多节点的全部服务
docker service ls
docker service logs
好比查看某个服务的启动日志状况
docker service logs elk_elasticsearch -f
删除集群服务,比关闭集群方便,这样的删除等过一会容器将都被删除
docker stack rm elk
查看集群中某项服务的日志
docker service logs (service names) -f