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入门手册的更多相关文章

  1. docker入门资料及常用命令

      Docker17中文开发手册 :https://www.php.cn/manual/view/36147.html   Linux部署Docker及常用命令: https://www.cnblog ...

  2. 第三章 Docker 入门

    第三章 docker 入门 3.1 确保docker已经就绪 首先查看docker程序是否存在,功能是否正常 [#3#cloudsoar@cloudsoar-virtual-machine ~]$su ...

  3. Github快速入门手册

    最近在试用Github,开源的思想也让人觉得把一些经验分享出来是非常好的事情.附件是doc文件,如有需要请注意查收.希望能对你有帮助. GITHUB基于互联网的版本控制快速入门手册 如有不妥,欢迎指正 ...

  4. Docker入门教程(九)10个镜像相关的API

    Docker入门教程(九)10个镜像相关的API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第九篇,重点介绍了镜像相关的Docker Remote ...

  5. Docker入门教程(八)Docker Remote API

    Docker入门教程(八)Docker Remote API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第八篇,重点介绍了Docker Remote ...

  6. Docker入门教程(七)Docker API

    Docker入门教程(七)Docker API [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第七篇,重点介绍了Docker Registry API和 ...

  7. Docker入门教程(六)另外的15个Docker命令

    Docker入门教程(六)另外的15个Docker命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第六篇,继续介绍Docker命令.之前的第二篇文章 ...

  8. Docker入门教程(五)Docker安全

    Docker入门教程(五)Docker安全 [编者的话]DockOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第五篇,介绍了Docker的安全问题,依然是老话重谈,入门者可以通 ...

  9. Docker入门教程(四)Docker Registry

    Docker入门教程(四)Docker Registry [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第四篇,介绍了Docker Registry,它 ...

随机推荐

  1. LR监听Linux

    1.准备 1)CentOS6.0 2)LR11.0 3)Linux安装包: xinetd-2.3.14-33.el6.i686.rpm (CentOS安装盘自带) rsh-server-0.17-60 ...

  2. RTS寻路算法

    https://docs.unity3d.com/ScriptReference/Physics.OverlapSphere.html https://www.zhihu.com/question/2 ...

  3. 关于JavaScript点击按钮打开多个页面被浏览器以广告嫌疑拦截怎么解决

    JS点击按钮打开新的标签页,工作中遇到需要点击按钮打开一个或多个,需要用到window.open() 工作中我们可能需要打开多个,看以下代码: var data = [{ "id" ...

  4. qdu-小明的贪心题(最短路+最短路的数量 )

    Description 小明来到青岛上学已经一年了,他给青岛这座城市画了一张地图.在这个地图上有n个点,小明的起始点为1号点,终点为n号点,并且地图上的所有边都是单向的.小明知道从i号点到j号点的时间 ...

  5. qdu-凑数题(01背包)

    Description 小Q手里有n(n<=1000) 个硬币,每枚硬币有一定的金额(200=>x>=1)他想知道,用这些硬币(每枚硬币只能用一次,但可能会有等面值的用两次) 能组成 ...

  6. Namomo Cockfight Round 5

    AC代码 A. Number 假设\(n_i\)为十进制数\(n\)的第\(i\)位上的数字,那么\(\max_{i}n_i\)即为答案. B. Mod 用BFS的方法计算可以以\(O(p)\)的复杂 ...

  7. Google Code Jam 2020 Round1B Blindfolded Bullseye

    总结 这一题是道交互题,平时写的不多,没啥调试经验,GYM上遇到了少说交个十几发.一开始很快的想出了恰烂分的方法,但是没有着急写,果然很快就又把Test Set3的方法想到了,但是想到归想到,调了快一 ...

  8. core的 Linq基本使用,简单模拟数据库多表的左右内连接的测试

    1:先看效果: 2:部分代码截图 3:全部代码 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 n ...

  9. Windows docker镜像文件无法删除

    最近刚开始玩docker,下载镜像之前没有修改docker的保存路径,因此默认存在了c:\programdata下面,导致C盘空间不足. 之后修改了保存路径之后( docker engin里加&quo ...

  10. mock接口开发——flask模块

    1.mock接口开发: #1.模拟没有开发好的接口,你可以模拟它,,,,,,,需要调用其他系统的接口 #2.给别人提供数据 2.步骤:1.安装pip install flask 2.导入模块--起服务 ...