Docker

微服务具有各种各样的优势,但微服务的拆分通用给部署带来很多问题,分布式系统中依赖的组件很多,不同组件部署时会产生一些冲突,依赖关系复杂可能出现兼容性问题

Docker解决依赖的兼容性问题采用了两个手段:1.将应用的Libs函数库,Deps依赖,配置和应用一起打包 2.将每个应用放到一个隔离容器去运行,避免相互干扰

Docker解决操作系统环境差异

要解决不同操作系统环境差异问题,先了解操作系统结构。以Ubuntu操作系统为例

 

一个操作系统结构如下:系统应用,内核,计算机硬件

计算机硬件:例如cpu,内存,硬盘等

系统内核:所有Linux发行版的内核都是Linux,内核可以和计算机硬件交互,对外提供内核指令,用于操作计算机硬件

系统应用:操作系统本身提供的应用,函数库。这些函数库都是对内核指令的封装,使用更方便。

应用与计算机交互的流程:1.应用调用操作系统应用(函数库)实现各种功能

2.系统函数库是对内核指令集的封装,调用内核指令

3.内核指令操作计算机硬件

不同的系统例Ubuntu和CentOS都是基于Liunx内核,系统应用不同,提供的函数库有差异

Docker解决不同系统环境的问题:Docker将用户系统和所需要调用的系统函数库一起打包

Docker运行到 不同操作系统时直接基于打包的函数库,借助于操作系统的Liunx内核来运行

Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题?

  • Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像

  • Docker应用运行在容器中,使用沙箱机制,相互隔离

Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行

Docker是一个快速交付应用、运行应用的技术,具备下列优势:

  • 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统

  • 运行时利用沙箱机制形成隔离容器,各个应用互不干扰

  • 启动、移除都可以通过一行命令完成,方便快捷

Docker和虚拟机的区别:

虚拟机是在操作系统中模拟硬件设备,然后运行另一个操作系统,操作系统中的操作系统,体积大,启动慢,性能一般

Docker仅仅是封装函数库,没有模拟完整的操作系统,是一个系统进程,体积小,性能好

Docker架构

镜像Image:Docker将应用 程序及其依赖,函数库,环境,配置等文件打包在一起,称为镜像

容器Container:镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器进程做隔离,对外不可见

一切应用都是由代码构成,都是硬盘中的一个个字节形成的文件。只有运行时,才会加载到内存形成进程,而镜像,就是把一个应用在硬盘上的文件、及其运行环境、部分系统函数库文件一起打包形成的文件包。这个文件包是只读的。容器,就是将这些文件中编写的程序、函数加载到内存中允许,形成进程,只不过要隔离起来。因此一个镜像可以启动多次,形成多个容器进程。

DockerHub

一个官方的Docker镜像的托管平台。国内的比如: 网易云镜像服务阿里云镜像库

Docker架构

使用Docker操作镜像,容器,必须安装Docker

Docker是一个CS架构的程序,有两部分构成:

服务端server:Docker守护进程,负责处理Docker指令管理镜像容器等

客户端client:通过命令向Docker服务端发送指令,可以在本地发送指令到服务端

镜像

镜像名称一般两部分组成:[repository]:[tag]

没有指定tag时,默认是latest,代表最新版本的镜像

镜像命令

0)拉取镜像

先在镜像仓库中搜索需要的镜像,根据镜像名拉取。 命令: docker pull nginx  拉取nginx

通过docker images查看虚拟机中所有镜像

1)利用docker xx --help命令查看docker save和docker load的语法

例如,查看save命令用法,可以输入命令:

docker save --help

结果:

命令格式:

docker save -o [保存的目标文件名称] [镜像名称]

2)使用docker save将nginx的镜像导出到磁盘上形成jar包

运行命令:

docker save -o nginx.tar nginx:latest

结果如图:

3)使用docker load加载镜像

先删除本地的nginx镜像:

docker rmi nginx:latest

然后运行命令,加载本地文件:

docker load -i nginx.tar

结果:

 容器

容器保护三个状态:

运行:进程正常运行   

 暂停:进程暂停,cpu不再运行,并不释放内存   

停止:进程终止,回收进程占用的内存,cup等资源

其中:

  • docker run:创建并运行一个容器,处于运行状态

  • docker pause:让一个运行的容器暂停

  • docker unpause:让一个容器从暂停状态恢复运行

  • docker stop:停止一个运行的容器

  • docker start:让一个停止的容器再次运行

  • docker rm:删除一个容器

创建并运行nginx容器的命令

docker run --name containerName -p 80:80 -d nginx

docker run命令的常见参数有哪些?

  • --name:指定容器名称

  • -p:指定端口映射

  • -d:让容器后台运行

默认情况下,容器是隔离环境,直接访问访问不到。需要将容器端口80和宿主机端口80关联

进入容器中

docker exec -it 容器名 bash

  • docker exec :进入容器内部,执行一个命令

  • -it : 给当前进入的容器创建一个标准输入、输出终端,允许我们与容器交互

  • bash:进入容器后执行的命令,bash是一个linux终端交互命令

查看容器日志的命令:

  • docker logs

  • 添加 -f 参数可以持续查看日志

查看容器状态:

  • docker ps  查看运行的容器

  • docker ps -a 查看所有容器,包括已经停止的

数据卷(容器数据管理)

当数据(容器内文件)和容器耦合在一起的时候,不便于修改,维护困难

数据卷volume:虚拟目录,指向宿主机系统中的某个目录

一旦完成数据卷挂载,对容器的一切操作都会作用在数据卷对应的宿主机目录了

数据卷的作用:

  • 将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全

数据卷操作:

  • docker volume create:创建数据卷

  • docker volume ls:查看所有数据卷

  • docker volume inspect:查看一个或多个数据卷详细信息,包括关联的宿主机目录位置

  • docker volume rm:删除一个或多个指定数据卷

  • docker volume prune:删除所有未使用的数据卷

docker volume create h1  创建数据卷h1

创建容器的时候,通过-v参数挂载一个数据卷到某个容器目录

docker run   --name mn   -v html:/root/html    -p 8080:80  nginx 

-v html:/root/htm :把html数据卷挂载到容器内的/root/html这个目录中

docker run的命令中通过 -v 参数挂载文件或目录到容器中:

  • -v volume名称:容器内目录

  • -v 宿主机文件:容器内文件

  • -v 宿主机目录:容器内目录

数据卷挂载与目录直接挂载的,直接挂载模式:宿主机目录-->容器内目录

  • 数据卷挂载耦合度低,由docker来管理目录,但是目录较深,不好找

  • 目录挂载耦合度高,需要我们自己管理目录,不过目录容易寻找查看

Dockerfile自定义镜像

常见的镜像DockerHub就能找到,自己写的项目自己构建镜像

镜像就是将应用程序及其需要的系统函数库,环境,配置,依赖打包而成

以MySQL为例的镜像组成结构:

 简单来说,镜像就是在系统函数库,运行环境基础上,添加应用程序文件,配置文件,依赖文件等组件,然后编写号脚本打包在一起形成的文件

Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。

 

  1. Dockerfile的本质是一个文件,通过指令描述镜像的构建过程

  2. Dockerfile的第一行必须是FROM,从一个基础镜像来构建

  3. 基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine

Docker架构图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值