Docker-基本概述

1-容器化和虚拟化

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

1.1 虚拟化

1、在最早的时候,我们想要在线上部署一个应用。我们需要先购买服务器,然后安装操作系统及各种依赖环境,最后进行应用的部署。

2、存在问题

  • 部署应用上线应用过程时间非常长
  • 购买服务器的花费不菲
  • 物理服务器的资源容易浪费
  • 迁移和扩展比较困难

3、解决方案:

通过虚拟化技术,可以解决以上问题,虚拟化技术就是在操作系统上多加了一个虚拟化层(Hypervisor),可以将物理机的CPU、内存、硬盘、网络等资源进行虚拟化,再通过虚拟化出来的空间上安装操作系统,构建虚拟的应用程序执行环境,这就是通常说的虚拟机,比如:VMware 、VirtualBox等软件。

4、虚拟化技术的优点

  • 提升IT效率,降低运维成本。
  • 更快地部署工作负责,提高应用性能。
  • 提高服务器可用性,消除服务器梳理剧增情况和复杂性。

5、虚拟机的缺点

  • 占用资源较多,性能较差。
  • 扩展能力较差,环境迁移能力较差。

因此,结合以上特点,容器化技术诞生了。

1.2 容器化

容器化起源集装箱。集装箱 ——全球物流系统中一个非常重要的发明。在运输之前一次性将货物封装好到集装箱里面,之后的集装箱直接放到卡车、火车、货轮上,而且集装箱是统一标准的,自然容易机械化,因此集装箱的革命,节省了大量的资源、物流成本大大降低。

容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。

容器特点:

  • 容器共享宿主机内核。
  • 容器使用内核的功能对进程进行分组和资源限制。
  • 容器通过命名空间保证隔离。
  • 容器像是轻量级的VM(占用空间更少,速度更快),但不是虚拟机。

容器化和传统虚拟化对比

传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程。
而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。
因此容器要比传统虚拟机更为轻便。每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。

2- Docker概述

2.1 什么是Docker

官网地址: http://www.docker.com

文档地址: https://docs.docker.com/

Docker Hub官网: https://hub.docker.com/

1、Docker开源项目背景

Docker是基于Go语言实现的开源容器项目,诞生于2013年年初,最初发起者是dotCloud公司(Docker Inc),Docker项目已加入了Linux基金会,并遵循Apache2.0协议,全部开源代码均在https://github.com/docker/docker上进行维护。Docker的构想是要实现“Build,Ship and Run Any App, Anywhere”,即通过对应用的封装(Packaging),分发(Distribution),部署(Deployment),运行(Runtime)生命周期进行管理,达到应用组件一次封装,到处运行的目的。这里的应用组件,既可以是一个Web应用、一个编译环境,也可以是一套数据库平台服务,甚至是一个操作系统或集群。
Docker首次为应用的开发、运行和部署提供了“一站式”的实用解决方案。

2、Linux容器技术(LXC)

早期的Docker是基于Linux容器技术(Linux Containers,LXC)的。最早的容器技术可以追溯到1982 年Unix系列操作系统上的chroot工具(直到今天,主流的Unix、Linux操 作系统仍然支持和带有该工具)。早期的容器实现技术包括Sun Solaris 操作系统上的Solaris Containers(2004年发布),FreeBSD操作系统上的 FreeBSD jail(2000年左右出现),以及GNU/Linux上的Linux-VServer和 OpenVZ。

3、从Linux容器到Docker

在LXC的基础上,Docker进一步优化了容器的使用体验,Docker提供了各种容器管理工具(如分发、版本、移植等)让用户无需关注底层的操作,可以更简单明了地管理和使用容器,Docker通过引入分层文件系统构建(aufs)和高效的镜像机制,降低了迁移难度,极大地提升了用户体验。自0.9版本开始,Docker 开发了libcontainer项目,作为更广泛的容器驱动实现,从而替换掉了LXC的实现。

2.2 Docker的应用场景

快速,一致地交付应用程序、镜像打包环境,避免了环境不一致的问题 Docker可以为开发人员提供 标准化 的本地工作环境给应用程序和服务,从而简化了开发生命周期。容器非常适合持续集成和持续交付(CI / CD)工作流程。

1、响应式部署和扩展

Docker是基于容器的平台允许高度可移植的工作负载。Docker容器可以在开发人员的本地笔记本电脑上,数据中心中的物理或虚拟机上,云提供商上或混合环境中运行。 Docker的可移植性和轻量级的特性还使可以轻松地动态管理工作负载,并根据业务需求指示实时扩展或拆除应用程序和服务。

2、在同一个硬件上运行更多工作负载

Docker轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行,经济高效的替代方案,因此我们可以利用更多的计算能力来实现业务目标。Docker非常适合于高密度环境以及中小型部署,而需要用更少的资源做更多的事情。

2.3 为什么要使用Docker

更快速的应用交付和部署

传统方式: 一堆帮助文档,安装程序!!

Docker : 打包镜像发布测试,一键运行。

更便捷的升级和扩缩容

使用了Docker之后,部署应用就和搭积木一样!!

项目打包为一个镜像,扩展 服务器A,服务器B!

更简单的系统运维

在容器化之后,开发,测试环境都是高度一致的。

更高效的计算资源利用

Docker是内核级别的虚拟化,可以在一个物理机上运行很多的容器实例,服务器的性能可以压榨到极致。

2.4 Docker与虚拟机比较

Docker是一种轻量级的虚拟化方式与传统虚拟机技术的特性比较如下表:

特 性 容 器 虚 拟 机
启动速度 秒级 分钟级
性能 接近原生 较弱
内存代价 很小 较多
硬盘使用 一般为MB 一般为GB
运行密度 单机支持上千个容器 一般几十个
隔离性 安全隔离 完全隔离
迁移性 优秀 一般

传统的虚拟机方式提供的是相对封闭的隔离。Docker利用Linux系统上的多种防护技术实现了严格的隔离可靠性,并且可以整合众多安全工具。从 1.3.0版本开始,Docker重点改善了容器的安全控制和镜像的安全机制, 极大提高了使用Docker的安全性。

3- Docker快速实战

3.1 Docker的基本组成

Docker引擎

Docker使用客户端-服务器架构,Docker客户端是用户与Docker交互的主要方式,与Docker守护进程(Docker引擎)进行通信该守护进程完成了构建,运行和分发Docker容器的繁重工作。

Docker客户端和守护程序可以在同一系统上运行,也可以将Docker客户端连接到远程Docker守护程序。Docker客户端和守护程序在UNIX套接字或网络接口上使用REST API进行通信。Docker守护进程侦听Docker API请求并管理Docker对象,例如镜像,容器,网络和卷等。守护程序还可以与其他守护程序通信以管理Docker服务。

Docker镜像

Docker镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。镜像是基于联合(Union)文件 系统的一种层式的结构,由一系列指令一步一步构建出来。

镜像是创建Docker容器的基础。通过版本管理和增量的文件系统, Docker提供了一套十分简单的机制来创建和更新现有的镜像,用户可以从网上下载一个已经做好的应用镜像,并直接使用。

Docker容器

Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的,启动,停止,删除,基本命令!!目前就可以把这个容器理解为就是一个简易的linux系统。

Docker仓库

仓库就是存放镜像的地方,仓库分为公有仓库和私有仓库,目前,最大的公开仓库是 官方提供的Docker Hub,其中存放了数量庞大的镜像供用户下载。国内不少云服务提供商(如时速云、阿里云等)也提供了仓库的本地源,可以提供稳定的国内访问。Docker也支持用户在本地网络内创建一个只能自己访问的私有仓库。

3.2 Docker安装

Docker在主流的操作系统和云平台上都可以使用,包括Linux操作 系统(如Ubuntu、Debian、CentOS、Redhat等)、MacOS操作系统和 Windows操作系统,以及AWS等云平台。

1、使用docker一定需要连接网络才能操作。

## firewalld的基本使用
启动: systemctl start firewalld

关闭: systemctl stop firewalld

查看状态: systemctl status firewalld 

开机禁用: systemctl disable firewalld

开机启用: systemctl enable firewalld

2、yum安装gcc相关环境

yum -y install gcc
yum -y install gcc-c++

3、卸载旧版本的docker(如果没有安装过,请忽略)

yum remove docker 
        docker-client 
        docker-client-latest 
        docker-common 
        docker-latest 
        docker-latest-logrotate 
        docker-logrotate 
        docker-engine

4、yum 包更新到最新

yum update

5、安装需要的软件包,提供yum-config-manager功能,另外两个是devicemapper驱动依赖的。

yum install -y yum-utils device-mapper-persistent-data lvm2

6、设置yum源为阿里云

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

7、安装docker

yum install docker-ce -y

8、安装后查看docker版本

docker -v

3.3 阿里云镜像加速

1、先注册一个阿里云账号。

2、查看阿里云,官方文档: https://cr.console.aliyun.com/cn-qingdao/instances/mirrors

3、进入管理控制台设置密码,开通。

4、查看属于自己的加速器

5、配置镜像加速

可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://5bsomu6l.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

6、测试 HelloWorld

docker run hello-world

7、查看hello world的镜像

[root@Linux ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    d1165f221234   3 months ago   13.3kB
centos        7         8652b9f0cb4c   6 months ago   204MB

8、run主要干了啥?

3.4 Docker基本操作

1、启动docker

systemctl start docker

2、停止docker

systemctl stop docker

3、重启docker、

systemctl restart docker

4、查看docker状态

systemctl status docker


5、开机启动

systemctl enable docker


6、开机不自启

systemctl unenable docker

7、查看docker概要信息

docker info

8、查看docker帮助文档

docker –help

9、查看日志

docker logs -f 镜像名

10、卸载docker

systemctl stop docker
yum -y remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker

3.5 Docker底层原理

Docker是怎么工作的

Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。 容器,是一个运行时环境,就是我们前面说到的集装箱。

为什么Docker比较 VM 快?

1、Docker有着比虚拟机更少的抽象层。

2、docker利用的是宿主机的内核,VM需要是Guest OS。

所以说,新建一个容器的时候,docker不需要想虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是加载Guest OS分级别的,而docker是利用宿主机的操作系统么?省略了这个复杂的过程,妙极了。。

原文地址:https://www.cnblogs.com/Guard9/p/14906553.html