共计 3544 个字符,预计需要花费 9 分钟才能阅读完成。
导读 | Docker 是一个能够把开发应用程序自动部署到容器的开源引擎。它由 Docker 公司的团队编写,基于 Apache 2.0 开源协议授权。它提供了一个简单、轻量的建模方式,使开发生命周期更高效快速,鼓励了面向服务的架构设计。 |
Docker 是一个能够把开发应用程序自动部署到容器的开源引擎。它由 Docker 公司的团队编写,基于 Apache 2.0 开源协议授权。它提供了一个简单、轻量的建模方式,使开发生命周期更高效快速,鼓励了面向服务的架构设计。Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。Docker 的基础是 Linux 容器 (LXC) 等技术。在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。
1,更快速的交付和部署
2,更高效的虚拟化
3,更轻松的迁移和扩展
4,更简单的管理
Docker 与虚拟机建构对比
Docker 容器本质上是宿主机上的一个进程。Docker 通过 namespace 实现了资源隔离,通过 cgroups 实现了资源的限制,通过写时复制机制 (copy-on-write) 实现了高效的文件操作。
进程、网络、挂载、宿主和共享内存
为了隔离有问题的应用,Docker 运用 Namespace 将进程隔离,为进程或进程组创建已隔离的运行空间,为进程提供不同的命名空间视图。这样,每一个隔离出来的进程组,对外就表现为一个 container(容器)。需要注意的是,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 运行对内核要求比较高,因此一般建议直接在 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 内核版本引入的新功能。我们需要先确认是否启用该功能:
Docker RPM 包已经包含在 CentOS-Extra 仓库中,所以我们可以直接使用 Yum 安装:
# yum install docker
需要注意的是,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 search centos #搜索容器
# docker pull centos #下载容器
# docker images #查看当前存在的镜像
# docker run centos /bin/echo 'hello world' #运行一条命令后直接退出
# docker run --name mydocker -it centos /bin/bash #进入 docker 容器
-t 选项让 Docker 分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,-i 则让容器的标准输入保持打开。–name 使用一个自定义的名字
# docker run -d --name mynginx nginx #启动 nginx 镜像,没有会自动 pull
# docker stop bfd094233f96 #停止一个容器,根据容器 id 进行删除
# docker rm bfd094233f96 #删除一个容器
# docker attach d20f3dc6cd92 #进入一个正在运行的容器
此命令不太好用,建议使用以下命令进入容器:
[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 表示在构建过程中不使用缓存