Docker(一):Docker入门教程

现在Docker的使用已经很是广泛,特别在一线互联网公司。使用Docker技术能够帮助企业快速水平扩展服务,从而到达弹性部署业务的能力。在云服务概念兴起以后,Docker的使用场景和范围进一步发展,现在在微服务架构愈来愈流行的状况下,微服务+Docker的完美组合,更加方便微服务架构运维部署落地。html

本文详细解释介绍Docker入门相关内容,后期重点关注Docker在微服务体系中的使用。在了解Docker以前咱们先考虑几个问题:一、Docker是什么?二、为何要使用Docker,它有什么优点?带着这些问题咱们来看看下面的内容。linux

什么是Docker?

Docker 是世界领先的软件容器平台。开发人员利用 Docker 能够消除协做编码时“在个人机器上可正常工做”的问题。运维人员利用 Docker 能够在隔离容器中并行运行和管理应用,得到更好的计算密度。企业利用 Docker 能够构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为 Linux 和 Windows Server 应用发布新功能。git

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行同样。有了 Docker,就不用担忧环境问题。sql

整体来讲,Docker 的接口至关简单,用户能够方便地建立和使用容器,把本身的应用放入容器。容器还能够进行版本管理、复制、分享、修改,就像管理普通的代码同样。docker

Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多年云服务技术的一次革新,并于 2013 年 3 月以 Apache 2.0 受权协议开源,主要项目代码在 GitHub 上进行维护。Docker 项目后来还加入了 Linux 基金会,并成立推进 开放容器联盟(OCI)。json

Docker 自开源后受到普遍的关注和讨论,至今其 GitHub 项目已经超过 4 万 6 千个星标和一万多个 fork。甚至因为 Docker 项目的火爆,在 2013 年末,dotCloud 公司决定更名为 Docker。Docker 最初是在 Ubuntu 12.04 上开发实现的;Red Hat 则从 RHEL 6.5 开始对 Docker 进行支持;Google 也在其 PaaS 产品中普遍应用 Docker。centos

为何要使用Docker

容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽可能小。传统虚拟机方式运行 10 个不一样的应用就要起 10 个虚拟机,而Docker 只须要启动 10 个隔离的应用便可。api

具体说来,Docker 在以下几个方面具备较大的优点。tomcat

一、更快速的交付和部署安全

对开发和运维(devop)人员来讲,最但愿的就是一次建立或配置,能够在任意地方正常运行。

开发者可使用一个标准的镜像来构建一套开发容器,开发完成以后,运维人员能够直接使用这个容器来部署代码。 Docker 能够快速建立容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其余成员更容易理解应用程序是如何建立和工做的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。

二、更高效的虚拟化

Docker 容器的运行不须要额外的 hypervisor 支持,它是内核级的虚拟化,所以能够实现更高的性能和效率。

三、更轻松的迁移和扩展

Docker 容器几乎能够在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、我的电脑、服务器等。 这种兼容性可让用户把一个应用程序从一个平台直接迁移到另一个。

四、更简单的管理

使用 Docker,只须要小小的修改,就能够替代以往大量的更新工做。全部的修改都以增量的方式被分发和更新,从而实现自动化而且高效的管理。

Docker vs VM

从下图能够看出,VM是一个运行在宿主机之上的完整的操做系统,VM运行自身操做系统会占用较多的CPU、内存、硬盘资源。Docker不一样于VM,只包含应用程序以及依赖库,基于libcontainer运行在宿主机上,并处于一个隔离的环境中,这使得Docker更加轻量高效,启动容器只需几秒钟以内完成。因为Docker轻量、资源占用少,使得Docker能够轻易的应用到构建标准化的应用中。但Docker目前还不够完善,好比隔离效果不如VM,共享宿主机操做系统的一些基础库等;网络配置功能相对简单,主要以桥接方式为主;查看日志也不够方便灵活。

Docker(一):Docker入门教程

Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的建立和维护。使得 Docker 技术比虚拟机技术更为轻便、快捷。

做为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具备众多的优点。Docker 容器的启动能够在秒级实现,这相比传统的虚拟机方式要快得多;Docker 对系统资源的利用率很高,一台主机上能够同时运行数千个 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入门教程

了解了Docker的组成,再来了解一下Docker的三个主要概念:

  • Docker image:镜像是只读的,镜像中包含有须要运行的文件。镜像用来建立container,一个镜像能够运行多个container;镜像能够经过Dockerfile建立,也能够从Docker hub/registry上下载。
  • Docker container:容器是Docker的运行组件,启动一个镜像就是一个容器,容器是一个隔离环境,多个容器之间不会相互影响,保证容器中的程序运行在一个相对安全的环境中。
  • Docker hub/registry: 共享和管理Docker镜像,用户能够上传或者下载上面的镜像,官方地址为https://registry.hub.docker.com/,也能够搭建本身私有的Docker registry。

镜像就至关于打包好的版本,镜像启动以后运行在容器中,仓库就是装存储镜像的地方。

Docker安装

建议在linux环境下安装Docker,window环境搭建比较复杂且容易出错,使用Centos7+yum来安装Docker环境很方便。

Docker 软件包已经包括在默认的 CentOS-Extras 软件源里。所以想要安装 docker,只须要运行下面的 yum 命令:

yum install docker

安装完成后,使用下面的命令来启动 docker 服务,并将其设置为开机启动:

service docker start
chkconfig docker on

LCTT 译注:此处采用了旧式的 sysv 语法,如采用CentOS 7中支持的新式 systemd 语法,以下:

systemctl start docker.service
systemctl enable docker.service

测试

docker version

输入上述命令,返回docker的版本相关信息,证实docker安装成功。

Hello World

下面,咱们经过最简单的 image 文件"hello world",感觉一下 Docker。

由于国内链接 Docker 的官方仓库很慢,所以咱们在平常使用中会使用Docker 中国加速器。经过 Docker 官方镜像加速,中国区用户可以快速访问最流行的 Docker 镜像。该镜像托管于中国大陆,本地用户如今将会享受到更快的下载速度和更强的稳定性,从而可以更敏捷地开发和交付 Docker 化应用。

Docker 中国官方镜像加速可经过registry.docker-cn.com访问。该镜像库只包含流行的公有镜像,私有镜像仍须要从美国镜像库中拉取。

修改系统中docker对应的配置文件便可,以下:

vi  /etc/docker/daemon.json
#添加后
{
    "registry-mirrors": ["https://registry.docker-cn.com"],
    "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
#显示结果
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
docker.io/hello-world           latest              f2a91732366c        3 months ago        1.848 kB

如今,运行这个 image 文件。

docker run hello-world

#显示结果
Hello from Docker!
This message shows that your installation appears to be working correctly.
...

输出这段提示之后,hello world就会中止运行,容器自动终止。有些容器不会自动终止,由于提供的是服务,好比Mysql镜像等。

经常使用命令

除过以上咱们使用的Docker命令外,Docker还有一些其它经常使用的命令

拉取docker镜像

docker pull image_name

查看宿主机上的镜像,Docker镜像保存在/var/lib/docker目录下:

docker images

删除镜像

docker rmi  docker.io/tomcat:7.0.77-jre7   或者  docker rmi b39c68b7af30

查看当前有哪些容器正在运行

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信息

docker info

从Docker hub上下载某个镜像:

docker pull centos:latest
docker pull centos:latest

执行docker pull centos会将Centos这个仓库下面的全部镜像下载到本地repository。

参考

Docker — 从入门到实践
Docker系列之一:入门介绍
Docker 入门教程