写点什么

Docker 入门(一)

作者:神农写代码
  • 2022 年 7 月 13 日
  • 本文字数:4190 字

    阅读完需:约 14 分钟

@[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_rong/article/details/120917911?spm=1001.2014.3001.5501

四、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命令
复制代码


发布于: 刚刚阅读数: 4
用户头像

还未添加个人签名 2022.03.14 加入

好好学习,天天向上!

评论

发布
暂无评论
Docker入门(一)_神农写代码_InfoQ写作社区