李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
工具
正文
Docker简介
Leefs
2020-01-05 AM
1727℃
0条
# Docker简介 ### 前言 我们在做开发的过程中经常遇到这样的问题,在自己电脑上可以运行的程序,在别人的电脑上不一定能运行起来。能不能让软件自带环境,在用户安装软件的时候连当初的系统环境一起安装了? 这就是Docker要解决的问题。 ### 一、概念 **1. Docker是什么?** Docker是一个开源的应用容器引擎,开发者可以打包自己的应用到容器里面,然后迁移到其他机器的docker应用上,可以实现快速部署。如果出现故障,可以通过镜像进行快速恢复服务。 **2. 原理** Docker是利用Linux内核虚拟机技术(LXC),提供轻量级的虚拟化,以便隔离进程和资源。LXC不是硬件的虚拟化,而是Linux内核级别的虚拟化,相对于传统的虚拟机,节省了很多硬件资源。 **NameSpace** LXC是利用内核namespace技术,进行进程隔离。其中pid, net, ipc, mnt, uts 等namespace将container的进程, 网络, 消息, 文件系统和hostname 隔离开。 **Control Group** LXC利用的宿主机共享的资源,虽然用namespace进行隔离,但是资源使用没有收到限制,这里就需要用到Control Group技术,对资源使用进行限制,设定优先级,资源控制等。 **3. 为什么选择Docker?** (1)上手快。 用户只需要几分钟,就可以把自己的程序“Docker化”。Docker依赖于“写时复制”(copy-on-write)模型,使修改应用程序也非常迅速,可以说达到“随心所致,代码即改”的境界。 随后,就可以创建容器来运行应用程序了。大多数Docker容器只需要不到1秒中即可启动。由于去除了管理程序的开销,Docker容器拥有很高的性能,同时同一台宿主机中也可以运行更多的容器,使用户尽可能的充分利用系统资源。 (2)职责的逻辑分类 使用Docker,开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如何管理容器。Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境一致性。从而降低那种“开发时一切正常,肯定是运维的问题(测试环境都是正常的,上线后出了问题就归结为肯定是运维的问题)” (3)快速高效的开发生命周期 Docker的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让你的应用程序具备可移植性,易于构建,并易于协作。(通俗一点说,Docker就像一个盒子,里面可以装很多物件,如果需要这些物件的可以直接将该大盒子拿走,而不需要从该盒子中一件件的取。) (4)鼓励使用面向服务的架构 Docker还鼓励面向服务的体系结构和微服务架构。Docker推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或者服务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或调试应用程序都变得非常简单,同时也提高了程序的内省性。(当然,可以在一个容器中运行多个应用程序) **4. 容器和虚拟机比较** 下面的图片比较了 Docker 和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。 ![DockeTest01.png][1] 与传统的虚拟机相比,Docker优势体现为启动速度快、占用体积小。 **5. Docker服务器与客户端** Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具Docker以及一整套RESTful API。你可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。 ![1-2.png][2] **6. Docker镜像与容器** 镜像是构建Docker的基石。用户基于镜像来运行自己的容器。镜像也是Docker生命周期中的“构建”部分。镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构建出来。例如: 添加一个文件; 执行一个命令; 打开一个窗口。 也可以将镜像当作容器的“源代码”。镜像体积很小,非常“便携”,易于分享、存储和更新。 Docker可以帮助你构建和部署容器,你只需要把自己的应用程序或者服务打包放进容器即可。容器是基于镜像启动起来的,容器中可以运行一个或多个进程。我们可以认为,镜像是Docker生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。 容器基于镜像启动,一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件或者服务。 所以Docker容器就是: 一个镜像格式; 一些列标准操作; 一个执行环境。 Docker借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker将这个模型运用到自己的设计中,唯一不同的是:集装箱运输货物,而Docker运输软件。 和集装箱一样,Docker在执行上述操作时,并不关心容器中到底装了什么,它不管是web服务器,还是数据库,或者是应用程序服务器什么的。所有的容器都按照相同的方式将内容“装载”进去。 Docker也不关心你要把容器运到何方:我们可以在自己的笔记本中构建容器,上传到Registry,然后下载到一个物理的或者虚拟的服务器来测试,在把容器部署到具体的主机中。像标准集装箱一样,Docker容器方便替换,可以叠加,易于分发,并且尽量通用。 ### 二、Docker安装与启动 **注意:下方命令使用CentOS 7.X版本,如果使用CentOS 6.X会碰上很多麻烦。** (1)yum 包更新到最新 ``` sudo yum update ``` (2)安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 ``` sudo yum install -y yum-utils device-mapper-persistent-data lvm2 ``` (3)设置yum源为阿里云 ``` sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ``` (4)安装docker ``` sudo yum install docker-ce ``` (5)安装后查看docker版本 ``` docker -v ``` ### 三、设置ustc镜像 安装好的Docker默认镜像下载地址是在国外进行下载,现在通过文件配置将镜像改成国内网站,使其下载速度更快。 **ustc简介:** ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。 步骤: 1.先使用如下命令启动Docker ``` systemctl start docker ``` 这里有一个小坑,因为当安装成功Docker直接去修改/etc/docker/daemon.json中的文件内容时,会发现/etc下没有docker目录。 这时候需要先启动docker服务,此时系统自动产生/etc/docker目录 当然此时我们进入到docker目录查看时发现并没有daemon.json文件 这时候需要我们通过touch命令进行创建 ``` touch /etc/docker/daemon.json ``` 2.编辑该文件 ``` vi /etc/docker/daemon.json ``` 在该文件中输入如下内容: ``` { "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] } ``` **注意:`daemon.json`中,除了最后一个键值对,每一个键值对后面都要有逗号** [1]: https://lilinchao.com/usr/uploads/2020/01/1369861553.png [2]: https://lilinchao.com/usr/uploads/2020/01/3691676826.png
标签:
Linux
,
Docker
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/373.html
上一篇
CentOS 7IP配置
下一篇
CentOS中Docker简单命令
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
FileBeat
Git
MySQL
人工智能
MyBatis
BurpSuite
Netty
设计模式
nginx
Ubuntu
微服务
Elastisearch
Spring
Flume
VUE
ClickHouse
ajax
DataWarehouse
前端
序列化和反序列化
Java工具类
Jenkins
Filter
Livy
Linux
Spark SQL
散列
数据结构
JavaWeb
pytorch
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭