?作者主页:青花锁 ?简介:Java领域优质创作者?、Java微服务架构公号作者?
?简历模板、学习资料、面试题库、技术互助
?文末获取联系方式 ?
系列文章目录
云原生之Docker篇第一章 Docker 概述与安装
文章目录
系列文章目录Docker简介传统虚拟机和容器传统虚拟机(virtual machine)Linux 容器(Linux Container,简称LXC) Docker运行速度快的原因Docker有比虚拟机更少的抽象层Docker利用的是宿主机的内核,而不需要加载操作系统OS内核 Docker软件Docker镜像Docker容器Docker仓库Docker架构CentOS安装Docker卸载旧版本配置yum资源库安装Docker引擎查询版本列表启动docker引擎设置开机自启卸载Docker运行HelloWorld测试Docker 下载加速方式1方式2 往期热门专栏回顾
Docker简介
Docker 是基于 Go 语言实现的云开源项目。
Docker 的主要目标是:Build, Ship and Run Any App, Anywhere,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP及其运行环境能做到一次镜像,处处运行。
传统虚拟机和容器
传统虚拟机(virtual machine)
传统虚拟机技术基于安装在主操作系统上的虚拟机管理系统(如VirtualBox、VMware等),创建虚拟机(虚拟出各种硬件),在虚拟机上安装操作系统,再从操作系统中安装部署各种应用。
缺点:资源占用多、冗余步骤多、启动慢
Linux 容器(Linux Container,简称LXC)
Linux 容器是与系统其他部分分隔开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。
Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一的运行。
对比:
Docker运行速度快的原因
Docker有比虚拟机更少的抽象层
由于Docker不需要Hypervisor(虚拟机)实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在CPU、内存利用率上docker有明显优势。
Docker利用的是宿主机的内核,而不需要加载操作系统OS内核
当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免引寻、加载操作系统内核返回等比较耗时耗资源的过程。当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程是分钟级别的。而Docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需要几秒钟。
Docker容器的本质就是一个进程。
Docker软件
Docker 并非一个通用的容器工具,它依赖于已经存在并运行的Linux内核环境。(在Windows上安装Docker时需要依赖WLS,也即Windows下的Linux子系统)。
Docker 实质上是在已经运行的Linux下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的Linux主机。
Docker的基本组成部分:
● 镜像(image)
● 容器(container)
● 仓库(repository)
Docker镜像
Docker 镜像就是一个只读的模板。镜像可以用来创建Docker容器,一个镜像可以创建多个容器。
Docker容器
Docker 利用容器独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是用镜像创建的运行实例。
Docker仓库
Docker 仓库是集中存放镜像文件的场所。
仓库分为公开仓库和私有仓库两种。
最大的公开仓库是 Docker 官方的 Docker Hub:https://hub.docker.com/
Docker架构
Docker 是一个 C/S(Client-Server) 结构的系统,后端是一个松耦合架构,众多模块各司其职。
Docker 守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从容器接收命令并管理运行在主机上的容器。
Docker 运行的基本流程为:
CentOS安装Docker
参考官网:https://docs.docker.com/engine/install/centos/
卸载旧版本
如果之前安装过Docker,需要先卸载旧版本:
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
旧版本的Docker引擎包可能叫做:docker、docker-engine。
新版本的Docker引擎包叫做:docker-ce
配置yum资源库
安装yum-config-manager:
# yum-util提供yum-config-manager功能 sudo yum install -y yum-utils
配置docker的资源库地址:
● 阿里云镜像地址:
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
阿里云官网提供了很多资源镜像,镜像地址:https://mirrors.aliyun.com,进入之后可以选择自己需要的资源进行配置
● 创建缓存(更新缓存):
yum makecache fast
安装Docker引擎
安装最新版本的Docker引擎、Docker客户端:
# docker-ce是Docker引擎,docker-ce-cli是客户端sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
此时,默认安装的docker引擎、客户端都是最新版本。
如果要安装指定版本:
查询版本列表
yum list docker-ce --showduplicates | sort -r# 指定版本安装17.09.0.ce版# sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-compose-pluginsudo yum install docker-ce-17.09.0.ce docker-ce-cli-17.09.0.ce containerd.io docker-compose-plugin
启动docker引擎
如果没有启动Docker引擎,那么执行 docker version查看版本号时,只能看到 Client: Docker Engine(Docker引擎客户端)的版本号。
启动Docker引擎:
# 新版本的Docker就是一个系统服务,可以直接使用启动系统服务方式启动systemctl start docker# 此时查看docker版本,可以看到Server: Docker Engine(Docker引擎)版本号docker version
设置开机自启
systemctl enable docker
卸载Docker
卸载Docker步骤:
关闭服务systemctl stop docker
使用yum删除docker引擎 sudo yum remove docker-ce docker-ce-cli containerd.io
删除镜像、容器、卷、自定义配置等文件 sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd
运行HelloWorld测试
运行HelloWorld:
docker run hello-world
Docker 下载加速
方式1
使用 网易数帆、阿里云等容器镜像仓库进行下载。
例如,下载网易数帆镜像中的mysql。(网易数帆的地址为 hub.c.163.com,网易数帆对dockerhub官方的镜像命名空间为 library)。
docker pull hub.c.163.com/library/mysql:latest
方式2
配置阿里云加速
登录阿里云,进入 工作台 -> 容器镜像服务 -> 镜像工具 -> 镜像加速器。
里面提供了一个加速器地址:https://xxxxx.mirror.aliyuncs.com,将该地址配置到docker中:
cd /etc/docker
# 初次进来时没有/etc/docker/daemon.json文件,直接创建该文件即可vi /etc/docker/daemon.json
在daemon.json中写入以下内容:(即加速器地址)
{ "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"] }
然后刷新配置、重启docker即可:
# centos6 的命令sudo chkconfig daemon-reloadsudo service docker restart# centos7 的命令sudo systemctl daemon-reloadsudo systemctl restart docker
往期热门专栏回顾
专栏 | 描述 |
---|---|
Java项目实战 | 介绍Java组件安装、使用;手写框架等 |
Aws服务器实战 | Aws Linux服务器上操作nginx、git、JDK、Vue |
Java微服务实战 | Java 微服务实战,Spring Cloud Netflix套件、Spring Cloud Alibaba套件、Seata、gateway、shadingjdbc等实战操作 |
Java基础篇 | Java基础闲聊,已出HashMap、String、StringBuffer等源码分析,JVM分析,持续更新中 |
Springboot篇 | 从创建Springboot项目,到加载数据库、静态资源、输出RestFul接口、跨越问题解决到统一返回、全局异常处理、Swagger文档 |
Spring MVC篇 | 从创建Spring MVC项目,到加载数据库、静态资源、输出RestFul接口、跨越问题解决到统一返回 |
华为云服务器实战 | 华为云Linux服务器上操作nginx、git、JDK、Vue等,以及使用宝塔运维操作添加Html网页、部署Springboot项目/Vue项目等 |
Java爬虫 | 通过Java+Selenium+GoogleWebDriver 模拟真人网页操作爬取花瓣网图片、bing搜索图片等 |
Vue实战 | 讲解Vue3的安装、环境配置,基本语法、循环语句、生命周期、路由设置、组件、axios交互、Element-ui的使用等 |
Spring | 讲解Spring(Bean)概念、IOC、AOP、集成jdbcTemplate/redis/事务等 |
资料获取,更多粉丝福利,关注下方公众号获取