docker核心技術原理和應用

本課程經過對Docker核心技術的講解以及利用Docker搭建單主機ELK系統實戰項目的演示,使你掌握Docker的各個核心組件、功能及其原理,掌握Docker的特性,並能夠熟悉應用Docker。node

6 Docker網絡

1.Docker網絡管理階段課程簡介

2.瞭解Docker的網絡管理

Docker有五種網絡驅動模式
bridge network 模式(網橋):默認的網絡模式。相似虛擬機的nat模式
host network 模式(主機):容器與宿主機之間的網絡無隔離,即容器直接使用宿主機網絡
None network 模式:容器禁用全部網絡。
Overlay network 模式(覆蓋網絡): 利用VXLAN實現的bridge模式
Macvlan network 模式:容器具有Mac地址,使其顯示爲網絡上的物理設備
好比swarm集羣,使用overlay的模式redis

3.Docker網絡管理之網絡查看

4.Docker網絡管理之網絡建立

5.Docker網絡管理之網絡刪除

6.Docker網絡管理之網絡詳細信息查看

7.Docker網絡管理之網絡使用

8.Docker網絡管理之網絡鏈接與斷開

bridge能夠鏈接,而且鏈接多個
host不能斷開和鏈接
null能夠斷開和鏈接
Macvlan 容器一樣能夠鏈接多個,也能夠與bridge混合
Overlay網絡不能斷開和鏈接docker

9.Docker網絡模式之網絡模式簡介

10.Docker網絡模式之bridge網絡原理

image.png

11.Docker網絡模式之定製bridge網絡

image.png
image.png
建立好一個bridge後,他的網關等於宿主機的一個veth pair虛擬網絡設備
image.png
好比建立一個my-bridge的 bridge的網絡
再次建立一個容器設置網絡爲my-briage
image.pngshell

12.Docker網絡模式之bridge網絡的端口映射

image.png

docker run -id -p 外部端口ip(可無):端口(可無):容器端口

13.Docker網絡模式之host網絡模式原理

image.png

#經過host的模式建立一個redis的容器
docker run -id --network host redis
#經過host的模式建立一個centos的容器
docker run -id --network host centos:7

14.Docker網絡模式之Container網絡模式原理

image.png
表示和其餘容器經過相似host的方式鏈接
image.png
經過建立新的按照container網絡模式的容器,由於redis的端口衝突因此沒法啓動bootstrap

15.Docker網絡模式之none網絡介紹

image.png

16.Docker網絡模式之overlay網絡簡介

17.Docker網議棧工做流程瞭解

18.Docker網絡模式之overlay網絡模式實現原理

image.png

19.Docker網絡模式之overlay網絡的應用場景

image.png
image.png

20.Docker網絡模式之macvlan網絡模式原理

image.png

21.Docker網絡管理階段總結

image.png

9 Docker核心技術之Dockerfile

1.Dockerfile課程介紹

2.瞭解Dockerfile

3.Dockerfile的撰寫示範

4.利用Dockerfile構建鏡像

5.Dockerfile構建過程的特徵

在同一步驟下若是內容沒有更改的話,則不從新執行ubuntu

6.Docekrfile構建的鏡像的特徵

dockerfile每一行的命令本地都會構建一個鏡像,一層一層的引用
image.pngcentos

7.Dockerfile的命令與鏡像層級的關係介紹

image.png
image.png

8.Dockerfile配置說明

FROM: 指定基礎鏡像
RUN: 構建鏡像過程當中須要執行的命令。能夠有多條。docker build
CMD:添加啓動容器時須要執行的命令。多條只有最後一條生效。能夠在啓動容器時被覆蓋和修改。
ENTRYPOINT:同CMD,但這個必定會被執行,不會被覆蓋修改。
:爲鏡像添加對應的數據。
MLABELAINTAINER:代表鏡像的做者。將被遺棄,被LABEL代替。
EXPOSE:設置對外暴露的端口。
ENV:設置執行命令時的環境變量,而且在構建完成後,仍然生效
ARG:設置只在構建過程當中使用的環境變量,構建完成後,將消失
ADD:將本地文件或目錄拷貝到鏡像的文件系統中。能解壓特定格式文件,能將URL做爲要拷貝的文件
COPY:將本地文件或目錄拷貝到鏡像的文件系統中。
VOLUME:添加數據卷
USER:指定以哪一個用戶的名義執行RUN, CMD 和ENTRYPOINT等命令
WORKDIR:設置工做目錄服務器

9.Dockerfile配置之RUN

10.Dockerfile配置之shell格式命令與exec格式命令區別

11.Dockerfile配置之CMD與ENTRYPOINT

12.Dockerfile配置之LABEL與MAINTAINER

13.Dockerfile配置之EXPOSE

14.Dockerfile配置之ENV與ARG

15.Dockerfile配置之ADD與COPY

16.Dockerfile配置之VOLUME

image.png

查看全部的數據卷
docker volume ls

17.Dockerfile配置之USER和WORKDIR

18.Dockerfile配置之其餘配置

19.Dockerfile階段總結

10 Docker核心技術之Docker-Compose

1.Docker Compose課程介紹

2.Docker Compose工做原理介紹

3.Docker Compose安裝

4.瞭解Docker Compose File

5.Docker Compose File配置概覽

6.部署小型wen項目之項目代碼實現

7.部署小型wen項目之Dockerfile實現

8.部署小型wen項目之docker-compose文件撰寫

docker compose config查看yml文件是否有語法的問題
docker compose down關閉

9.部署小型wen項目之docker-compose啓動

10.部署小型wen項目之數據卷掛載

#改命令會刪除全部的數據
docker compose down關閉

image.png

11.單機ELK部署之ELK介紹

12.單機ELK部署之compose file撰寫思路

13.單機ELK部署之elasticsearch的compose file撰寫

14.單機ELK部署之啓動elasticsearch

#查看啓動的日誌
docker-compose logs

image.png

報錯信息以下

  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

  重啓虛擬機

15.單機ELK部署之加入Logstash

16.單機ELK部署之加入kibana實現完成部署(一)

17.單機ELK部署之加入kibana實現完成部署(二)

18.單機ELK部署之總結

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:

19.多主機ELK部署之swarm介紹

image.png
查看swarm信息

docker swarm init

查看節點
image.png

docker node ls

另外一臺服務器加入主節點
image.png
具體的步驟顯示爲:
image.png

20.多主機ELK部署之跨主機下的compose file工做原理

deploy模式下,如下的配置將被忽略

NOT SUPPORTED FOR 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等

21.多主機ELK部署之步驟分析

22.多主機ELK部署之compose file中deploy參數概覽

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

23.多主機ELK部署之改寫compose file

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端口便可

24.多主機ELK部署之啓動與調試bug(一)

啓動容器
image.png

docker stack deploy -c docker-compose.yaml elk

部署完成之後查看多節點的全部服務

docker service ls

image.png

docker service logs

好比查看某個服務的啓動日誌狀況

docker service logs elk_elasticsearch -f

25.多主機ELK部署之啓動與調試bug(二)

刪除集羣服務,比關閉集羣方便,這樣的刪除等過一會容器將都被刪除

docker stack rm elk

26.多主機ELK部署之總結

查看集羣中某項服務的日誌
image.png

docker service logs (service names) -f

27.Docker Compose階段課程總結

相關文章
相關標籤/搜索