测开11期:docker实战

课堂作业:使用docker搭建一个可访问的,可持久化数据的jenkins 服务

命令列表:
镜像管理: docker pull, docker images
容器管理:docker ps, docker rm -f, docker logs -f , docker stop.
运行容器: docker run --name gaofeijenkins -d -v host_path:container_path -p host_port:container_port image_name

镜像准备:jenkins, testlink, maradb, mysql:5.7, conan, holmes, 普罗米修斯, nginx,wordpress
软件准备:docker-compose:Overview

课堂笔记:

网络名称空间: 用来隔离docker 容器的

  1. linux 名称空间: 隔离网络, 进程名称空间, 文件目 xxxxxx
  2. cgroups: 隔离资源(CPU, 内存, IO)
  3. 联合文件系统: 定制镜像中的目录(你只能看到联合文件系统规定的目录)

创建一个容器的时候:

  1. 为容器创建一个进程(选择网络,进程,文件的名称空间. 默认是:创建一个新的)

在k8s中做混沌工程(故障演练)中模拟网络故障的步骤:

  1. 通过k8s的接口,找到容器的所在节点和contianerid
  2. 找到对应的节点,发送请求,docker inspect命令 找到 pid
  3. nsenter命令进入容器的网络明湖曾空间
  4. iptalbes xxxxx output drop
    针对这个容器的网络丢包/断网故障 模拟成功
    PS:docker 容器启动时 是关闭了特权模式的。 并且容器中很可能没有安装iptables命令。 所以不能依赖于docker exec命令进入容器来模拟故障

课堂作业:

  1. 使用docker 启动一个mysql
  2. 部署普罗米修斯, 并启动一个mysql的exporter。 配置监控mysql
    普罗米修斯的配置文件:
global:
  scrape_interval:     15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
  - static_configs:
    - targets:
      - localhost:9093

rule_files:
  - rules/*.rules

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'node_exporter'
    static_configs:
    - targets: ['docker.testing-studio.com:9100']
  - job_name: 'mysql'
    static_configs:
    - targets: ['docker.testing-studio.com:9104']
  - job_name: 'cadvisor'
    static_configs:
    - targets: ['docker.testing-studio.com:8091']

启动命令:docker rm -f prometheus
docker run --name=prometheus -d -p 9090:9090 -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

mysql exporter: 在dockerhub 搜

grafana:docker run --name grafana -d -p 8000:3000 grafana/grafana

  1. host模式: 容器必须使用宿主机网络。 一个host上有多个容器, 但是这个多个容器中必须使用宿主机网络配置。 比如如果需要ssh key作为认证方式。 就可以在host上把sshkey设置好。 然后使用host网络模式。
  2. container模式:
    a. 部署测试环境: 前端,后端(1~n个),mysql。 维护大量的端口映射列表。 本质上我们只希望暴露一个web服务个用户。 我们希望各个服务之间能用localhost模式启动。 用container模式连接容器。 这样方便环境部署的时候的配置管理
    b. 故障注入或者debug: 有些时候业务容器不具备一些网络debug命令:iptalbes, tc, ifconfig。 使用container模式启动我们自己的工具容器,然后使用这些命令。 PS:因为网络名称空间是可共享的
  3. bridge 模式: 默认模式, 没有特殊的理由, 基本都是这个模式 使用端口映射来暴露容器网络。
1 个赞