@[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命令

神农写代码
1 声望0 粉丝

好好学习,天天向上!