文章目录
- 前言
- 一、Docker 概述
- Docker容器与传统虚拟化的比较
- 二、Docker的底层原理★★★★
- 三、Docker的三大核心概念
- 3.1 镜像(image)
- 3.2 容器(container)
- 3.3 仓库(repository)
- 三、Docker社区版安装
- 3.1 环境配置
- 3.2 安装依赖包
- 3.3 设置阿里云镜像源
- 3.4 安装docker-ce社区版
- 3.5 设置镜像加速
- 3.6 设置路由转发
- 3.7 查看docker版本、
- 3.7 配置docker的网段两种方式
前言
在介绍Docker之前,需要知道什么是虚拟化,为什么要使用虚拟化,以Linux而言,linux操作系统会有一个主进程PID=1,由主进程派生出其他进程来控制不同得服务,比如:PID=2 运行的是nginx服务,PID=3 运行的是tomcat服务等等,服务之间可能会互相影响,为了让不同的服务运行在不同的运行时环境中实现互不影响,同时又不增加服务器成本,衍生出了虚拟化技术,实现了在一个系统之上模拟多个操作系统(不同的运行时环境),随着技术的发展,虚拟化技术的开销较大,比如,只想运行一个py的脚本,但是却需要创建一个虚拟的操作系统,这并不合理,于是又衍生出了容器技术,将虚拟化层的抽象层(用户层)剥离,使用 docker engine 来替代(替代来宾操作系统,也就是虚拟机),只需要通过docker 引擎就可以直接连接到宿主及操作系统中,极大减小了开销。
一、Docker 概述
Docker是在Linux容器里运行应用的开源工具,是一种轻量级的虚拟机。诞生于2013年。
Docker是一个用于开发,交付和运行应用程序的开放平台。能够将应用程序于基础架构分开,从而可以快速交付软件。
Docker是一个应用容器引擎,让开发者可以以打包的方式封装系统、应用、以及依赖包等到一个可移植的镜像中,然后发布到任何流行的Linux或者Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制(隔离机制),相互之间不会有任何接口。做到了“一次封装,到处运行”。
Docker容器与传统虚拟化的比较
特性 | Docker | 虚拟机 |
启动速度 | 秒级 | 分钟级 |
计算能力损耗 | 接近无 | 损耗50%左右 |
磁盘占用 | MB级 | GB级 |
数量 | 上千个(进程) | 几十个(操作系统) |
隔离性 | 进程级别 | 系统级别 |
封装程度 | 只打包项目代码和依赖关系,共享宿主机内核 | 完整的操作系统,与宿主机隔离 |
操作系统 | 主要支持Linux | 几乎所有 |
二、Docker的底层原理★★★★
Docker使用一种称为namespaces提供容器的隔离工作区的技术。运行容器时,Docker会为该容器创建一 组名称空间。
这些名称空间提供一层隔离。容器的每个方面都在单独的名称空间中运行,并且其访问仅限于该名称空间。
通过Linux中内核态的管理模块 cgroups (Control groups) 控制组 与 namespace 结合,控制管理了6个名称空间资源来实现应用之间的完整隔离。
6个名称空间介绍如下:
①、mount:文件系统,挂载点------->一个文件系统内,不能重复挂载一个指定目录
②、user:操作进程的用户和用户组
③、pid:进程编号
④、uts:主机名和主机域
⑤、ipc:信号量、消息队列,共享内存
⑥、net:网络设备、网络协议栈、端口等
三、Docker的三大核心概念
3.1 镜像(image)
Docker镜像是创建容器的基础,类似虚拟机的快照,可以理解为Docker容器的模板,比如:一个镜像可以是一个完整的Centos操作系统环境,称为Centos镜像,也可以是安装了Nginx的应用程序,称之为Nginx镜像,等等。
Docker可以自己创建镜像文件,也可以从网上下载已经做好的应用镜像来直接使用。
3.2 容器(container)
Docker容器是镜像运行的实例,它可以被启动、
停止、删除。所创建的每一个容器都相互隔离。
3.3 仓库(repository)
Docker 仓库是用来存放镜像的地方,当创建了镜像之后可以使用 push 命令将它上传到公共仓库(public)或者私人仓库(private),当下次需要在别的机器上使用镜像的时候,只需要从仓库上使用 pull 命令下载下来就可以了。
三、Docker社区版安装
3.1 环境配置
systemctl stop firewalla
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
SELINUX=disabled
vim /etc/reslov.conf
nameserver 114.114.114.114
3.2 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2 //device:存储驱动 lvm2:控制工具
3.3 设置阿里云镜像源
cd /etc/yum.repos.d/
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.4 安装docker-ce社区版
yum install -y docker-ce //开启Docker
systemctl start docker
systemctl enable docker
3.5 设置镜像加速
1、登录阿里云官网,点击控制台
2、鼠标移动到菜单的导航图标上
3、在搜索框输入:镜像
4、点击 容器镜像服务
5、点击镜像工具,点击镜像加速器,获取镜像加速地址
6、通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
3.6 设置路由转发
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
systemctl restart network
systemctl restart docker
3.7 查看docker版本、
三种方法:
docker -v :显示简要的版本信息
docker version : 显示docker client 和 docker server 的详细信息
docker info :更加详细的显示docker的所有信息
[root@docker ~]# docker -v
Docker version 20.10.8, build 3967b7d
[root@docker ~]# docker version
Client: Docker Engine - Community
Version: 20.10.8
API version: 1.41
Go version: go1.16.6
Git commit: 3967b7d
Built: Fri Jul 30 19:55:49 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.8
API version: 1.41 (minimum version 1.12)
Go version: go1.16.6
Git commit: 75249d8
Built: Fri Jul 30 19:54:13 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.9
GitCommit: e25210fe30a0a703442421b0f60afac609f950a3
runc:
Version: 1.0.1
GitCommit: v1.0.1-0-g4144b63
docker-init:
Version: 0.19.0
GitCommit: de40ad0
[root@docker ~]# docker info
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Build with BuildKit (Docker Inc., v0.6.1-docker)
scan: Docker Scan (Docker Inc., v0.8.0)
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 2
Server Version: 20.10.8
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
Default Runtime: runc
Init Binary: docker-init
containerd version: e25210fe30a0a703442421b0f60afac609f950a3
runc version: v1.0.1-0-g4144b63
init version: de40ad0
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-957.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 3.683GiB
Name: docker
ID: 4KTG:EZRQ:4XKL:FLOB:BPPH:J3SS:LLT7:E2ZS:YUVE:L73B:AIFH:6ABL
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://rpw1odqr.mirror.aliyuncs.com/
Live Restore Enabled: false
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
[root@docker ~]#
3.7 配置docker的网段两种方式
- ①:配置文件vim /etc/docker/daemon.json内添加"bip": “IP地址/24”
- ②:命令行配置