一个程序如果要运行,那么就必须保证有语言对应的库,例如Java程序就要JDK依赖可能还会设计到环境变量等等。所以环境配置非常麻烦,如果迁移程序就需要重新配置环境。

这个时候就需要docker的技术了

1. 什么是Docker

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。

Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。

总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

优点:

  1. 容器互相隔离,使用沙箱机制
  2. 容器开销性能非常低,启动快,体积小

    docker容器是一个系统进程,它只需要打包需要的依赖。

docker是容器化技术,解决软件环境迁移问题

2.Dock架构

image-20210728181638375

2.1Docker中的概念

镜像(Image):就是一个模板,用于创建 Docker 容器的模板。概念类似于Java的Class可以创造很多个实例。

容器(Container):运行的镜像,一个镜像生成的实例,容器可以创建、启动、停止、删除、暂停等。

仓库(Repository):用于保存镜像的代码控制中心,Docker 的仓库和 git 的仓库比较相似,拥有仓库名、tag。在本地构建完镜像之后,即可通过仓库进行镜像的分发。常用的 Docker hub 有 https://hub.docker.com/https://cr.console.aliyun.com/ 等。

3.Docker服务相关命令

生命周期命令:

systemctl stop docker

systemctl start docker

systemctl restart docker

#查看服务状态
systemctl status docker

#开机启动
systemctl enable docker
  • docker images [OPTIONS] [REPOSITORY[:TAG]]:展示已安装的镜像

    image-20210728183649802

    OPTIONS说明:

    • -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
  • --digests :显示镜像的摘要信息;
  • -f :显示满足条件的镜像;
  • --format :指定返回值的模板文件;
  • --no-trunc :显示完整的镜像信息;
  • -q :只显示镜像ID。
  • repository:镜像的名称
  • Tag:版本
  • docker search [OPTIONS] TERM:hub中搜索镜像

image-20210728184058233

  • docker pull [OPTIONS] NAME[:TAG|@DIGEST]:从镜像仓库中拉取或者更新指定镜像

    OPTIONS:

    • -a :拉取所有 tagged 镜像
    • --disable-content-trust :忽略镜像的校验,默认开启
    • 空:拉取最新的镜像

    TAG:版本号,可以在 https://hub.docker.com/搜索版本号

    image-20210728185756254

  • docker rmi [OPTIONS] IMAGE [IMAGE...]

    IMAGE:可以是name版本或者id

    #id
    docker rmi 8cf625070931
    #名字加版本
    docker rmi mysql:5.7

3.配置Docker镜像加速器

因为国内访问hub获取image非常慢所以可以配置其他镜像源,https://cr.console.aliyun.com/cn-hongkong/instances/mirrors

Docker容器虚拟化和传统虚拟机比较

  • 容器就是将软件打包成标准化单元,以用于开发、交付和部署。
  • 容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。
  • 容器化软件在任何环境中都能够始终如一地运行。
  • 容器赋予了软件独立性,使其免受外在环境差异的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。

image-20210729192341786

相同:

  • 容器和虚拟机具有相似的资源隔离和分配优势

不同:

  • 容器虚拟化的是操作系统,虚拟机虚拟化的是硬件。
  • 传统虚拟机可以运行不同的操作系统,容器只能运行同一类型操作系统
特性容器虚拟机
启动秒级分钟级
硬盘使用一般为MB一般为GB
性能接近原生弱于
系统支持量单机支持上前个容器一般几十个

image-20210729192706670