一个程序如果要运行,那么就必须保证有语言对应的库,例如Java程序就要JDK依赖可能还会设计到环境变量等等。所以环境配置非常麻烦,如果迁移程序就需要重新配置环境。
这个时候就需要docker的技术了
1. 什么是Docker
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。
Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了 Docker,就不用担心环境问题。
总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
优点:
- 容器互相隔离,使用沙箱机制
容器开销性能非常低,启动快,体积小
docker容器是一个系统进程,它只需要打包需要的依赖。
docker是容器化技术,解决软件环境迁移问题
2.Dock架构
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]]
:展示已安装的镜像OPTIONS说明:
- -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
- --digests :显示镜像的摘要信息;
- -f :显示满足条件的镜像;
- --format :指定返回值的模板文件;
- --no-trunc :显示完整的镜像信息;
- -q :只显示镜像ID。
- repository:镜像的名称
- Tag:版本
docker search [OPTIONS] TERM
:hub中搜索镜像
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
:从镜像仓库中拉取或者更新指定镜像OPTIONS:
- -a :拉取所有 tagged 镜像
- --disable-content-trust :忽略镜像的校验,默认开启
- 空:拉取最新的镜像
TAG:版本号,可以在 https://hub.docker.com/搜索版本号
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容器虚拟化和传统虚拟机比较
- 容器就是将软件打包成标准化单元,以用于开发、交付和部署。
- 容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。
- 容器化软件在任何环境中都能够始终如一地运行。
- 容器赋予了软件独立性,使其免受外在环境差异的影响,从而有助于减少团队间在相同基础设施上运行不同软件时的冲突。
相同:
- 容器和虚拟机具有相似的资源隔离和分配优势
不同:
- 容器虚拟化的是操作系统,虚拟机虚拟化的是硬件。
- 传统虚拟机可以运行不同的操作系统,容器只能运行同一类型操作系统
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上前个容器 | 一般几十个 |