版权声明:本文由田飞雨原创文章,转载请注明出处:
文章原文连接:https://www.qcloud.com/community/article/93
来源:腾云阁 https://www.qcloud.com/communityhtml
Docker 是一个可以把开发应用程序自动部署到容器的开源引擎。它由Docker公司的团队编写,基于Apache 2.0开源协议受权。它提供了一个简单、轻量的建模方式,使开发生命周期更高效快速,鼓励了面向服务的架构设计。Docker 项目的目标是实现轻量级的操做系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。在 LXC 的基础上 Docker 进行了进一步的封装,让用户不须要去关心容器的管理,使得操做更为简便。用户操做 Docker 的容器就像操做一个快速轻量级的虚拟机同样简单。nginx
Docker 的特色:docker
容器技术与传统虚拟机性能对比ubuntu
Docker与虚拟机建构对比缓存
Docker 容器本质上是宿主机上的一个进程。Docker 经过 namespace 实现了资源隔离,经过 cgroups 实现了资源的限制,经过写时复制机制(copy-on-write)实现了高效的文件操做。安全
Docker有五个命名空间:进程、网络、挂载、宿主和共享内存,为了隔离有问题的应用,Docker运用Namespace将进程隔离,为进程或进程组建立已隔离的运行空间,为进程提供不一样的命名空间视图。这样,每个隔离出来的进程组,对外就表现为一个container(容器)。须要注意的是,Docker让用户误觉得本身占据了所有资源,但这并非”虚拟机”。服务器
Docker 中的三个概念:镜像,容器,仓库网络
镜像(image):Docker 镜像就是一个只读的模板,镜像能够用来建立 Docker 容器。Docker 提供了一个很简单的机制来建立镜像或者更新现有的镜像,用户甚至能够直接从其余人那里下载一个已经作好的镜像来直接使用。
镜像是一种文件结构。Dockerfile中的每条命令都会在文件系统中建立一个新的层次结构,文件系统在这些层次上构建起来,镜像就构建于这些联合的文件系统之上。Docker官方网站专门有一个页面来存储全部可用的镜像,网址是:index.docker.io。架构
容器( Container):容器是从镜像建立的运行实例。它能够被启动、开始、中止、删除。每一个容器都是相互隔离的、保证安全的平台。能够把容器看作是一个简易版的 Linux 环境,Docker 利用容器来运行应用。镜像是只读的,容器在启动的时候建立一层可写层做为最上层。app
仓库:仓库是集中存放镜像文件的场所,仓库注册服务器(Registry)上每每存放着多个仓库,每一个仓库中又包含了多个镜像,每一个镜像有不一样的标签(tag)。目前,最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。
Docker仓库用来保存咱们的images,当咱们建立了本身的image以后咱们就可使用push命令将它上传到公有或者私有仓库,这样下次要在另一台机器上使用这个image时候,只须要从仓库上pull下来就能够了。Docker 仓库的概念跟 Git 相似,注册服务器能够理解为 GitHub 这样的托管服务。
本次实验环境:腾讯云服务器 CentOS 6.7 x86_64
前提条件:
Docker运行对内核要求比较高,所以通常建议直接在Ubuntu这样的平台运行。但做为一个容器标准,Docker也是支持其余如CentOS, Mac OS X, Windows等平台。目前Docker支持如下版本CentOS:
Docker默认使用AUFS做为存储驱动,可是AUFS并无被包括在Linux的主线内核中。CentOS中可使用Device Mapper做为存储驱动,这是在2.6.9内核版本引入的新功能。咱们须要先确认是否启用该功能:
CentOS 7
Docker RPM包已经包含在CentOS-Extra仓库中,因此咱们能够直接使用Yum安装:
# yum install docker
CentOS 6.6
须要注意的是,CentOS6.6中,已经有一个同名docker的可执行系统程序包。因此Docker RPM包命名为docker-io,咱们先卸掉docker。
# yum -y remove docker
第三步 Install Docker-IO
# yum -y install docker-io
这样完成了Docker的安装。
# /etc/init.d/docker start #启动docker
# docker info #查看 docker 基本信息
# docker run -d --name mynginx nginx #启动nginx镜像,没有会自动pull # docker stop bfd094233f96 #中止一个容器,根据容器 id 进行删除 # docker rm bfd094233f96 #删除一个容器 # docker attach d20f3dc6cd92 #进入一个正在运行的容器
-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,
-i 则让容器的标准输入保持打开。
–name 使用一个自定义的名字
此命令不太好用,建议使用如下命令进入容器:
[root@localhost docker] docker inspect --format "{{.State.Pid}}" mynginx #获取容器pid 19769 [root@localhost docker] nsenter --target 19769 --mount --uts --ipc --net --pid #进入容器(推荐方法) docker run -d -p 91:80 --name mynginx2 nginx # -p 指定端口映射,将80映射为host的91
存储镜像:
# docker save -o ubuntu_14.04.tar ubuntu:14.04
载入镜像:
# docker load < ubuntu_14.04.tar 或者使用 # cat ubuntu.tar | docker import - test/ubuntu:v1.0
移除本地镜像:
# docker rmi training/sinatra
清理全部未打过标签的本地镜像:
# docker rmi $(docker images -q -f "dangling=true")
其中 -q 和 -f 是 quiet,–filter 的缩写, 完整的命令其实能够写着下面这样,是否是更容易理解一点?
# docker rmi $(docker images --quiet --filter "dangling=true")
注: 容器是否会长久运行,是和docker run指定的命令有关,和 -d 参数无关。
要获取容器的输出信息,能够经过 docker logs 命令。
# docker logs [container ID or NAMES]
删除容器:
# docker rm 默认并不会删除运行中的容器
有关容器和镜像的底层信息:
# docker inspect container/image
能够查看:
容器实例的IP地址
端口绑定列表
特定端口映射的搜索
收集配置的详细信息
从容器内复制文件到指定的路径上:
# docker cp container:path hostpath
使用Dockerfile来构建镜像:
# docker build [options] PATH | URL
–rm=true表示构建成功后,移除全部中间容器 –no-cache=false表示在构建过程当中不使用缓存