什么是Docker?
Docker是世界上领先的软件容器平台。开发人员利用Docker可以消除协作编程时“在我的机器上可以正常工作的问题”,运维人员可以利用Docker在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。
Docker属于Linux容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的Linux容器解决方案。Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了Docker,就不用担心环境问题。
总体来说,Docker的接口相当简单,用户可以方便的创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
Docker最初是dotCloud公司创始人Solomon Hykes在法国期间发起的一个公司内部项目,它是给予dotCloud公司多年云服务技术的一次革新,并与2013年3月以Apache 2.0授权协议开源,主要项目代码早Github上进行维护。Docker项目后来还加入了Linux基金会,并成立推动开放容器联盟(OCI)。
为什么要使用Docker?
容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行10个不同的应用就要起10个虚拟机,而Docker只需要启动10个隔离的应用即可。
具体来说,Docker在以下几个方面具有较大的优势:
1、更快速的交付和部署
对开发和运维人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成后,运维人员可以直接使用这个容器来部署代码。Docker可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容器理解应用程序是如何创建和工作的。Docker容器很轻很快!容器启动时间是秒级的,大量的节约开发、测试、部署的时间。
2、更高效的虚拟化
Docker容器的运行不需要额外的hypervisor支持,它是内核级的虚拟化,因此可以实现更高的性能和效率。
3、更轻松的迁移和扩展
Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
4、更简单的管理
使用Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
相关概念
Docker是CS架构,主要有两个概念:
- Docker daemon:运行在宿主机上,Docker守护进程,用户通过Docker Client(Docker命令)与Docker daemon交互
- Docker client:Docker命令行工具,是用户使用Docker的主要方式,Docker client与Docker daemon通信并将结果返回给用户,Docker client也可以通过socket或者RESTFUL api访问远程的Docker daemon
Docker的组成:
- Docker image:镜像是只读的,镜像中包含有需要运行的文件。镜像用来创建container,一个镜像可以运行多个 container;镜像可以通过Dockerfile创建,也可以从Docker官网下载(hub.docker.com)
- Docker container:容器是Docker的运行组件,启动一个镜像就是一个容器,容器是一个隔离环境,多个容器之间不会相互影响,保证容器中的程序运行在一个相对安全的环境中。
- Docker hub/registry:Docler仓库,共享和管理Docker镜像,用户可以上传或者下载上面的镜像,官方地址为:https://hub.docker.com/,也可以搭建自己私有地Docker registry。
镜像就相当于打包好的版本,镜像启动之后运行在容器中,仓库就是装存储镜像的地方。
Docker安装
Linux安装要求:系统版本必须是3.10以上
安装命令:
yum install docker
安装完成后,使用下面的命令来启动docker服务,并将其设置为开机启动:
service docker start
chkconfig docker on
提示:此处采用了旧式的sysv语法,如采用centOS 7中支持的新式systemd语法,如下所示:
systemctl start docker.service
systemctl enable docker.service
查看docker版本:
docker version
输入上述命令,如返回docker相关版本信息,表示docker安装成功。
Docker常用命令
- 如要修改系统中docker默认仓库位置,修改以下配置文件即可:
vim /etc/docker/daemon.json
{
"registry-mirrors":["指定docker仓库的路径"],
"live-restore":true
}
- 运行以下命令,将image从仓库抓取到本地:
docker pull library/hello-world
解释:docker image pull 是抓取仓库的image文件的命令。library/hello-world是image在仓库中所在的位置,其中library是image文件所在的组,hello-world是image文件的名字。
- 抓取成功后,就可以通过以下命令查看本机的image文件列表:
docker images
最后,运行一下这个image文件:
docker run hello-world
运行完命令,会打印一段运行日志,打印完hello-world也就停止运行,容器自动终止,但有些image文件并不会自动终止,因为提供的是服务,必须Mysql镜像等等。
除了以上使用的命令之外,Docker还有其他的一些命令,如下所示:
- 拉取镜像
docker pull image_name[:tag]
- 查看宿主机上的镜像,默认保存在/var/lib/docker目录下
docker images [options] name[:tag]
- 删除镜像
docker rmi repository-name
或
docker rmi imageID
- 查看当前有哪些容器正在运行
docker ps
- 查看所有容器
docker ps -a
- 启动、停止、重启容器命令
docker start container_name/container_id
docker stop container_name/container_id
docker restart container_name/container_id
- 后台启动一个容器后,如果想进入到这个容器,可以使用attach命令
docker attach container_name/container_id
- 删除容器命令
docker rm container_name/container_id
- 删除所有停止运行的容器
docker rm $(docker ps -a -q)
- 查看当前系统Docker信息
docker info
- 从Docker hub上下载某个镜像
docker pull centos:latest
- 查找Docker Hub上的nginx镜像
docker search nginx