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,它 ...
随机推荐
- eclipse 设置默认编码为Utf-8 详细教程。
需要设置的几处地方为: Window->Preferences->General ->Content Type->Text->JSP 最下面设置为UTF-8 Window ...
- node.js的安装及其相关环境变量的配置
笔者最近一直重置电脑,本来想换台mac,想了想还是加下配置吧. 于是慢慢的一直会去安装node 接下来进入教程环节 一.NodeJS下载 1.下载NodeJS安装包下载地址:NodeJS下载 2.开始 ...
- python小白入门基础(一:注释)
# 注释:就是对代码的解释,方便大家阅读代码.注释后的代码程序不会执行.# 注释的分类:单行注释和多行注释# (1)单行注释# 在代码前面加个#字符print("hello world&qu ...
- Spring Cloud:Consul基础知识
一.基本概念 Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go开发. 它提供微服务系统中的服务治理.配置中心.控制总线等功能. 服务发现:提供HTTP和DNS两种发 ...
- GitHub 热点速览 Vol.36:当股票遇到机器学习,异常股无所遁形
作者:HelloGitHub-小鱼干 摘要:虽然上周的 GitHub Trending 榜新项目寥寥无几,但胜在表现不俗,例如:通过机器学习来检测异常股票的项目 Surpriver,还有腾讯开源的管理 ...
- 小程序开发-媒体组件video使用入门
video 视频(v2.4.0 起支持同层渲染).相关api:wx.createVideoContext 常见属性如下: 支持的格式 示例: <video src="http://wx ...
- 使用IntersectionObserver 实现下拉加载更多
IntersectionObserver是浏览器原生提供的构造函数,接受两个参数:callback是可见性变化时的回调函数,option是配置对象(该参数可选). <!DOCTYPE html& ...
- C008:输入显示日期
代码: #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { int day,month,year; do{ pri ...
- Ubuntu查看并修改主机名的方法
1 查看主机名 在Ubuntu系统中,快速查看主机名有多种方法: 在终端窗口中,主机名通常位于@符号后:root@lzyws739307453:~#例如这个的主机名就是lzyws739307453. ...
- Ant Jmeter Jenkins生成html测试报告
Ant配置1. 将jmeter安装目录或者源码目录下\apache-jmeter-3.1\extras的ant-jmeter-1.1.1.jar复制到ant安装目录下apache-ant-1.10.3 ...