docker 安装 原理 常用命令 部署应用

docker 安装 原理 常用命令 部署应用 面板

docker学习大纲

  • docker和虚拟机的区别
  • docker名词概念
  • 安装docker及配置加速
  • 启动
  • Run流程和运行原理
  • 基本命令
    • 镜像基本命令
    • 容器基本命令
  • Portainer可视化面板
  • 镜像原理 联合文件系统
    • 镜像原理 分层理解

docker和虚拟机的区别

虚拟机: 传统的虚拟机需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给他的资源将全部被占用。每一个虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。

容器: 容器技术是和我们的宿主机共享硬件资源及操作系统可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。

docker 安装 原理 常用命令 部署应用_第1张图片
虚拟机

docker容器docker 安装 原理 常用命令 部署应用_第2张图片

名词解释
#OS :操作系统
#虚拟机(VM) 里的OS 称为 GuestOS
#物理机 里的OS 称为 HostOS
#Hypervisor:又称虚拟机监视器(英语:virtual machine monitor,缩写为 VMM),是用来建立与执行虚拟机器的软件、固件或硬件。
#Docker Engine: Docker引擎

虚拟机和容器都是在硬件和操作系统以上的,虚拟机有Hypervisor层,Hypervisor是整个虚拟机的核心所在。他为虚拟机提供了虚拟的运行平台,管理虚拟机的操作系统运行。每个虚拟机都有自己的系统和系统库以及应用。

容器没有Hypervisor这一层,并且每个容器是和宿主机共享硬件资源及操作系统,那么由Hypervisor带来性能的损耗,在linux容器这边是不存在的。

但是虚拟机技术也有其优势,能为应用提供一个更加隔离的环境,不会因为应用程序的漏洞给宿主机造成任何威胁。同时还支持跨操作系统的虚拟化,例如你可以在linux操作系统下运行windows虚拟机。

从虚拟化层面来看,传统虚拟化技术是对硬件资源的虚拟;容器技术则是对进程的虚拟,从而可提供更轻量级的虚拟化,实现进程和资源的隔离; 虚拟机隔离系统,容器隔离进程

总结:
Docker有着比虚拟机更少的抽象层,由于Docker不需要Hypervisor实现硬件虚拟化,运行在docker上的程序直接使用的都是实际物理机的硬件资源,印此在cpu,内存利用率上docker更有优势

docker利用的是宿主机的内核,而不需要Guest os,印此新建一个容器的时候,docker不需要和虚拟机一样重新加载一个操作系统,避免了引导,加载操作系统这个比较费时费资源的过程,当新建一个虚拟机时,虚拟机需要加载Guest os,这个新建过程是分钟级的,而docker直接利用宿主机的操作系统则省略了这个过程,因此新建一个docker容器就像启动一个进程一样只需要几秒钟

docker容器 虚拟机
操作系统 与主机共享OS 宿主机OS上运行宿主机OS
存储大小 镜像小便于传输 镜像庞大
运行性能 几乎无额外损失 操作系统额外的cpu,内存
移植性 轻便灵活 笨重 与虚拟化耦合技术高
硬件亲和性 面向软件开发者 面向硬件运维者

docker名词概念

docker 安装 原理 常用命令 部署应用_第3张图片
镜像(image): docker镜像可以看作一个模板,包含系统信息,应用信息等,可以通过该模板创建很多容器并运行;好比java中的类,可以通过该类实例化很多对象

容器(containers): 通过镜像来运行产生的实例,相关的基本命令有 运行,停止,删除。可以简单理解为,容器就是一个精巧版的linux系统,在系统中,运行程序应用

仓库(repository): 用来存放镜像,有公有仓库,也有私有仓库和github类似

安装docker及配置加速

当前环境: centos 7 以及 Xshell
可以通过 uname -r 查看内核版本是否在3.10以上 (必须)
可以通过 cat /etc/os-release 命令查看系统版本是否大于7.0

卸载docker:
sudo yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine

通过国内脚本一键安装:
curl -sSL https://get.daocloud.io/docker | sh

可以通过docker version命令来查看是否安装成功

启动docker服务
sudo systemctl start docker

配置加速:
在 /etc/docker/daemon.json 文件下写入如下内容(如果不存在则创建)
{“registry-mirrors”:[“加速地址”]}
注意标点符号英文

加速地址:
科大镜像:https://docker.mirrors.ustc.edu.cn/
网易:https://hub-mirror.c.163.com/
阿里云:https://<你的ID>.mirror.aliyuncs.com
七牛云加速器:https://reg-mirror.qiniu.com
阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

重新加载服务的配置文件
sudo systemctl daemon-reload
重启docker服务
sudo systemctl restart docker

通过docker info可以查看docker的镜像信息是否修改成功
在 Registry Mirrors 关键字后面

启动

可以通过docker run hello-world命令 来启动自己的第一个容器
docker 安装 原理 常用命令 部署应用_第4张图片
简要执行过程:
第一行unable to find image…寻找本地镜像 未找到
接着第二行从远程仓库进行拉取
红框代表签名信息
剩下的后面详解

可以通过docker images来查看本地仓库的镜像

Run流程和运行原理

运行流程图docker 安装 原理 常用命令 部署应用_第5张图片
Docker是怎么工作的?

Docker 是一个client-server结构的系统,docker运行在守护系统上,通过socket从客户端接收指令并执行

基本命令

帮助命令
docker version 版本信息
docker info  系统信息
官方命令链接: https://docs.docker.com/reference/

镜像基本命令

docker images 查看本地所有镜像
docker search 搜素镜像
docker pull 下载镜像
docker rmi 删除镜像

容器基本命令

docker run 实例化容器
参数:
--name="name" 容器名字
-d 后台运行
-i t 使用交互运行,进入容器查看内容
-p 指定容器端口

exit 停止并退出
ctrl + p + q 容器不停止退出
docker ps 查看运行中的容器
docker rm 容器id 删除容器
docker attach 容器id 进入容器
docker start 容器id 启动容器
docker stop 容器id 停止容器
docker restart 容器id 重启容器
docker kill 容器id 强制杀死容器
docker top 容器id 查看容器在宿主机中的进程信息
docker inspect 容器id 查看元数据

docker 安装 原理 常用命令 部署应用_第6张图片
举一个部署Nginx的例子:
搜素镜像 官网或者search命令
通过pull下载镜像
run命令运行

Portainer可视化面板

Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求。

单机版运行

通过 docker run -d -p 9000:9000
–restart=always
-v /var/run/docker.sock:/var/run/docker.sock
–name prtainer-test
portainer/portainer 启动可视化面板

访问该公网ip和端口号 就可以进入到面板了

集群版后续说明

镜像原理 联合文件系统

镜像是什么?
镜像是轻量级,可执行的独立软件包,用来打包运行环境和基于运行环境的开发的软件,它包含某个软件所运行时库,环境变量和配置文件

联合文件系统
UnionFS(联合文件系统)
unionfs是一种分层,轻量级,且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。union文件系统是docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像

特性: 一次同时加载多个文件系统,但从外表来看,只看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层文件和目录

镜像加载原理
docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统就是unionfs
bootfs 主要包含bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动的时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。在一层与我我们典型的linux系统是一样得,包含boot加载器和内核。当boot加载完成后整个内核就在内核中了,此时内存的使用权由bootfd转交给内核,此时系统会卸载bootfs

rootfs,在bootfs上,包含的就是典型linux系统中的/dev,/proc/bin,等标准目录文件,rootfs就是各种不同的操作系统发行版,ubuntu,centos,debian
docker 安装 原理 常用命令 部署应用_第7张图片
安装进虚拟机的linux系统几个G,为什么docker这么小?
对于一个精简的OS,rootfs 可以很小,只需要包含基本命令,工具和程序库就可以了。由此可见,对于不同的linux发行版,bootfs是一致的,rootfs有所差别,不同的发行版可以公用bootfs

镜像原理 分层理解

我们下载一个镜像,可以通过日志看到,是一层一层下载
docker 安装 原理 常用命令 部署应用_第8张图片
为什么docker使用分层镜像

因为资源共享,比如多个镜像从相同的base镜像构建,那么宿主机磁盘上只需要保留一份base镜像,同时内存中也只加载一份base镜像,这样就可以为所有容器服务了,而且镜像每一层都可以被共享

查看镜像分层可以通过 docker image inspect (镜像名) 命令

你可能感兴趣的:(容器)