Docker 是一个能够把开发应用程序自动部署到容器的开源引擎。
一,为什么要用 Docker?
Docker 是一个能够把开发运用程序主动布置到容器的开源引擎。它由Docker公司的团队编写,依据Apache 2.0开源协议授权。它供给了一个简略、轻量的建模办法,使开发生命周期更高效快速,鼓舞了面向服务的架构规划。Docker 项目的方针是完成轻量级的操作体系虚拟化解决方案。 Docker 的根底是 Linux 容器(LXC)等技能。在 LXC 的根底上 Docker 进行了进一步的封装,让用户不需求去关怀容器的办理,使得操作更为简洁。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机相同简略。
Docker 的特色:
1,更快速的交给和布置
2,更高效的虚拟化
3,更轻松的搬迁和扩展
4,更简略的办理
容器技能与传统虚拟机功用比照:
Docker与虚拟机建构比照
Docker 容器本质上是宿主机上的一个进程。Docker 经过 namespace 完成了资源阻隔,经过 cgroups 完成了资源的约束,经过写时仿制机制(copy-on-write)完成了高效的文件操作。
Docker有五个命名空间:
进程、网络、挂载、宿主和同享内存
为了阻隔有问题的运用,Docker运用Namespace将进程阻隔,为进程或进程组创立已阻隔的运转空间,为进程供给不同的命名空间视图。这样,每一个阻隔出来的进程组,对外就表现为一个container(容器)。需求留意的是,Docker让用户误以为自己占有了悉数资源,但这并不是”虚拟机”。
Docker 中的三个概念:镜像,容器,库房
1、镜像(image):Docker 镜像便是一个只读的模板,镜像能够用来创立 Docker 容器。Docker 供给了一个很简略的机制来创立镜像或许更新现有的镜像,用户乃至能够直接从其他人那里下载一个现已做好的镜像来直接运用。
镜像是一种文件结构。Dockerfile中的每条指令都会在文件体系中创立一个新的层次结构,文件体系在这些层次上构建起来,镜像就构建于这些联合的文件体系之上。Docker官方网站专门有一个页面来存储一切可用的镜像,网址是:index.Docker.io。
2、容器( Container):容器是从镜像创立的运转实例。它能够被发动、开端、中止、删去。每个容器都是彼此阻隔的、确保安全的渠道。能够把容器看做是一个简易版的 Linux 环境,Docker 运用容器来运转运用。镜像是只读的,容器在发动的时分创立一层可写层作为最上层。
3、库房:库房是会集寄存镜像文件的场所,库房注册服务器(Registry)上往往寄存着多个库房,每个库房中又包含了多个镜像,每个镜像有不同的标签(tag)。现在,***的揭露库房是 Docker Hub,寄存了数量巨大的镜像供用户下载。
Docker库房用来保存咱们的images,当咱们创立了自己的image之后咱们就能够运用push指令将它上传到公有或许私有库房,这样下次要在别的一台机器上运用这个image时分,只需求从库房上pull下来就能够了。Docker 库房的概念跟 Git 相似,注册服务器能够了解为 GitHub 这样的保管服务。
二,装置 Docker
前提条件:Docker运转对内核要求比较高,因而一般主张直接在Ubuntu这样的渠道运转。但作为一个容器规范,Docker也是支撑其他如CentOS, Mac OS X, Windows等渠道。现在Docker支撑以下版别CentOS:CentOS 7(64位)CentOS 6.5(64位)及今后在运转CentOS 6.5及今后版别时,需求内核版别>=2.6.32-431,由于这些内核包含了运转Docker的一些特定修正。
Docker默许运用AUFS作为存储驱动,可是AUFS并没有被包含在Linux的主线内核中。CentOS中能够运用Device Mapper作为存储驱动,这是在2.6.9内核版别引进的新功用。咱们需求先承认是否启用该功用:
CentOS 7装置
Docker RPM包现已包含在CentOS-Extra库房中,所以咱们能够直接运用Yum装置:
- #yuminstalldocker
CentOS 6.6装置
需求留意的是,CentOS6.6中,现已有一个同名docker的可执行体系程序包。所以Docker RPM包命名为docker-io,咱们先卸掉docker。
- #yum-yremovedocker
第三步 Install Docker-IO
- #yum-yinstalldocker-io
这样完成了Docker的装置。
- #/etc/init.d/dockerstart#发动docker
- #dockerinfo#检查docker根本信息
三, Docker 根本操作
- #dockersearchcentos#查找容器
- #dockerpullcentos#下载容器
- #dockerimages#检查当时存在的镜像
- #dockerruncentos/bin/echo'helloworld'#运转一条指令后直接退出
- #dockerrun--namemydocker-itcentos/bin/bash#进入docker容器
- -t选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的规范输入上,
- -i则让容器的规范输入坚持翻开。
- –name运用一个自定义的姓名
- #dockerrun-d--namemynginxnginx#发动nginx镜像,没有会主动pull
- #dockerstopbfd094233f96#中止一个容器,依据容器id进行删去
- #dockerrmbfd094233f96#删去一个容器
- #dockerattachd20f3dc6cd92#进入一个正在运转的容器
- 此指令不太好用,主张运用以下指令进入容器:
- [root@localhostdocker]#dockerinspect--format"{{.State.Pid}}"mynginx#获取容器pid
- 19769
- [root@localhostdocker]#nsenter--target19769--mount--uts--ipc--net--pid#进入容器(引荐办法)
- #dockerrun-d-p91:80--namemynginx2nginx#-p指定端口映射,将80映射为host的91
存储镜像:
- #dockersave-oubuntu_14.04.tarubuntu:14.04
载入镜像:
- #dockerload<ubuntu_14.04.tar或许运用
- #catubuntu.tar|dockerimport-test/ubuntu:v1.0
移除本地镜像:
- #dockerrmitraining/sinatra
整理一切未打过标签的本地镜像:
- #dockerrmi$(dockerimages-q-f"dangling=true")
- 其间-q和-f是quiet,–filter的缩写,完好的指令其实能够写着下面这样,是不是更简单了解一点?
- #dockerrmi$(dockerimages--quiet--filter"dangling=true")
- 注:容器是否会持久运转,是和dockerrun指定的指令有关,和-d参数无关。
要获取容器的输出信息,能够经过 docker logs 指令。
- #dockerlogs[containerIDorNAMES]
删去容器:
0
- #yum-yremovedocker
有关容器和镜像的底层信息:
1
- #yum-yremovedocker
能够检查:
容器实例的IP地址端口绑定列表
特定端口映射的查找
搜集装备的详细信息
从容器内仿制文件到指定的途径上:
2
- #yum-yremovedocker
运用Dockerfile来构建镜像:
3
- #yum-yremovedocker
知优网 » Docker 从入门到通晓(一)根本操作(docker深入理解)