zoukankan      html  css  js  c++  java
  • docker

    docker

    简介

    官网

    https://www.docker.com/
    Docker(轻量级虚拟机) == 运维界maven
    和虚拟机类比,一个docker容器不像是一台虚拟机,而更像是一个服务单元(进程),可以在一个服务器更低资源情况下多虚拟。
    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
    Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
    容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
    Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。
    Docker的核心概念主要包括:仓库 (远程),镜像(本地), 容器(进程)。run

    Docker 的优点

    Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

    1、快速,一致地交付您的应用程序

    Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。
    容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:

    • 您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。
    • 他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。
    • 当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。
    • 测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。
    2、响应式部署和扩展

    Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
    Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。

    3、在同一硬件上运行更多工作负载

    Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。

    安装

    cenos安装指令

    # step 1: 安装必要的一些系统工具
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    
    # Step 2: 添加软件源信息
    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    # Step 3: 更新并安装 Docker-CE
    sudo yum makecache fast
    
    sudo yum -y install docker-ce
    
    #配置镜像地址
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://1b1qa7l6.mirror.aliyuncs.com"]
    }
    EOF
    
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    ubuntu安装

    #删除以前旧的版本
    sudo apt-get remove docker docker-engine docker.io
    sudo apt-get update
    #安装阿里源
    sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
    # step 2: 安装GPG证书
    curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
    # Step 3: 写入软件源信息
    sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
    # Step 4: 更新并安装 Docker-CE
    sudo apt-get -y update
    sudo apt-get -y install docker-ce=17.06.0~ce-0~ubuntu
    
    #配置阿里镜像
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://1b1qa7l6.mirror.aliyuncs.com"]
    }
    EOF
    #启动
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
    如果报错执行如下:
    sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable"
    sudo apt-get -y install docker-ce=17.06.0~ce-0~ubuntu
    
    查看版本 
    docker -v 显示版本则安装正确
    
    

    基本命令

    可参考
    https://blog.csdn.net/u013378306/article/details/86668313

    第一个实例: hello word
    docker run ubuntu echo "hello word"
    

    执行结果如下:

    test@ubuntu:~$ sudo docker run ubuntu echo "hello word"
    Unable to find image 'ubuntu:latest' locally
    latest: Pulling from library/ubuntu
    da7391352a9b: Pull complete 
    14428a6d4bcd: Pull complete 
    2c2d948710f2: Pull complete 
    Digest: sha256:c95a8e48bf88e9849f3e0f723d9f49fa12c5a00cfc6e60d2bc99d87555295e4c
    Status: Downloaded newer image for ubuntu:latest
    hello word
    
    查看docker信息(version、info)
    # 查看docker版本  
    $docker version  
      
    # 显示docker系统的信息  
    $docker info 
    
    对image的操作(search、pull、images、rmi、history)
    # 检索image  
    $docker search image_name  
      
    # 下载image  
    $docker pull image_name  
      
    # 列出镜像列表; -a, --all=false Show all images; --no-trunc=false Don't truncate output; -q, --quiet=false Only show numeric IDs  
    $docker images  
      
    # 删除一个或者多个镜像; -f, --force=false Force; --no-prune=false Do not delete untagged parents  
    $docker rmi image_name  
      
    # 显示一个镜像的历史; --no-trunc=false Don't truncate output; -q, --quiet=false Only show numeric IDs  
    $docker history image_name 
    
    启动容器(run)
    # 在容器中运行"echo"命令,输出"hello word"  
    $docker run image_name echo "hello word"  
      
    # 交互式进入容器中  
    $docker run -i -t image_name /bin/bash  
      
      
    # 在容器中安装新的程序  
    $docker run image_name apt-get install -y app_name 
    
    查看容器(ps)
    # 列出当前所有正在运行的container  
    $docker ps  
    # 列出所有的container  
    $docker ps -a  
    # 列出最近一次启动的container  
    $docker ps -l 
    
    对容器的操作
    # 删除所有容器  
    $docker rm `docker ps -a -q`  
      
    # 删除单个容器; -f, --force=false; -l, --link=false Remove the specified link and not the underlying container; -v, --volumes=false Remove the volumes associated to the container  
    $docker rm Name/ID  
      
    # 停止、启动、杀死一个容器  
    $docker stop Name/ID  
    $docker start Name/ID  
    $docker kill Name/ID  
      
    # 从一个容器中取日志; -f, --follow=false Follow log output; -t, --timestamps=false Show timestamps  
    $docker logs Name/ID  
      
    # 列出一个容器里面被改变的文件或者目录,list列表会显示出三种事件,A 增加的,D 删除的,C 被改变的  
    $docker diff Name/ID  
      
    # 显示一个运行的容器里面的进程信息  
    $docker top Name/ID  
      
    # 从容器里面拷贝文件/目录到本地一个路径  
    $docker cp Name:/container_path to_path  
    $docker cp ID:/container_path to_path  
      
    # 重启一个正在运行的容器; -t, --time=10 Number of seconds to try to stop for before killing the container, Default=10  
    $docker restart Name/ID  
      
    # 附加到一个运行的容器上面; --no-stdin=false Do not attach stdin; --sig-proxy=true Proxify all received signal to the process  
    $docker attach ID  
    

    实例:

    tomcat使用
    安装
    #搜索tomcat镜像
    docker search tomcat
    #拉取tomacat
    docker pull tomcat
    #启动tomcat
    #--name 重命名 -d 后台运行模式  -p端口号
    docker run --name mytomcat -d -p 8081:8080 tomcat
    
    #docker查看进程
    root@ubuntu:/home/test# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
    b03027729068        tomcat              "catalina.sh run"   10 seconds ago      Up 9 seconds        0.0.0.0:8081->8080/tcp   mytest
    
    #查看日志
    docker logs id/name
    #进入容器中
    docker exec -it mytomcat /bin/bash
    #删除容器
    docker rm mytest
    #删除镜像
    docker rmi tomcat
    #停止容器
    docker stop mytomcat
    
    
    注意:

    将tomcat挂载起来访问报错404
    原因:tomcat的webapps下为空,导致访问的时候报错404
    解决方法:

    docker exec -it mytomcat /bin/bash
    rm -rf webapps
    mv webapps.dist webapps
    exit
    重启tomcat再次访问即可
    

    tomcat挂载jenkines

    需要将jenkins.war放到/root/soft/目录下

    docker run --privileged=true -v /root/soft/jenkins.war:/usr/local/tomcat/webapps/jenkins.war -p 8083:8080 --name myjenkins -d tomcat
    

    MySQL的安装

     docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d hub.c.163.com/library/mysql:5.7
    
    连接:

    密码是自己设置的密码 账号是root
    image.png

    搭建redis

    docker run --name myredis -p 6379:6379 --restart=always -d redis
    
    简介:
    Redis 简介

    Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。
    Redis 与其他 key - value 缓存产品有以下三个特点:

    • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
    • Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
    • Redis支持数据的备份,即master-slave模式的数据备份。
    Redis 优势
    • 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
    • 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。
    • 原子 – Redis的所有操作都是原子性的,意思就是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来。
    • 丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过期等等特性。
    Redis与其他key-value存储有什么不同?
    • Redis有着更为复杂的数据结构并且提供对他们的原子性操作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。

    • Redis运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。在内存数据库方面的另一个优点是,相比在磁盘上相同的复杂的数据结构,在内存中操作起来非常简单,这样Redis可以做很多内部复杂性很强的事情。同时,在磁盘格式方面他们是紧凑的以追加的方式产生的,因为他们并不需要进行随机访问。

    性能压测

    性能命令 10 万次请求 并发 50

    redis-benchmark -n 100000 -q
    #响应结果如下:
    root@ubuntu:~/soft# redis-benchmark -n 100000 -q
    PING_INLINE: 25050.10 requests per second
    PING_BULK: 25322.87 requests per second
    SET: 22251.89 requests per second
    GET: 23623.91 requests per second
    INCR: 22794.62 requests per second
    LPUSH: 23250.41 requests per second
    RPUSH: 21070.38 requests per second
    LPOP: 22241.99 requests per second
    RPOP: 24289.53 requests per second
    SADD: 25297.24 requests per second
    HSET: 24789.29 requests per second
    SPOP: 25419.42 requests per second
    LPUSH (needed to benchmark LRANGE): 24975.02 requests per second
    LRANGE_100 (first 100 elements): 21853.15 requests per second
    LRANGE_300 (first 300 elements): 10821.34 requests per second
    LRANGE_500 (first 450 elements): 8373.11 requests per second
    LRANGE_600 (first 600 elements): 6842.29 requests per second
    MSET (10 keys): 23364.48 requests per second
    
    
    只测指定的性能
    redis-benchmark -t set,lpush -n 100000 -q
    
    #结果如下
    root@ubuntu:~/soft# redis-benchmark -t set,lpush -n 100000 -q
    SET: 17531.56 requests per second
    LPUSH: 23696.68 requests per second
    

    客户端下载:

    https://github.com/uglide/RedisDesktopManager/releases/tag/0.9.3

    数据格式

    https://www.cnblogs.com/wxd0108/p/5729739.html

    作者:我是刘先生
    地址:https://www.cnblogs.com/cekaigongchengshi/
    文章转载请标明出处,如果,您认为阅读这篇博客让您有些收获,不妨点击一下推荐按钮,据说喜欢分享的,后来都成了大神

    欢迎扫码关注微信公众号
  • 相关阅读:
    SQL语句的执行顺序
    凭兴趣求职80%会失败,为什么
    Google Analytics:为链接点击设定事件追踪的方法
    org/hamcrest/SelfDescribing
    Idea使用记录--添加Problems&&解决Autowired报错could not autowire
    RBAC(Role-Based Access Control)基于角色的访问控制
    如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)?
    记录使用Hibernate查询bean中字段和数据库列类型不匹配问题
    Java添加自定义注解
    JS获取select的值
  • 原文地址:https://www.cnblogs.com/cekaigongchengshi/p/14329728.html
Copyright © 2011-2022 走看看