zoukankan      html  css  js  c++  java
  • doker基本使用

    Docker与虚拟机的区别

    • docker和虚拟机最大的不同,docker共用宿主机的内核,虚拟机中每个虚拟机中有单独的内核虚拟出来,如上图所示;
    • docker不能做后端兼容性测试,因为其没有独立的虚拟内核
    • 在系统上操作的任何东西都不是直接调用内核的,都需要经过系统调用,使用docker安装了操作系统的镜像软件,感觉像是在操作系统上运行,因此即使用的是Centos镜像,内核也有可能是Ubantu的,如下图所示:

    Docker的优缺点

    优点

    • 轻量级:因为docker不用虚拟化内核,直接共享宿主机的内核,所以节省了很多资源,在同样的资源下可以启动更多的软件,同时启动速度也更快

    缺点

    • 优点即缺点: docker的优点也是它的缺点,正是因为所有的容器都共享一个内核,如果其中一个容器将内核给"搞坏了",那所有的容器就都无法正常工作了

    Docker的隔离-三项关键技术

    • NameSpace
      每启动一个docker进程就会分配一个网络名称空间,进行网络的隔离
    • 联合文件系统
      能够给每一个容器提供单独的视图,达到文件目录的隔离,这样就不会访问到其他容器的文件
    • Cgroups
      资源隔离,限定当前进程使用资源大小,达到资源的隔离

    镜像管理命令

    • docker pull {image_name} 拉取镜像
    • docker push {image_name} 推送镜像
    • docker images查看当前机器的所有镜像
    • docker rmi {image_name} 删除当前机器的⼀镜像
    • docker tag {source_images_name:tag your_image_name:tag} 为一个镜像打tag
    • docker save {image_name} > {new_image_name}.tar 将一个镜像打包成一个tar包,可供无网络设备使用
    • docker load < {image_name}.tar 解压一个镜像tar包

    容器管理

    • docker run --name={your_name} --d {image_name} 运行容器
    • docker ps -a 查看当前所有容器
    • docker stop {container_name} 停止容器
    • docker kill (container_name) 杀死容器
    • docker rm -f {container_name} 强制删除容器
    • docker start {container_name} 启动容器
    • docker restart {container_name} 重启容器
    • sudo docker cp host_path containerID:container_path 从主机复制到容器
    • sudo docker cp containerID:container_path host_path 从容器复制到主机

    容器运行命令的一些参数

    • --name 指定容器名称
    • -d 后台运行
    • -port 指定端⼝映射规则
    • --network 指定容器器运行的⽹路模式
    • -v 指定需要挂载的数据卷
    • -env 指定需要传递给容器的环境变量

    查看信息相关

    • docker logs -f {容器名称} 查看容器⽇日志
    • docker info 查看docker服务的信息
    • docker inspect {容器名称} 查看容器的元数据

    docker搭建Jenkins时区问题

    • 1.通过dcoker exec -it jenkins bash 进入Jenkins容器 ,执行:echo 'Asia/Shanghai' > /etc/timezone
    • 2.启动参数加--env JAVA_OPTS="-Duser.timezone=GMT+08"
    docker run --name myjenkins -itd -p 8001:8080 -p 50000:50000 -v /home/test/jenkins_home:/var/jenkins_home  --env JAVA_OPTS="-Duser.timezone=GMT+08" jenkins
    /home/test/jenkins_home 是本地新建的目录,如果在Mac需要给设置权限,chmod 777 /home/test/jenkins_home
    注意挂载权限:sudo chown -R 1000:1000 /home/test/jenkins_home
     需要修改下目录权限, 因为当映射本地数据卷时,/home/test/ jenkins_home目录的拥有者为root用户,而容器中jenkins user的uid为1000
    sudo chown -R 1000 /home/test/jenkins_home/
          
    

    搭建MySQL

    docker run --name some-mysql -v /hometest/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1qaz9ol. -p 8888:3306 -d mysql:5.7
    其中1qaz9ol. 为数据库root的密码
    

    selenium远程部署

    1. docker pull selenium/node-chrome-debug:3.7.1-beryllium
    2. docker pull selenium/hub:3.7.1-beryllium
    
    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
    
    node_exporter监控系统资源
    后台启动 nohup ./node_exporter >>node_exporter.log 2>&1 &
    

    测试脚本

    from threading import Thread
    from selenium import webdriver
    from time import sleep, ctime
    
    
    # 测试用例
    def baidu(search=None):
        # print('start:%s,' % browser)
        # print('browser:%s' % browser)
        # if browser == 'chrome':
        #     driver = webdriver.Chrome()
        # elif browser == 'firefox':
        #     driver = webdriver.Firefox()
        # else:
        firefox_capabilities = {
            "browserName": "chrome",
            "version": "",
            "platform": "ANY",
            "javascriptEnabled": True,
            "marionette": True,
        }
        browser = webdriver.Remote("http://119.3.89.184:5001/wd/hub",
                                   desired_capabilities=firefox_capabilities)  # 注意端口号4444是我们上文中映射的宿主机端口号
        # browser.get("http://www.baidu.com")
        # driver = webdriver.Chrome()
            # print('参数有误')
    
        browser.get('http://www.baidu.com')
        browser.find_element_by_id('kw').send_keys(search)
        browser.find_element_by_id('su').click()
        sleep(3)
        browser.quit()
    
    
    if __name__ == '__main__':
        print("主线程开始======{}".format(ctime()))
        lites = {
            'chrome': 'threading',
            'firefox': 'python',
            'java': 'java'
        }  # 启动浏览器,指定每个浏览器搜索的内容
        threads = []
        files = range(len(lites))
        # 创建多线程
        for search in lites.values():  # 字典循环
            print(search)
            t = Thread(target=baidu, args=(search,))
            threads.append(t)
        # 启动多线程
        for t in files:
            threads[t].start()
        for t in files:
            threads[t].join()
        print("主线程结束======{}".format(ctime()))
    
    

    搭建prometheus

    docker run --name prometheus -d -p 9090:9090 -v `pwd`/prometheus.yml:/etc/prometheus/prometheus.yml  prom/prometheus
    

    prometheus.yml文件

    global:
      scrape_interval:     15s
      evaluation_interval: 15s
    
    
    rule_files:
      - rules/*.rules
    
    scrape_configs:
      - job_name: 'prometheus'
        static_configs:
        - targets: ['localhost:9090']
      - job_name: 'node_exporter'
        static_configs:
        - targets: [ '192.168.0.103:9100']
      - job_name: 'mysql'
        static_configs:
        - targets: ['docker.testing-studio.com:9104', '119.3.89.184:9104']
    

    启动grafana

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

    启动mysqld-exporter

    docker run -d --name mysql-exporter -p 9104:9104 -e DATA_SOURCE_NAME="root:1qaz9ol.@(docker.testing-studio.com :8888)/mysql" prom/mysqld-exporter
    
  • 相关阅读:
    ASP.NET中如何防范SQL注入式攻击?(转)
    打开D盘时速度奇慢?
    Visual Studio 2008 下载地址
    如何利用XML文件,做为配置参数?
    如何将一个表中的数据INSERT INTO 到另一个表中?
    拖延交货或惹万人诉讼 消费者称戴尔态度恶劣
    NHibernate Linq中Null值排序的解决方法
    NHibernate3剖析:Query篇之NHibernate.Linq标准查询
    Nhibernate出现No row with the given identifier exists问题的产生原因及解决方法
    Nhibernate使用动态Expression的问题解决
  • 原文地址:https://www.cnblogs.com/an5456/p/11967706.html
Copyright © 2011-2022 走看看