课堂作业:使用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 容器的
- linux 名称空间: 隔离网络, 进程名称空间, 文件目 xxxxxx
- cgroups: 隔离资源(CPU, 内存, IO)
- 联合文件系统: 定制镜像中的目录(你只能看到联合文件系统规定的目录)
创建一个容器的时候:
- 为容器创建一个进程(选择网络,进程,文件的名称空间. 默认是:创建一个新的)
在k8s中做混沌工程(故障演练)中模拟网络故障的步骤:
- 通过k8s的接口,找到容器的所在节点和contianerid
- 找到对应的节点,发送请求,docker inspect命令 找到 pid
- nsenter命令进入容器的网络明湖曾空间
- iptalbes xxxxx output drop
针对这个容器的网络丢包/断网故障 模拟成功
PS:docker 容器启动时 是关闭了特权模式的。 并且容器中很可能没有安装iptables命令。 所以不能依赖于docker exec命令进入容器来模拟故障
课堂作业:
- 使用docker 启动一个mysql
- 部署普罗米修斯, 并启动一个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
- host模式: 容器必须使用宿主机网络。 一个host上有多个容器, 但是这个多个容器中必须使用宿主机网络配置。 比如如果需要ssh key作为认证方式。 就可以在host上把sshkey设置好。 然后使用host网络模式。
- container模式:
a. 部署测试环境: 前端,后端(1~n个),mysql。 维护大量的端口映射列表。 本质上我们只希望暴露一个web服务个用户。 我们希望各个服务之间能用localhost模式启动。 用container模式连接容器。 这样方便环境部署的时候的配置管理
b. 故障注入或者debug: 有些时候业务容器不具备一些网络debug命令:iptalbes, tc, ifconfig。 使用container模式启动我们自己的工具容器,然后使用这些命令。 PS:因为网络名称空间是可共享的 - bridge 模式: 默认模式, 没有特殊的理由, 基本都是这个模式 使用端口映射来暴露容器网络。