zoukankan      html  css  js  c++  java
  • Docker简介

    Docker简介

    历史的演化

    1)物理机时代:资源浪费,部署成本高,难以扩展和迁移 等

    2)虚拟化:是物理资源层面的隔离 通过Hypervisor为制定VM分配资源,达到 多部署,资源隔离,容易扩展,但是VM需要安装操作系统。

    3)容器化技术:可以看做成一个不用安装操作系统的虚拟化技术,是APP层面的隔离,

      容器化技术也提供了标准化的部署方案,将所有网站需要运行的资源, 同时将运行资源所需要的底层硬件的需求 都放到容器中 ,一键发布,以后给运维交付是一个镜像(jar+ redis MySQLjdk ES)pull之后之间run就可以 项目带上环境安装打包,而不是一个jar包

    Docker是一个开源的应用容器引起,基于Go语言开发,

    Docker完全使用沙箱机制,容器开销很低

    Docker也具备一定虚拟化功能:Docker不仅可以创建容器,还可以像本地的虚拟机申请相应的资源。

    Docker 集装箱(也就是镜像)提供了标准的应用打包方式

    Docker 镜像和容器解释

    Docker镜像—Docker资源库(只读),类似Win7操作系统中的光盘

    docker Pull [OPTIONS] NAME[:TAG]  从资源库拉取一个镜像到我们本地,但是镜像是只读的,相当于安装文件,

    如果想提供服务,还需要docker run命令

    docker run  [OPTIONS] IMAGE [:TAG] [COMMAND][ARG...] 创建对应的容器,并启动服务

    Docker容器—是镜像的实列,由Docker容器创建,类似我们的PC机,每一个PC机安装了Win7的操作系统之后 都可以称为Win7的实列

    所有的镜像和容器默认存放在宿主机的 cd /var/lib/docker 目录中

    Docker快速部署Tomcat

    首先下载docker

    1)docker pull tomcat 拉取镜像

    作为tomcat 只有镜像,只是死的文件,需要将其创建对应的容器才能提供服务

    2)docker run tomcat  启动容器

    此时浏览器访问ip:8080是访问不了的,因为浏览器访问的是宿主机而不是容器

    3)docker run  --name tomcat01 -p 8080:8080 -d tomcat  宿主机端口和容器端口绑定

    --name tomcat01: 容器的名字

    -p 8080:8080:将容器的 8080 端口映射到主机的 8080 端口。

    -d :表示后台运行容器

    补充命令:

    docker ps -a  查找所有容器

    docker stop <容器ID> 停止容器

    docker start <容器ID> 启动一个停止的容器

    docker rm -f <容器ID> 删除一个容器

    docker exec -it <容器ID>  /bin/bash 进入容器后台 

    it 采用交互的命令执行 /bin/bash 开启一个接收命令的终端

    exit 退出容器

    tomcat容器内部结构

    上面的docker run命令包括了了三个组件

    1.Apache Tomcat/8.5.46

    2.jdk(1.8.0_222) 进入容器之后 java-version可以查看

    3.Linux(Red Hat 4.8.5-28)  min版本的操作系统 进入容器之后 cat/proc/version可以查看

    使用Dockerfile构建镜像

    1)当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以使用 Dockerfile 指令来创建一个新的镜像

    Dockerfile是一个包含用于组合镜像命令的文本文档(也就是一个脚本)—其中包含一组指令来告诉 Docker 如何构建我们的镜像

    Docker通过读取Dockerfile中的指令按步自动生成镜像

    简单点来说:它可以让用户个性定制化Docker镜像。因为工作环境中的需求各式各样,网络上的镜像很难满足实际中的要求。

    docker build -t 镜像名 <:tags> DockerFile 目录(.表示当前目录)  使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

    举例:使用Dockerfile部署:在原有tomcat安装完的基础上,将我们名为docker-web的应用发布到tomcat镜像中

    #设置基准镜像
    FROM tomcat:latest
    #当前镜像是哪个机构的
    MAINTAINER sunkun
    # 切换目录 不存在则创建 cd /user/local/tomcat/webapps 原有镜像中将工作目录切换置tomcat/webapps下
    WORKDIR /user/local/tomcat/webapps
    # 复制目录(dockerfile同级目录下的文件夹)下所有文件到容器目录中
    ADD docker-web ./docker-web

    cd 到dockerfile文件

    构建镜像:docker build -t sunkun/mywebapp:1.0 (因为在dockerfile当前目录下 可以用.表示dockerfile文件的目录)

      sunkun/mywebapp:1.0 是我们镜像的名字(机构名+镜像名+版本组成)

    运行镜像:docker run -d -p 8080:8080 sunkun/mywebapp:1.0

    此时在访问ip:port/docker-web就可以通过tomcat访问到我们部署的项目了

    如果可以访问tomcat欢迎页(ROOT目录),但不了可以访问webapps下的目录

    更改conf下的server.xml配置(增加下面加粗的配置 让tomcat可以直接访问webapps下面的路径)

        <Host name="localhost"  appBase="webapps"
                unpackWARs="true" autoDeploy="true">
                  <Context path="" docBase="" debug="0" reloadable="true"/>

    2)镜像分层

    镜像构建时,会一层层构建,前一层是后一层的基础。

    分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然后进一步添加新的层,以定制自己所需的内容,构建新的镜像。

    Dockerfile文件

    FROM centos
    RUN ["echo","aaa"]
    RUN ["echo","bbb"]
    RUN ["echo","ccc"]
    RUN ["echo","ddd"]

    更改Dockerfile文件,重新build

    FROM centos
    RUN ["echo","aaa"]
    RUN ["echo","bbb"]
    RUN ["echo","ccc"]
    RUN ["echo","ddd"]

    可以看到 前面三步因为命令没有变化,使用了已有的临时镜像,只会对发生变化的语句命令进行重新处理,生成对应的容器

    这样可以极大的加快镜像的构建速度

    容器间通信

    link单向通信

      启动容器的时候 docker run -d  --name tomcat01 --link mysql tomcat 此时tomcat01就可以和mysql容器单向通信了

    Bridge网桥双向通信(docker每创建一个网桥就会在宿主机上安装一个虚拟网卡)

      docker network create -d bridge my-bridge 所有通过这个网桥(my-bridge)内外进行通信的容器 彼此之间默认都是互联互通的

      docker network connect  my-bridge tomcat01 此时tomcat01就和网桥绑定成功了

      docker network connect  my-bridge mysql  此时mysql就和网桥绑定成功了

      此时tomcat01和mysql之间就互联互通了

    容器间数据共享

    原理:在宿主机上开辟一块空间,这块空间会被其他容器共享

    通过设置-v 挂载宿主机目录

    docker run --name 容器名 -v 宿主机路径:容器内挂载路径 镜像名

    docker run --name tomcat01 -v /usr/webapps:/usr/local/tomcat/webapps tomcat

    /usr/webapps 代表宿主机的user/webapps目录

    /usr/local/tomcat/webapps 挂载到容器内部的 webapps目录下

    tomcat01 容器运行的名称

    tomcat 镜像名

    如:docker run --name tomcat03 -p 8888:8080 -d  -v /usr/webapps:/usr/local/tomcat/webapps tomcat

    Docker-compose容器编排工具

    一个项目上线,需要Nginx Tomcat MySQL,通过Docker-Compose 的yml脚本可以帮助我们先安装MySQL容器,在安装Tomcat容器,在安装Nginx容器,同时彼此形成依赖关系

    Docker-Compose单机多容器部署工具,通过yml文件定义多容器如何部署

    Docker-compose通过yml文件帮助我们部署了多个容器,并且将这些容器彼此之间进行有效的配置和互通互联

    Docker私有仓库Harbor

    把我们本地的Docker镜像传到Harbor上面需要以下两步

    1)给镜像打上标签 docker tag eureka:v1 ip:port/projectname/eureka

    2)推送镜像 docker push  ip:port/projectname/eureka

    3)把Harbor地址加到docker信任列表

    4)再次推送 提示权限不足—>登录

    推送成功后 另外的主机可以从Harbor下载镜像

    使用SonarQube进行代码审查

    Publish Over SSH可以远程拉取镜像和发布应用

    普通的Jenkins+Docker+SpringCloud微服务持续集成存在以下问题:

    1)一次只能选择一个微服务部署

    2)只有一台生产者部署服务器

    3)每个服务器只有一个实列,容错率低

    优化方案:

    1)在一个Jenkins工程中可以选择多个微服务同时发布

    2)在一个Jenkins中可以选择多台生成服务器同时部署

    3)每个服务都是以集群高可用的方式部署

  • 相关阅读:
    Introspector
    jython awt demo
    java中dom解析xml
    【luogu1816】忠诚
    代码调试技巧【OI缩水版】
    【UOJ78】二分图最大匹配
    【51nod】最大子段和
    【LibreOJ109】【模板】并查集
    简单的卡常数【OI缩水版】
    QQbot
  • 原文地址:https://www.cnblogs.com/ssskkk/p/10428224.html
Copyright © 2011-2022 走看看