关于容器:Docker入门一

46次阅读

共计 4566 个字符,预计需要花费 12 分钟才能阅读完成。

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

正文完
 0