一、Docker 概述
1.1、Docker 是什么
- 是一种轻量级的“虚拟机”
- Docker是一个用于开发,交付和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件。
- 是一个开源的应用容器引擎,让开发者可以打包大门的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或者Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口
- 沙箱(Sandbox):在计算机安全领域,沙箱是一种程序的隔离运行机制
- Docker从一开始就以提供标准化的运行时环境为目标,真正做到“build once, run anywhere”,可以将同一个构建版本用于开发、测试、预发布、生产等任何环境,并且做到了与底层操作系统的解耦。在此基础上还进一步发展出了CaaS(容器即服务)技术。
1.2、Docker 使用场景
- 打包应用程序简单部署
- 部署微服务
- 提供PAAS产品(平台即服务){OpenStack的云主机类似于阿里云的ECS,属于IAAS、Docker(K8S) 属于PAAS}
- 持续集成和持续交付(CI/CD):开发到测试发布
- 可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦),例如:服务器从腾讯云迁移到阿里云
1.3、容器与虚拟机的区别
区别 | container | VM |
---|---|---|
启动速度 | 秒级 | 分钟级 |
运行性能 | 接近原生(直接在内核中运行) | 5%左右损失 |
磁盘占用 | MB | GB |
数量 | 成百上千 | 一般几十台 |
隔离性 | 进程级别 | 系统级别(更彻底) |
操作系统 | 主要支持Linux | 几乎所有 |
封装程度 | 只打包项目代码和依赖关系,共享宿主机内核 | 完整的操作系统,与宿主机隔离 |
1.4、Docker 核心概念
- 镜像
- 一个面向docker容器引擎的只读模板
- 容器
- 从镜像创建的运行实列
- 仓库
- 集中保存镜像的地方
二、Docker 的安装部署
关闭防火墙和核心防护
[root@docker ~]# systemctl stop firewalld && systemctl disable firewalld
[root@docker ~]# setenforce 0
安装依赖包
[root@docker ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
设置阿里云镜像源
[root@docker ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker-ce
[root@docker ~]# yum -y install docker-ce ## 安装
[root@docker ~]# systemctl start docker.service ## 启动docker服务
[root@docker ~]# systemctl enable docker.service ## 开机启动docker服务
镜像加速
我们使用Docker服务下载官方公共镜像的时候会发现非常慢,这是国内的客观原因导致的,我们可以通过阿里云的镜像加速器来实现下载提速
[root@docker ~]# tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://fm8gbn3.mirror.aliyuncs.com"]
}
EOF
[root@docker ~]# systemctl daemon-reload
[root@docker ~]# systemctl restart docker
网络优化
[root@docker ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@docker ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@docker ~]# systemctl restart network
[root@docker ~]# systemctl restart docker
安装完docker后,会自动分配一块网卡
[root@docker ~]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:e8:d2:27:8e txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
它的功能就像安装VM时自动给你分配的VM1与VM8,用于宿主机的物理网卡(比如ens33),与docker内部容器的网络连通