文章目录

  • 前言
  • 一、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社区版 功能对比 docker3.0_名称空间

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、登录阿里云官网,点击控制台

docker社区版 功能对比 docker3.0_Docker_02


2、鼠标移动到菜单的导航图标上

docker社区版 功能对比 docker3.0_docker_03


3、在搜索框输入:镜像

docker社区版 功能对比 docker3.0_Docker_04


4、点击 容器镜像服务

docker社区版 功能对比 docker3.0_名称空间_05


5、点击镜像工具,点击镜像加速器,获取镜像加速地址

docker社区版 功能对比 docker3.0_Docker_06


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”
  • ②:命令行配置