三文搞懂学会Docker容器技术(上)

QQ截图20191009220250.jpg

1,Docker简介

  1.1 Docker是什么?

Docker官网: https://www.docker.com/

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。

  1.2 Docker架构原理?

graphic

 

Docker三要素,镜像,容器,仓库

1.镜像

Docker 镜像(Image)就是一个只读的模板,它可以是一个可运行软件(tomcat,mysql),也可以是一个系统(centos)。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。

2.容器

Docker 利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

3.仓库

仓库(Repository)是集中存放镜像文件的场所,类似GitHub存放项目代码一样,只不过Docker Hub是由来存镜像(image)的。仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag,类似版本号)。

仓库分为公开仓库(Public)和私有仓库(Private)两种形式。

最大的公开仓库是 Docker Hub(https://hub.docker.com/),存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云 等。

 

容器与镜像的关系类似于面向对象编程中的对象与类。

Docker
面向对象
容器
对象
镜像

  1.3 Docker有什么用?

    1,简化环境搭建,提高开发生命周期效率;

    2,大大简化运维工作量;

    3,微服务利器;

  1.4 Docker容器与虚拟机区别?

Docker是一种轻量级的虚拟化技术,比传统的虚拟机性能更好。

下图是虚拟机的体系结构:

graphic

 

  • server - 表示真实电脑。
  • Host OS - 真实电脑的操作系统,例如:Windows,Linux
  • Hypervisor - 虚拟机平台,模拟硬件,如VMWare,VirtualBox
  • Guest OS - 虚拟机平台上安装的操作系统,例如CentOS Linux
  • App - 虚拟机操作系统上的应用,例如nginx

 

下图是Docker的体系结构:

graphic

  • server - 表示真实电脑。
  • Host OS - 真实电脑的操作系统,例如:Windows,Linux
  • Docker Engine - 新一代虚拟化技术,不需要包含单独的操作系统。
  • App - 所有的应用程序现在都作为Docker容器运行。

 

这种体系结构的明显优势是,不需要为虚拟机操作系统提供硬件模拟。所有应用程序都作为Docker容器工作,性能更好。

 
Docker容器
虚拟机(VM)
操作系统
与宿主机共享OS
宿主机OS上运行宿主机OS
存储大小
镜像小,便于存储与传输
镜像庞大(vmdk等)
运行性能
几乎无额外性能损失
操作系统额外的cpu、内存消耗
移植性
轻便、灵活、适用于Linux
笨重、与虚拟化技术耦合度高
硬件亲和性 
面向软件开发者
面向硬件运维者

 

Docker优点:轻量级,速度快,运行应用隔离,方便维护...

2,Docker安装

  2.1 Docker版本介绍

Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE。

社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施、容器、插件等。

社区版按照stable和edge两种方式发布,每个季度更新stable版本,如17.06,17.09;每个月份更新edge版本,如17.09,17.10。

我们平时用社区版就足够了。所以我们安装社区版;

  2.2 Docker安装官方文档

我们主要参考:https://docs.docker.com/install/linux/docker-ce/centos/  来安装;

  2.3 工具准备

前置课程:Centos课程  http://www.java1234.com/javaxuexiluxiantu.html

打包下载: http://pan.baidu.com/s/1i55jJAt

虚拟机 VMware

centos7安装下虚拟机VM上;

连接工具 才用 FinalShell  官方地址:http://www.hostbuf.com/

  2.4 Docker安装步骤

我们切换到root用户

1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。

通过 uname -r 命令查看你当前的内核版本

 $ uname -r

2、使用 root 权限登录 Centos。确保 yum 包更新到最新。

$ yum update

3、卸载旧版本(如果安装过旧版本的话)

$ yum remove docker  docker-common docker-selinux docker-engine

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

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

5、设置yum源

$ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

6,安装最新版本的Docker

$ yum install docker-ce docker-ce-cli containerd.io

7,启动Docker并设置开机启动

$ systemctl start docker

$ systemctl enable docker

8,验证Docker

$ docker version

 graphic

说明安装OK;

9,Docker HelloWorld测试;

$ docker run hello-world

 graphic

因为本地没有这个镜像,所以从远程官方仓库去拉取,下载;

然后我们再执行一次;

 graphic

OK了

  2.5 Docker配置阿里云镜像仓库

Docker默认远程仓库是 https://hub.docker.com/

比如我们下载一个大点的东西,龟速

graphic

 

由于是国外主机,类似Maven仓库,慢得一腿,经常延迟,破损;

所以我们一般都是配置国内镜像,比如阿里云,网易云等;推荐阿里云,稳定点;

配置步骤如下:

1,登录进入阿里云镜像服务中心,获取镜像地址

进入阿里云容器镜像服务地址:点这里快速进入

使用你的淘宝账号密码登录

graphic

 

这里我们获取镜像地址;

2,在/etc/docker目录下找到在daemon.json文件(没有就新建),将下面内容写入

{

 "registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]

}

3,重启daemon

systemctl daemon-reload

4,重启docker服务

systemctl restart docker

5,测试

graphic

由于速度太快,截图都难;

graphic

 

3,HelloWorld运行原理

graphic

运行  docker run hello-world

本地仓库未能找到该镜像,然后去远程仓库寻找以及下载该镜像;

然后我们再执行该命令:

graphic

出来了 Hellowold。我们具体来分析下 执行原理和过程;

graphic

从左到右 client客户端,Docker运行主机,远程仓库;

docker build ,pull,run分别是 构建,拉取,运行命令,后面再细讲;

中间Docker主机里有 Docker daemon主运行线程,以及Containers容器,容器里可以运行很多实例,(实例是从右侧Images镜像实例化出来的)Images是存储再本地的镜像文件,比如 Redis,Tomat这些镜像文件;

右侧是Registry镜像仓库,默认远程镜像仓库 https://hub.docker.com/  不过是国外主机,下载很慢,不稳定,所以我们后面要配置成阿里云仓库镜像地址,稳定快捷;

执行 docker run hello-world的过程看如下图例:

graphic

 

 

 

4,Docker基本命令

   4.1 启动Docker

           systemctl start docker

  4.2 停止Docker

         systemctl stop docker

  4.3 重启Docker

       systemctl restart docker

  4.4 开机启动Docker

     systemctl enable docker

  4.5 查看Docker概要信息

   docker info

  4.6 查看Docker帮助文档

   docker --help

  4.7 查看Docker版本信息

     docker version

5,Docker镜像

  5.1 docker images 列出本机所有镜像

graphic

 

REPOSITORY
镜像的仓库源
TAG
镜像的标签(版本)同一个仓库有多个TAG的镜像,多个版本;我们用REPOSITORY:TAG来定义不同的镜像;
IMAGE ID
镜像ID,镜像的唯一标识
CREATE
镜像创建时间
SIZE
镜像大小

OPTIONS 可选参数:

-a
显示所有镜像(包括中间层)
-q
只显示镜像ID
-qa
可以组合
--digests
显示镜像的摘要信息
--no-trunc
显示完整的镜像信息 

 

  5.2 docker search 搜索镜像

和 https://hub.docker.com/ 这里的搜索效果一样;

OPTIONS可选参数:

--no-trunc
显示完整的镜像描述
-s
列出收藏数不小于指定值的镜像
--automated
只列出Docker Hub自动构建类型的镜像

 

 

 

  5.3 docker pull 下载镜像

docker pull 镜像名称:[TAG]

注意:不加TAG,默认下载最新版本latest

  5.4 docker rmi 删除镜像

1,删除单个:docker rmi 镜像名称:[TAG]

如果不写TAG,默认删除最新版本latest

有镜像生成的容器再运行时候,会报错,删除失败;

graphic

我们需要加 -f 强制删除

2,删除多个:docker rmi -f 镜像名称1:[TAG] 镜像名称2:[TAG]

中间空格隔开

3,删除全部:docker rmi -f $(docker images -qa)

 

 

------------------------------------------------------------------------------------------------------------------------------

作者: java1234_小锋

出处:https://www.cnblogs.com/java688/p/13132444.html

版权:本站使用「CC BY 4.0」创作共享协议,转载请在文章明显位置注明作者及出处。

------------------------------------------------------------------------------------------------------------------------------

 

posted @ 2020-06-21 23:51  java锋哥  阅读(779)  评论(0编辑  收藏  举报