Docker基础与安装

Docker基础与安装

一、Docker概述

Docker是什么?

Docker 是一个开源的应用容器引擎,基于GO 语言并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了

沙箱机制

Sandboxie(又叫沙箱、沙盘)即是一个虚拟系统程序,允许你在沙盘环境中运行浏览器或其他程序,因此运行所产生的变化可以随后删除。它创造了一个类似沙盒的独立作业环境,在其内部运行的程序并不能对硬盘产生永久性的影响。 在网络安全中,沙箱指在隔离环境中,用以测试不受信任的文件或应用程序等行为的工具。

二、Docker的使用场景

K8S(更方便管理集群性质容器的软件) image镜像+container容器的方式

工作流程:

war,jar包—》GitHub(公共仓库)gitlib(私有仓库)—》Jenkins(测试)—》应用程序封装/构建镜像—》运维下载,使用容器技术进行运行发布。

打包应用程序简单部署

可脱离底层硬件任意迁移(实现了应用隔离,将应用拆分并进行解耦)

持续集成和持续交付(CI/CD):开发到测试

部署微服务

提供PASS{OpenStack的云主机类似于阿里云的ecs属于IAAS,docker(K8S)属于PASS}

IAAS:基础设施即服务

SAAS:应用即服务

PASS:平台即服务

docker的三要素

镜像(docker image):模板

容器(docker container):基于镜像,运行时状态

仓库:存放镜像模板。① 公共仓库(docker hub)②私有仓库(registry harbor)

使用docker的意义

docker是一种标准化的封装和运行平台(docker引擎),统一的封装方式是镜像,统一的运行方式是容器方式。

三个统一:

docker引擎统一了基础设施环境(docker环境用镜像封装一个简易的操作系统)

docker引擎统一了程序打包方式(docker镜像images)

docker引擎统一了程序部署(运行)方式:docker容器基于镜像运行为容器

实现了一次构建,多次多处使用

三、docker引擎和架构

1.docker引擎(docker engine)

docker引擎是具有以下主要组件的C/S(客户端/服务器)应用程序

server端:服务器是一种长期运行的程序,称为守护程序进程(dockerd)

client端:rest api接口,它指定程序可以用来与守护程序进行通信并指示其操作

image-20220113084809032

客户端与守护进程通过rest api接口互动

命令行界面(CLI)与客户端(docker)的交互:

image-20220113091151512

  • 由外到内,最里面的是内核,server端运行着守护进程,来执行docker的具体指令

  • server通过rest api去和client来进行交互

  • client最主要有两个作用

    1. 使用命令导入的方式与rest api进行交互,例如:docker images,查看当前的镜像有哪些。server就会有相对应的返回值

    2. 查看docker-server返回的结果

      是为用户提供命令的输入,以及显示接收到的输出结果

2.docker架构(docker architecture)

image-20220113084956360

请求镜像步骤

  1. 先由客户端进行创建操作步骤(查看、读取等)
  2. 这些操作步骤到达Docker中的守护进程,由守护进程进行处理请求
  3. 如果请求的镜像,本地仓库有的话,就直接引导到本地仓库进行找到镜像
  4. 如果该请求本地仓库没有镜像,就指引到公共仓库去下载镜像,镜像下载之后,将镜像解析成容器

docker使用C/S架构,docker客户端与docker守护进程进行对话,该守护进程完成构建,运行和发布docker容器的繁重工作。

docker区别于传统的虚拟化,不需要虚拟化硬件资源直接使用容器引擎,所以速度较快。

docker client:

①客户端提供提供一个与用户交互展示的平台

②管理控制docker服务端功能的的工具

docker客户端是许多docker用户与docker交互的主要方式。当使用命令时,如(docker run)客户端会将这些命令发送到dockerd,以执行这些命令。该docker命令使用docker API接口。docker客户端可以与多个守护进程通信

docker daemon(守护进程):

docker守护程序dockerd监听docker API请求并管理docker对象(例如:图像,网络,容器和卷)。docker守护程序还可以与其他守护程序通信以便管理docker服务。

3.docker与VM的区别

不同点containerVM
启动速度秒级分钟级
运行性能接近原生(直接在内核中运行)50%左右损失
磁盘占用MBGB
运行数量成百上千一般几十台
隔离性进程级别系统级别(更彻底)
操作系统主要支持Linux几乎所有
封装程度只打包项目代码和依赖关系,共享宿主机内核完整的操作系统,与宿主机隔离

四、docker原理

Docker核心解决的问题是利用LX容器来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。同VM的方式不同, LX容器 其并不是一套硬件虚拟化方法,无法归属到全虚拟化、部分虚拟化和半虚拟化中的任意一个,而是一个操作系统级虚拟化方法, 理解起来可能并不像VM那样直观。所以我们从虚拟化到docker要解决的问题出发,看看他是怎么满足用户虚拟化需求的

用户需要考虑虚拟化方法,尤其是硬件虚拟化方法,需要借助其解决的主要是以下4个问题:

  1. 隔离性 - 每个用户实例之间相互隔离, 互不影响。 硬件虚拟化方法给出的方法是VM, LX容器给出的方法是container,更细一点是kernel namespace
  2. 可配额/可度量 - 每个用户实例可以按需提供其计算资源,所使用的资源可以被计量。硬件虚拟化方法因为虚拟了CPU, memory可以方便实现, LX容器则主要是利用cgroups来控制资源
  3. 移动性 - 用户的实例可以很方便地复制、移动和重建。硬件虚拟化方法提供snapshot和image来实现,docker(主要)利用AUFS实现
  4. 安全性 - 这个话题比较大,这里强调是host主机的角度尽量保护container。硬件虚拟化的方法因为虚拟化的水平比较高,用户进程都是在KVM等虚拟机容器中翻译运行的, 然而对于LXC, 用户的进程是lxc-start进程的子进程, 只是在Kernel的namespace中隔离的, 因此需要一些kernel的patch来保证用户的运行环境不会受到来自host主机的恶意入侵, dotcloud(主要是)利用kernel grsec patch解决的.

cgroup和namespace两者构成了docker的底层原理

1.名称空间(Namespaces)

LX容器所实现的隔离性主要是来自内核的namespace, 其中pid, net, ipc, mnt, uts 等namespace将container的进程, 网络, 消息, 文件系统和hostname 隔离开。

容器隔离了6个名称空间

名称作用
mount文件系统,挂载点
user操作进程的用户和用户组
pid进程编号
UTS主机名或主机域
ipc信号量,消息队列,共享内存
net网络设备,网络协议栈,端口等

linux内核版本3.8才完善了6个命名空间,因此linux内核版本3.8+才可以运行docker

2.控制组(control groups)

cgoups是linux内核态中的资源管理模块,linux上的docker引擎还依赖与另一种称为控制组(cgroups)的技术。cgroups将应用程序限制为一组特定的资源,控制组允许docker engine将可用的硬件资源共享给容器,并有选择的实施限制和约束。例如可以限制特定容器可用的内存。

五、docker部署

环境配置

关闭防火墙

[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# setenforce 0

更改主机名

[root@node1 ~]# hostnamectl set-hostname docker
[root@node1 ~]# su -

安装docker依赖环境

[root@docker ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

设置阿里云镜像资源

[root@docker ~]# cd /etc/yum.repos.d
[root@docker ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装Docker-CE并设置为开机自启

[root@docker ~]# yum install -y docker-ce
[root@docker ~]# systemctl start docker.service    #启动
[root@docker ~]# systemctl enable docker.service   #开机自启

如果安装出错则输入

yum install --setopt=obsoletes=0 \
   docker-ce-17.03.2.ce-1.el7.centos.x86_64 \
   docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch # on a new system with yum repo defined, forcing older version and ignoring obsoletes introduced by 17.06.0

镜像加速器:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

cd /etc/docker   #需先启动docker,才会有该目录 
tee /etc/docker/daemon.json <<-'EOF' 
{
  "registry-mirrors": ["https://..."]
}
EOF
systemctl daemon-reload		
#修改了docker服务配置文件,可以使用重载使配置文件生效
systemctl restart docker

image-20220113153950951

#网络优化
vim /etc/sysctl.conf
net.ipv4.ip_forward=1		#ipv4转发功能
 
sysctl -p   #刷新

image-20220113154132936

总结

1.docker的三要素:镜像、容器、仓库

2.使用容器的意义,docker引擎的三个统一:基础设施环境,程序打包方式,程序运行方式

3.C/S架构交互

4.docker与VM的区别

5.docker底层原理

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值