三文搞懂学会Docker容器技术(上)
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架构原理?
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是一种轻量级的虚拟化技术,比传统的虚拟机性能更好。
下图是虚拟机的体系结构:
- server - 表示真实电脑。
- Host OS - 真实电脑的操作系统,例如:Windows,Linux
- Hypervisor - 虚拟机平台,模拟硬件,如VMWare,VirtualBox
- Guest OS - 虚拟机平台上安装的操作系统,例如CentOS Linux
- App - 虚拟机操作系统上的应用,例如nginx
下图是Docker的体系结构:
- 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
说明安装OK;
9,Docker HelloWorld测试;
$ docker run hello-world
因为本地没有这个镜像,所以从远程官方仓库去拉取,下载;
然后我们再执行一次;
OK了
2.5 Docker配置阿里云镜像仓库
Docker默认远程仓库是 https://hub.docker.com/
比如我们下载一个大点的东西,龟速
由于是国外主机,类似Maven仓库,慢得一腿,经常延迟,破损;
所以我们一般都是配置国内镜像,比如阿里云,网易云等;推荐阿里云,稳定点;
配置步骤如下:
1,登录进入阿里云镜像服务中心,获取镜像地址
进入阿里云容器镜像服务地址:点这里快速进入
使用你的淘宝账号密码登录
这里我们获取镜像地址;
2,在/etc/docker目录下找到在daemon.json文件(没有就新建),将下面内容写入
{
"registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
}
3,重启daemon
systemctl daemon-reload
4,重启docker服务
systemctl restart docker
5,测试
由于速度太快,截图都难;
3,HelloWorld运行原理
运行 docker run hello-world
本地仓库未能找到该镜像,然后去远程仓库寻找以及下载该镜像;
然后我们再执行该命令:
出来了 Hellowold。我们具体来分析下 执行原理和过程;
从左到右 client客户端,Docker运行主机,远程仓库;
docker build ,pull,run分别是 构建,拉取,运行命令,后面再细讲;
中间Docker主机里有 Docker daemon主运行线程,以及Containers容器,容器里可以运行很多实例,(实例是从右侧Images镜像实例化出来的)Images是存储再本地的镜像文件,比如 Redis,Tomat这些镜像文件;
右侧是Registry镜像仓库,默认远程镜像仓库 https://hub.docker.com/ 不过是国外主机,下载很慢,不稳定,所以我们后面要配置成阿里云仓库镜像地址,稳定快捷;
执行 docker run hello-world的过程看如下图例:
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 列出本机所有镜像
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
有镜像生成的容器再运行时候,会报错,删除失败;
我们需要加 -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」创作共享协议,转载请在文章明显位置注明作者及出处。
------------------------------------------------------------------------------------------------------------------------------
回复关键字「666」获取66套Java实战项目视频教程,你要的都有!
回复关键字「全栈」获取Java从入门到大神系列全栈开发教程;
回复关键字「面试」获取一份2020Java笔试面试题;
回复关键字「简历」获取50套Java经典优秀简历模版;
回复关键字「BAT」获取历年来BAT笔试面试题打包合集;