Docker入门手册
20.Docker
20.1 Docker的起源
2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司,这家公司主要提供基于PaaS的云计算技术服务。具体来说,是和LXC [ LXC,就是Linux容器虚拟技术(Linux container) ]有关的容器技术。后来,dotCloud公司将自己的容器技术进行了简化和标准化,并命名为 Docker 。后来公司在竞争之下快坚持不下去时,他们就想到了把Docker给开源出去,让世界更多的人一起参与进来,贡献代码和意见。不开则已,一开惊人,越来越多的IT工程师发现了Docker的优点,然后蜂拥而至,加入Docker开源社区。之后Docker随之火爆流行全球。
20.2 Docker是什么
Docker和容器技术为什么会这么火爆?说白了,就是因为它“轻量级”。
在容器技术之前,业界的主流的虚拟化技术是虚拟机。虚拟机技术的代表,是VMWare和OpenStack。相信很多人都用过虚拟机。虚拟机,就是在你的操作系统里面,装一个软件,然后通过这个软件,再模拟一台甚至多台“子电脑”出来,在“子电脑”里,你可以和正常电脑一样运行程序,例如开QQ。如果你愿意,你可以变出好几个“子电脑”,里面都开上QQ。“子电脑”和“子电脑”之间,是相互隔离的,互不影响。
虚拟机属于虚拟化技术。而Docker这样的容器技术,也是虚拟化技术,属于轻量级的虚拟化,虚拟机虽然可以隔离出很多“子电脑”,但占用空间更大,启动更慢,虚拟机软件可能还要花钱购买激活码。
而容器技术恰好没有这些缺点。它不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境(类似“沙箱”)。它启动时间很快,几秒钟就能完成。而且,它对资源的利用率很高(一台主机可以同时运行几千个Docker容器。此外,它占的空间很小,虚拟机一般要几GB到几十GB的空间,而容器只需要MB级甚至KB级。正因为如此,容器技术受到了热烈的欢迎和追捧,发展迅速。
大家需要注意,Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。
虚拟机,类似于“子电脑”


20.3 Docker的优势是什么
“Build, Ship and Run”!
“搭建、发送、运行”,三板斧。
举个例子:
我来到一片空地,想建个房子,于是我搬石头、砍木头、画图纸,一顿操作,终于把这个房子盖好了。
结果,我住了一段时间,想搬到另一片空地去。这时候,按以往的办法,我只能再次搬石头、砍木头、画图纸、盖房子。
但是,跑来一个老巫婆,教会我一种魔法,可以把我盖好的房子复制一份,做成“镜像”,放在我的背包里。
等我到了另一片空地,就用这个“镜像”,复制一套房子,摆在那边,拎包入住。
所以,Docker的第二句口号就是:“Build once,Run anywhere(搭建一次,到处能用)”。
20.4 Docker的核心概念
Docker技术的三大核心概念,分别是:
* 镜像(Image)
* 容器(Container)
* 仓库(Repository)
我刚才例子里面,那个放在包里的“镜像”,就是Docker镜像。而我的背包,就是Docker仓库。我在空地上,用魔法造好的房子,就是一个Docker容器。
说白了,这个Docker镜像,是一个特殊的文件系统。它除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(例如环境变量)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
也就是说,每次变出房子,房子是一样的,但生活用品之类的,都是不管的。谁住谁负责添置。
** 每一个镜像可以变出一种房子。那么,我可以有多个镜像呀 **
也就是说,我盖了一个欧式别墅,生成了镜像。另一个哥们可能盖了一个中国四合院,也生成了镜像。还有哥们,盖了一个非洲茅草屋,也生成了镜像。。。这么一来,我们可以交换镜像,你用我的,我用你的,岂不是很爽?
于是乎,就变成了一个大的公共仓库。
负责对Docker镜像进行管理的,是Docker Registry服务(类似仓库管理员)。
不是任何人建的任何镜像都是合法的。万一有人盖了一个有问题的房子呢?
所以,Docker Registry服务对镜像的管理是非常严格的。
最常使用的Registry公开服务,是官方的Docker Hub,这也是默认的 Registry,并拥有大量的高质量的官方镜像。
20.5 Docker的安装
1.安装依赖包
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2.设置阿里云镜像源
$ sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.安装Docker-CE
$ sudo yum install docker-ce
4.启动docker
# 开机自启
sudo systemctl enable docker
# 启动docker服务
sudo systemctl start docker
5.镜像加速配置
#加速地址 : 阿里云控制台搜索容器镜像服务,进入容器镜像服务,左侧最下方容器镜像服务中复制加速器地址
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["你的加速器地址"]
}
EOF
# 重新加载docker配置
sudo systemctl daemon-reload
# 重启docker
sudo systemctl restart docker
20.6 Docker demo入门
1.拉去centoS:7镜像
$ sudo docker pull centos:7
2.编写Dockerfile
# 创建一个空文件夹
$ sudo mkdir dockerFileStudy
# 创建Dockerfile文件 (注意文件名称不要错,必须叫Dockerfile)
$ sudo vim Dockerfile
# 编写Dockerfile
From centos:7
ENTRYPOINT ["cd /"]
ENTRYPOINT ["ls"]
# 编译Dockerfile文件 -t 是后面的名字为打成镜像名
$ sudo docker build -t test .
# 启动一个容器运行你的Dockerfile编译的镜像把
$ sudo docker run test
20.7 下面你由你自己来翻阅资料编写一个Dockerfile来集成Tomcat并使用docker启动一个Tomcat吧~~~~
20.8 常见问题 :
1.安装Docker-ce报错
--> Processing Conflict: 1:docker-ce-cli-18.09.6-3.el7.x86_64 conflicts docker
--> Processing Conflict: 1:docker-ce-cli-18.09.6-3.el7.x86_64 conflicts docker-io
--> Processing Conflict: 3:docker-ce-18.09.6-3.el7.x86_64 conflicts docker
--> Processing Conflict: 3:docker-ce-18.09.6-3.el7.x86_64 conflicts docker-io
--> Finished Dependency Resolution
Error: docker-ce conflicts with 2:docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
Error: docker-ce-cli conflicts with 2:docker-1.13.1-96.gitb2f74b2.el7.centos.x86_64
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
# 尝试删除本机上的所有docker服务再次安装
# 1、查看安装过的docker:
$ yum list installed | grep docker
containerd.io.x86_64 1.3.7-3.1.el7 @docker-ce-stable
docker-ce.x86_64 3:19.03.13-3.el7 @docker-ce-stable
docker-ce-cli.x86_64 1:19.03.13-3.el7 @docker-ce-stable
# 2、卸载docker:
$ sudo yum remove -y containerd.io.x86_64 docker-ce.x86_64 docker-ce-cli.x86_64
# 3、删除容器镜像:
$ sudo rm -rf /var/lib/docker
# 4、 重新安装docker
$ sudo yum install docker-ce
2. 编译Dockerfile报错
unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /usr/dockerbuild/Dockerfile: no such file or directory
# 查看Dockerfile名称是否有误
# 查看Dockerfile语法是否正确 左侧docker保留命令是否大写,右侧执行命令是否小写
3. 删除镜像报错
Error response from daemon: conflict: unable to remove repository reference "test" (must force) - container cac0f265950c is using its referenced image 20c5428b958d
# 使用 docker ps -a 查看此镜像是否有启动过的容器 ,如果有,先使用 docker rm 容器id 删除容器 再删除镜像 注意 docker ps - a 查看的是无论是否启动的容器都显示 而 docker ps 是只显示启动的容器
Docker入门手册的更多相关文章
- docker入门资料及常用命令
Docker17中文开发手册 :https://www.php.cn/manual/view/36147.html Linux部署Docker及常用命令: https://www.cnblog ...
- 第三章 Docker 入门
第三章 docker 入门 3.1 确保docker已经就绪 首先查看docker程序是否存在,功能是否正常 [#3#cloudsoar@cloudsoar-virtual-machine ~]$su ...
- Github快速入门手册
最近在试用Github,开源的思想也让人觉得把一些经验分享出来是非常好的事情.附件是doc文件,如有需要请注意查收.希望能对你有帮助. GITHUB基于互联网的版本控制快速入门手册 如有不妥,欢迎指正 ...
- Docker入门教程(九)10个镜像相关的API
Docker入门教程(九)10个镜像相关的API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第九篇,重点介绍了镜像相关的Docker Remote ...
- Docker入门教程(八)Docker Remote API
Docker入门教程(八)Docker Remote API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第八篇,重点介绍了Docker Remote ...
- Docker入门教程(七)Docker API
Docker入门教程(七)Docker API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第七篇,重点介绍了Docker Registry API和 ...
- Docker入门教程(六)另外的15个Docker命令
Docker入门教程(六)另外的15个Docker命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第六篇,继续介绍Docker命令.之前的第二篇文章 ...
- Docker入门教程(五)Docker安全
Docker入门教程(五)Docker安全 [编者的话]DockOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第五篇,介绍了Docker的安全问题,依然是老话重谈,入门者可以通 ...
- Docker入门教程(四)Docker Registry
Docker入门教程(四)Docker Registry [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第四篇,介绍了Docker Registry,它 ...
随机推荐
- 腾讯大牛半年心血高级编程PDF,帮你轻松构建企业级Web应用
毫无疑问,Java 是这些年来最流行的编程语言之一.它无处不在一计算机. 手机.网站以及各种嵌入式设备中都存在着大量的Java 应用程序,而其中应用最为广泛的应该就是Java EE Web应用程序(以 ...
- Android 设备指纹
Android唯一识别号(设备指纹)的生成及原理 https://blog.csdn.net/xiechengfa/article/details/70049409?utm_source=itdada ...
- Go测试开发(一) 怎么写Go代码
安装过程略过,网上搜一大把. 介绍 本文会在一个module中开发一个简单的Go package. 同时介绍go tool(也就是go命令行). 以及如何fetch,build和install Go的 ...
- MySQL通过实体经纬度字段插入数据库point类型的经纬度字段
说明:数据库:表中没有经度跟纬度字段,只有location字段(point类型) POINT(经度 纬度)实体类:只有经度 lng 字段.纬度 lat 字段 没有location字段 <!--添 ...
- python调用接口——requests模块
前提:安装pip install requests 导入import requests 1.get请求 result=requests.get(url,d).json() 或 .text 2. ...
- [ArcGIS]高程地图-把DEM栅格数据(.tif)转换为TIN矢量数据,并储存TIN数据。
把DEM数据(.tif)获得栅格数据对应的经纬度及高程信息,存到地理数据库 一.预处理工作 栅格数据的合并--目的:将原始4张Dem(.tif)数据合并为一张Dem(.tif) https://wen ...
- 【高并发】面试官:Java中提供了synchronized,为什么还要提供Lock呢?
写在前面 在Java中提供了synchronized关键字来保证只有一个线程能够访问同步代码块.既然已经提供了synchronized关键字,那为何在Java的SDK包中,还会提供Lock接口呢?这是 ...
- Spring基于XML的IOC环境搭建及入门
一.使用Maven构建Java项目 * 项目目录结构 1. 在sun.service包下创建UserDao接口和接口实现类: UserDao接口: package sun.service; /** * ...
- Linux实战(11):Centos后期添加网卡配置
前言 最近在折腾网卡,发现在已装centos上的机器上直接加网卡,开机后在系统中是没有启动的,下面的步骤是启动的过程,大家可以参考一下. 正文 首先我们先看网卡配置目录下的文件跟网卡 查询UUID y ...
- 关于bat/cmd中转义符的使用
今天笔者在cmd中准备使用echo 输出<https://www.cnblogs.com/5201351> 发现直接就报错:命令语法不正确. 然后就想到可能是<和>在cmd中有 ...