2021.3.4docker项目实战

1.需要掌握的知识点

  • 认识docker
  • docker常用命令
  • 预习docker录播课程

1.1环境准备:docker安装

参考 Docker环境安装配置 20

1.2所需镜像

docker pull jenkins
docker pull mysql
docker pull bitnami/testlink
docker pull selenium/node-chrome-debug:3.7.1-beryllium
docker pull selenium/hub:3.7.1-beryllium
docker pull prom/mysqld-exporter
docker pull registry:2
docker pull prom/prometheus
docker pull prom/node-exporter

1.3私有镜像

链接:https://pan.baidu.com/s/17LoVXi3MKoX4qp0d5isY3Q 8
提取码:cc61

2. docker实战一

学习如何使用docker搭建常见的测试服务(grid,普罗米修斯)

2.1课程大纲

  1. 使用docker selenium 搭建分布式UI自动化实践(基于grid的解决方案)
  2. 使用docker搭建基于普罗米修斯的监控体系。

2.2Grid hub和node启动脚本

docker run --name=hub -p 5001:4444 -e GRID_TIMEOUT=0 -e GRID_THROW_ON_CAPABILITY_NOT_PRESENT=true -e GRID_NEW_SESSION_WAIT_TIMEOUT=-1 -e GRID_BROWSER_TIMEOUT=15000 -e GRID_TIMEOUT=30000 -e GRID_CLEAN_UP_CYCLE=30000 -d selenium/hub:3.7.1-beryllium

docker run --name=chrome -p 5902:5900 -e NODE_MAX_INSTANCES=6 -e NODE_MAX_SESSION=6 -e NODE_REGISTER_CYCLE=5000 -e DBUS_SESSION_BUS_ADDRESS=/dev/null -v /dev/shm:/dev/shm --link hub -d selenium/node-chrome-debug:3.7.1-beryllium

java demo程序
WebDriverContainer webDriverContainer = new WebDriverThreadLocalContainer();
        Configuration.screenshots = false;
        webDriverContainer.clearBrowserCache();

        Configuration.browser = "chrome";
        Configuration.remote = "http://k8s.testing-studio.com:5001/wd/hub";

        String baseURL = "http://k8s.testing-studio.com:8999/";

        com.codeborne.selenide.Selenide.open(baseURL);

        $(byText("Welcome Gaofei!")).should(Condition.visible);

3.自我课上笔记

分布式:多个集群,多台机器

 

selenium grid只支持web端的UI层(因为测web启动浏览器特别耗cpu)

接口不需要做分布式,因为接口只是消耗的带宽,直接作用于服务器

虚拟机用的真实的IP,doker用的虚拟的IP,对于容器来说,环境变量就是参数

面试1:--link

面试2:为什么selenium-grid不支持ie浏览器?因为liux启动不了IE,而doker是用linux的内核

面试3:使用doker可以做操作系统的兼容性测试吗?不能,因为操作系统就是内核,所有启动在宿主机上doker,都是使用的宿主机的内核,都是一样的内核,也就是一样的操作系统;即使启动时用的不同的镜像、centos和rethat

            (注意看得见、摸得着的都是软件,不是操作系统)

            注意:doker可以做浏览器的兼容性测试

面试4:什么是doker?doker是个骗子,容器就是宿主机上的一个进程

linux是用namespace來隔离的

linux的名称空间是什么?命名空间可以包含变量、函数、结构体以及类等;命名空间是一个作用域,为了防止命名冲突。不同命名空间内可以有相同名字的成员;

2. 虚拟网卡可以打破docker之间的隔离,成对出现,V1无条件的转发给V2,多个docker之间的通信用网桥bridge来广播

   虚拟机是真实的网络,可以放到路由里的

 

3.brige网络模式

 

 

 docker几乎可以打破所有的边界:网络、进程、目录。。。

--link:向容器的环境变量里注入参数

--net=container:共用网络

3.contaner模式:就是当起一个docker时,共用其他容器的网络

 

 4.host模式:就是当起一个docker时,使用宿主机的网络

4.使用dockerfile制作镜像

4.1课程大纲

  1. docker commit和dockerfile的使用:dockerfile轻量级,可记录,可复现,使得镜像的开发和维护更容易
  2. 多from指令的使用方式
  3. 分层镜像系统的原理

面试题:

1.

2.镜像减肥:镜像层不可修改,容器是增量的方式,如果启动容器后在容器里删镜像层,那越删文件,镜像越大,因为产生了新的记录;所以只能在dockerfile里减

4.2命令

from单继承,只能继承一个基础镜像

一个run指令1个shell拼接命令

 

 

一个run指令多个shell命令,下列只是在调试过程中使用,一个run指令就是一层镜像,镜像越多,io损耗越多

 

 

 

 如果要设计不重复的组件的镜像的话,适当的run是可以接受的把,不用太考虑最大镜像层数限制和io性能的问题

 

 

 

docker run --name=prometheus -d -p 9090:9090 -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

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

global:
  scrape_interval:     15s
  evaluation_interval: 15s

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

5.课堂作业

编写一个基于后端服务的dockerfile
代码地址:https://github.com/ycwdaaaa/holmes.git

答案:
dockerfile:

FROM centos:7

ADD entrypoint.sh /root
ADD requirements.txt /root
WORKDIR /root
USER root

RUN yum install -y epel-release \
    && yum install -y python34 git python34-setuptools python34-devel.x86_64 \
    && easy_install-3.4 pip \
    && yum install -y gcc \
    && yum install -y soci-mysql-devel.x86_64 \
    && ln -s /usr/local/mysql/bin/mysql /usr/bin \
    && pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/


ENTRYPOINT ["/root/entrypoint.sh"]

启动脚本:

#!/bin/bash

mkdir -p /opt/web
cd /opt/web
git clone https://github.com/ycwdaaaa/holmes.git
cd holmes
pip3 install -r requirement.txt -i https://mirrors.aliyun.com/pypi/simple/
/usr/bin/python3.4 app.py


while true
do
   sleep 10
done

搭建镜像仓库:

docker pull registry:2
docker run -d -p 5000:5000 -v /usr/local/registry:/var/lib/registry --restart=always --name registry registry:2
docker pull busybox
docker tag busybox localhost:5000/bosybox:v1.0
docker push localhost:5000/bosybox:v1.0
curl http://localhost:5000/v2/_catalog

多FROM指令

FROM centos:6.9 as builder

# 下载基础工具
RUN echo "this is a test" > gaofei.tar


FROM busybox

WORKDIR /root

COPY --from=builder gaofei.tar .

 

posted @ 2021-03-04 22:12  方园FPP  阅读(202)  评论(0编辑  收藏  举报