@[toc]

一、Docker 的外围概念

  • 概念
    Docker是容器技术。在实质上来说它就是主机的汇合,如图:

    • 什么是主机
      这里的主机咱们个别说的是操作系统,世面上比拟风行的零碎:mac windows Linux 。
    • 什么样类型的主机的汇合?
      次要是Linux零碎主机的汇合。
      其实docker外面装置的是精简版的Linux,说白了这个精简版的Linux零碎比拟小,小到什么水平呢?小到只能运行一个应用程序。
  • 为什么应用Docker部署

    • 应用Linux单机部署
      如图:

      • 缺点:

        • 端口抵触
        • 环境抵触
          次要起因是部署藕合造成的。
    • 应用虚拟机部署
      如图:

      • 缺点

        • 消耗资源的问题 【虚拟机须要耗费电脑的cpu 磁盘 内存,如果耗费太大,那么留给微服务的资源就很少的,就会影响微服务的性能】
        • 应用艰难的问题 【独自须要装置虚拟机,还得分配内存 cpu 硬盘大小的问题】
    • 应用容器【docker】部署
      如图:

      • Docker 如何解决资源消耗的问题?
        它次要是用的是复用资源技术,其实是操作的操作系统资源,与虚拟机则不是【独立占用】,因为装置虚拟机的时候曾经调配好cpu 内存 硬盘。
      • Docker 如何解决应用艰难的问题?
        只须要一个命令运行容器。
      • Doker如何解决 端口抵触与环境抵触的
        因为Docker中的容器是齐全隔离。

        二、Docker的利用场景

  • 利用场景
    单体我的项目与微服务项目。

    三、Docker如何装置

  • 博客地址
    https://blog.csdn.net/Fu_Shi_...

    四、Docker治理命令

  • 治理命令

        builder     Manage builds 治理构建    config      Manage Docker configs 治理配置    container   Manage containers 治理容器    context     Manage contexts 治理上下文    engine      Manage the docker engine 治理引擎    image       Manage images 治理镜像    network     Manage networks 管理网络    node        Manage Swarm nodes 治理节点(集群)    plugin      Manage plugins 治理插件    secret      Manage Docker secrets 治理密钥    service     Manage services 治理服务    stack       Manage Docker stacks 治理    swarm       Manage Swarm 治理集群    system      Manage Docker管理系统    trust       Manage trust on Docker images 治理信赖    volume      Manage volumes 治理数据挂载(数据长久化 === 永恒保留)      

    五、Docker镜像

  • 镜像的概念
    镜像其实就是一个没有启动的Linux的主机而已。
  • 生成Docker镜像的条件

    • 微服务公布包
    • DockerFile文件 【文件地位与公布包文件夹目录同级】
  • 配置DockerFile文件

         FROM mcr.microsoft.com/dotnet/aspnet:6:0     WORKDIR /publish     EXPOSR 80     EXPOSE 443     COPY publish/ /publish     ENTRYPOINT ["dotnet","我的项目.dll"]
  • 生成镜像命令

         #在DockerFile同级目录下执行     docker build -t  镜像名称 .          #查看镜像列表     docker images
  • 运行镜像

          #运行镜像后失去就是容器       #多个端口映射      docker run -p 内部拜访端口[5001]:容器端口[80]  -p 内部拜访端口[5002]:容器端口[443] 镜像名称
  • 查看容器

          #查看容器      docker exec -it 容器ID /bin/bash
  • 创立镜像版本号

          #设置镜像版本号      docker image tag 原有镜像名称 新镜像名称:版本号

    六、Docker容器

  • 概念
    镜像其实就是一个启动的Linux的主机而已。
  • 镜像与容器的区别

    • 镜像不可扭转,容器能够批改[能够应用 docker exec -it 容器ID /bin/bash 进行批改,然而镜像不能够]
    • 镜像能够生成多个容器,容器只能运行一次。
  • 镜像与容器的关系

    • 一对多的关系
  • 长处

    • 能够疾速启动集群。
    • 容器之间互相隔离。
  • 容器操作

          #查看操作容器的所有命令      docker container -h       #查看以后容器详细信息      docker container inspect  容器ID

    七、Dockerfile的指令

  • 指令

      FROM:指定根底镜像(FROM是必备的指令,并且必须为第一条指令)。      RUN: 用来执行命令行命令。其根本格局:          shell格局: RUN  <命令>  ,输出在bash环境中的命令即可,一个dockerfile容许应用RUN不得超过127层,所以,应用一次RUN, 应用 ‘ \ ’ 换行,应用‘ && ’执行下一条命令。个别应用此种格局;          exec格局: RUN  <"可执行文件", "参数1", "参数2">,此种形式像是函数调用中的格局;      COPY:  复制文件。 其根本格局:          格局1:COPY <源门路>...<指标门路>          格局2:COPY [“<源门路1>”,....."<指标门路>"]      ADD: 更高级的复制文件,在COPY的根底上减少了一些性能,如果复制的是压缩包的话,会间接解压,而不须要在应用RUN解压;      CMD:容器启动命令。其根本格局:          shell格局: CMD <命令>          exec格局: CMD ["可执行文件", "参数1", "参数2"...]          参数列表格局: CMD [“参数1”, “参数2”...],在指定了ENTRYPOINT指令后,用CMD指定具体的参数      ENTRYPOINT: 入口点。其根本格局分为exec和shell,          ENTRYPOINT的目标和CMD一样,都是在指定容器启动程序及参数。ENTRYPOINT在运行中能够代替,不过比CMD繁琐,须要通过docker run 的参数--entrypoint 来指定。当指定了ENTRYPOINT后,CMD的含意就产生了扭转,不在是间接运行其命令,而是将CMD的内容作为参数传递给ENTRYPOINT指令。其执行时就变成了:  <ENTRYPOINT> "<CMD>"      ENV: 设置环境变量。(都能够应用这里应用的变量)其根本格局:          格局1:ENV <key> <value>          格局2:ENV <key1>=<value1> <key2>=<value>...      ARG: 构建参数。构建参数和ENV的成果一样,都是设置环境变量,所不同的是ARG所构建的环境变量在未来容器运行时是不存在的。其根本格局:          格局1: ARG <参数名> [=<默认值>]          格局2: 该默认值能够在构建命令 docker build  中用 --build-arg <参数名>=<值> 来笼罩      VOLUME: 定义匿名卷。 其根本格局:          格局1: VOLUME ["<门路1>", "<门路2>"...]          格局2: VOLUME <门路>      EXPOSE:  裸露端口。EXPOSE指令是申明运行时容器所提供的端口,在启动容器时不会在因为这个申明而开启端口。 其根本格局:          格局1: EXPOSE <端口1> [<端口2>...]      WORKDIR: 指定工作目录。其根本格局:          格局1: WORKDIR <工作目录门路>      USER: 指定以后用户。USER是帮忙你切换到指定用户。 其根本格局:          格局1: USER <用户名>      HEALTCHECK: 健康检查,判断容器的状态是否失常。 其根本格局:          格局1: HEALTCHECK [选项] CMD <命令> :设置查看容器健康状况的命令          格局2: HEALTCHECK NONE: 如果根底镜像有健康检查指令,应用此格局能够屏蔽掉其健康检查指令
  • 外围指令

      1.1、FROM 指定根底镜像构建      写法:          FROM 指定根底镜像  1.2、COPY 复制命令。从上下文目录中复制文件或者目录到容器里指定门路。      写法:          COPY 源门路,指标门路          COPY ["源门路","指标门路"]      1.3、RUN运行指令。构建的时候运行的指令      次要在于镜像构建的时候运行,运行build命令的时候       前面接的命令就是shell输出的命令      写法          RUN  shell命令 参数1 参数2          RUN ["shell命令 ","参数1"," 参数2"]          例如:          RUN ["echo",">"," /usr/share/index.html"]  1.4、CMD运行指令。运行容器时候运行的指令      次要在于镜像运行容器的时候生成,运行run的时候运行      写法          CMD <shell 命令>           CMD ["<可执行文件或命令>","<param1>","<param2>",...]           例如:          CMD ["dotnet","rmcore.dll"]          毛病:在run 命令前面能够进行笼罩          docker run -d -P  rmcore dotnet rmcore.dll 进行笼罩掉  1.5 ENTRYPOINT运行指令。运行容器时候运行的指令(不会被笼罩)      写法          ENTRYPOINT ["<executeable>","<param1>","<param2>",...]          能够和CMD动静联合,设置动静的配置参数          例如           ENTRYPOINT ["nginx", "-c"] 定参          CMD ["/etc/nginx/nginx.conf"]变参                   7.6、EXPOSE裸露端口指令          仅仅申明端口,就是指定镜像裸露的端口          在run 的时候,通过docker run -p 会主动随机映射到EXPOSE端口          写法          EXPOSE 端口          EXPOSE 端口          例如           EXPOSE 5000          EXPOSE 5001  1.7、WORKDIR工作目录指令      用于利用在容器内的工作目录,就好比:ruanmou目录      写法          WORKDIR <工作目录门路>          例如          WORKDIR /rmcore          或者          WORKDIR /nginx

    八、Docker自定义镜像

  • DockerFile文件

    • 作用
      生成镜像文件。
    • 根本配置

         FROM mcr.microsoft.com/dotnet/aspnet:6:0   #指定根底镜像和指定环境[Linux+SDK]   WORKDIR /publish    #新建工作目录   EXPOSR 80  #裸露容器端口   EXPOSE 443 #裸露容器端口   COPT publish/ /publish  #将文件copy到docker 文件夹下   ENTRYPOINT ["dotnet","我的项目.dll"]  #执行命令
      • Nginx自定义镜像
      • 条件

        • Linux主机
        • 下载
        • 解压
        • 编译
        • 运行
      • DockerFile文件

            FROM centos:7   #指定根底镜像    RUN yum -y install gcc make pcre-devel zlib-devel tar zlib #装置插件    WORKDIR /nginx #创立工作目录    COPY nginx-1.15.2.tar.gz /nginx  #将压缩文件拷贝到docker中    RUN tar -zxvf nginx-1.15.2.tar.gz #执行解压命令    RUN cd nginx-1.15.2 && ./configure && make && make install #执行编译命令    EXPOSE 80  #裸露容器端口    COPY nginx.sh /nginx.sh #将 nginx.sh 拷贝到docker 目录中    RUN chmod 775 /nginx.sh #设置批改权限为 775    CMD ["/nginx.sh"]  #运行nginx命令