Docker 系列一(概念原理和安装).
一、概念原理
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。—— 百度百科
之前一直有一个误区,老听人说 Docker 是一个容器,应用程序打包好镜像,然后在这个容器中运行,以此达到 "一次封装,处处运行"(Build,Ship and Run Any App,Anywhere)的目的。其实不然,Docker 只是一个应用程序引擎(引擎的基础是Linux自带的容器(Linux Containers,LXC)技术),然后每一个进程都是一个容器 —— 运行于 Docker引擎上的容器。
Docker 在运行时分为 Docker 引擎(也就是服务端守护进程)和客户端工具。Docker 的引擎提供了一组 REST API,被称为 Docker Remote API,而如 docker 命令这样的客户端工具,则是通过这组 API 与 Docker 引擎交互,从而完成各种功能。因此,虽然表面上我们好像是在本机执行各种 docker 功能,但实际上,一切都是使用的远程调用形式在服务端(Docker 引擎)完成。也因为这种 C/S 设计,让我们操作远程服务器的 Docker 引擎变得轻而易举。
Client 和 Server可以运行在同一台集群,也可以通过跨主机实现远程通信。

传统的虚拟机技术和容器技术的区别?
传统虚拟机技术是虚拟出一套硬件后(内存分一点,磁盘分一点),在宿主上运行一个完整操作系统,在该系统上再运行所需要的应用进程;而容器内没有自己的内核,而且也没有进行硬件虚拟,应用进程直接运行于宿主的内核,而且进程和进程之间是相隔离的,是一个操作系统级别的虚拟化技术。
Docker 的优势:
1、更高效的利用系统资源(不需要进行硬件虚拟以及运行完整操作系统等额外开销,一个相同配置的主机,往往可以运行更多数量的应用。单机支持上千个容器)
2、更快速的启动时间
3、一致的运行环境
4、持续交付和部署
5、更轻松的迁移
6、更轻松的维护和扩展
Docker 包括三个基本概念:
镜像:是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等) 。镜像不包含任何动态数据,其内容在构建之后也不会被改变,任何用户程序都可以成为镜像的一部分。
镜像=操作系统+软件运行环境+用户程序。
容器:镜像和容器的关系,就像是面向对象程序设计中类和实例的关系,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立命名空间。容器内的进程是运行在一个隔离的环境中,使用起来,就好像是在一个独立于宿主的系统下操作一样。
每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,容器存储层的的生命周期和容器一样,容器消亡时,容器存储层也随之消亡。按照 Docker 的最佳实践,容器不应该向存储层写入任何数据,容器存储层要保持无状态变化。所有的文件写入操作,都应该使用 数据卷(Volume) 、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储) 发生读写,其性能和稳定性更高。
Docker Register:一个集中的存储、分发镜像的服务,一个Docker Register 中可以包含多个仓库(打包好的软件镜像);每个仓库可以包含多个标签(一个软件的多个版本镜像);
tips:官方的镜像库 https://hub.docker.com/
国内阿里云的镜像库 https://cr.console.aliyun.com/
二、安装
下面仅介绍 CentOS 安装 Docker CE,支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10。
1、内核版本

2、系统版本

3、使用以下命令卸载旧版本的 Docker
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
4、安装依赖包并添加 Docker 源
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$ sudo yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
5、安装 Docker CE
$ sudo yum makecache fast
$ sudo yum -y install docker-ce
6、启动 Docker
$ sudo systemctl enable docker
$ sudo systemctl start docker
7、建立 docker 用户组
默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。完成前面的步骤,会自动建立 docker 用户组。
建立 docker 用户组:
$ sudo groupadd docker
添加用户到 docker 用户组:
$ sudo usermod -aG docker $USER
8、测试是否安装成功
退出当前终端并重新登陆(必须),输入如下命令验证是否成功:

9、安装镜像加速
修改 /etc/docker/daemon.json 文件,写入以下内容:
{
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}
重启服务:
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
分享一篇很好的 Docker 文章:Docker 入门教程
参考资料:《Docker — 从入门到实践》
Docker 系列一(概念原理和安装).的更多相关文章
- Docker系列之实战:3.安装MariaDB
环境 [root@centos181001 ~]# cat /etc/centos-release CentOS Linux release 7.6.1810 (Core) [root@centos1 ...
- Docker 系列01: Centos7.3 上安装docker
Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE. 社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施.容器 ...
- docker系列 参考文章
Docker 系列一(概念原理和安装) Docker 系列二(操作镜像) Docker 系列三(容器管理) 持续更新... ubuntu 安装docker 参考文章 :(https://blog.cs ...
- Docker系列(一)Docker概述,核心概念讲解,安装部署
部分内容参考链接: Docker实战总结(非常全面,建议收藏) 一. Docker概述 Docker是一个开源的应用容器引擎(基于Go语言开发),让开发者可以打包他们的应用以及依赖包到一个可移植的容器 ...
- Docker系列之原理简单介绍
目录 1.1.Docker架构简介 1.2.Docker 两个主要部件 1.3.虚拟机和Docker对比: 1.4.Docker内部结构 Docker系列之原理简单介绍 @ Docker是一个开源的应 ...
- Docker 入门及安装[Docker 系列-1]
docker 如日中天,这不是单纯的炒概念,docker 确确实实解决了开发与运维的痛点,因此在企业开发中得到了非常广泛的使用,本文对于 docker 的这些基本知识点再做一些简单回顾. 什么是 do ...
- Docker系列-(1) 原理与基本操作
Docker是一个开源的应用容器引擎,基于Go语言,并遵从Apache2.0协议开源. Docker可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的Linux机器 ...
- Docker+Redis镜像的原理以及部署安装(超详解附截图)
文章来源:公众号-智能化IT系统. 一. DOCKER介绍 Docker简介 (1)Docker 是一个开源的应用容器引擎,基于 Go 语言,并遵从Apache2.0协议开源. (2)Docker 可 ...
- docker的核心概念和安装
里Dcoker的安装要求 我这里安装的是在vmware下的centos7 64位 并且通过模拟远程连接xshell 我在安装好之后就配置了静态ip,这里我就不多说怎么配置了 具体静态ip配置可以参考 ...
随机推荐
- 使用python访问网络上的数据
这两天看完了Course上面的: 使用 Python 访问网络数据 https://www.coursera.org/learn/python-network-data/ 写了一些作业,完成了一些作业 ...
- 在MFC中支持sqlite3
在vc环境下支持sqlite3的方法有很多,sqlite官网也有推荐sqlitewrappers列表,我选用的是CppSqlite 建立MFC工程的步骤我就不赘述了,以下操作均假设你已经创建好了一个M ...
- Dubbo 源码分析 - 服务引用
1. 简介 在上一篇文章中,我详细的分析了服务导出的原理.本篇文章我们趁热打铁,继续分析服务引用的原理.在 Dubbo 中,我们可以通过两种方式引用远程服务.第一种是使用服务直联的方式引用服务,第二种 ...
- 【java】java反射初探 ——“当类也学会照镜子”
反射的作用 开门见山地说说反射的作用 1.为我们提供了全面的分析类信息的能力 2.动态加载类 我理解的“反射”的意义 (仅个人理解哈) 我理解的java反射机制就是: 提供一套完善而强 ...
- Spring源码追踪1——doGetBean(为什么org.springframework.data.redis.core.RedisTemplate的实例可以注入为ListOperations)
类org.springframework.beans.factory.support.AbstractBeanFactory方法T doGetBean(final String name, final ...
- Android NDK学习(七):NDK 编译支持 C++特有的库
如果你的C++代码中出现了很多C++特有的库,例如<iostream>,<list>等,那么你还需要在jni的文件夹下添加一个Application.mk文件,文件内容为: A ...
- Ubuntu18.04搭建nodejs环境
首先安装sudo apt install curl 然后安装命令(当前最新版本是0.33.2,最新版本可以在https://github.com/creationix/nvm查看): curl -o- ...
- SpringBoot中集成redis
转载:https://www.cnblogs.com/zeng1994/p/03303c805731afc9aa9c60dbbd32a323.html 不是使用注解而是代码调用 需要在springbo ...
- 使用线程统计信息(Thread Statistics)
可在session log中使用线程统计信息来判断source,target或组的性能瓶颈 默认情况下,Integration Service在运行session时,使用一个reader thread ...
- HC-06蓝牙模块的使用
HC-06蓝牙模块与HC-05的AT指令变化还是挺大的,在模块上电后红灯闪烁表示未连接成功,常亮表示连接成功,期间只要红灯处于闪烁即是进入了AT模式,可发送AT指令,灯常亮使用AT指令无效.下面是常用 ...