本課程經過對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