一、简介

1、介绍

   Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

一个完整的Docker有以下几个部分组成:

1、docker Client 客户端

Docker提供给用户的客户端。Docker Client提供给用户一个终端,用户输入Docker提供的命令来管理本地或者远程的服务器。

2、Docker Daemon守护进程

Docker服务的守护进程。每台服务器(物理机或虚机)上只要安装了Docker的环境,基本上就跑了一个后台程序Docker Daemon,Docker Daemon会接收Docker Client发过来的指令,并对服务器的进行具体操作。

3、Docker Image镜像

俗称Docker的镜像,可以认为这个就像我们要给电脑装系统用的系统CD盘,里面有操作系统的程序,并且还有一些CD盘在系统的基础上安装了必要的软件,做成的一张 “只读” 的CD。

4、Docker Container容器

俗称Docker的容器,这个是最关键的东西了。Docker Container是真正跑 项目程序、消耗机器资源、提供服务的地方,Docker Container通过Docker    Images启动,在Docker Images的基础上运行你需要的代码。 你可以认为   Docker Container提供了系统硬件环境,然后使用了Docker Images这些制  作好的系统盘,再加上你的项目代码,跑起来就可以提供服务了。

5、Docker Registry 

   这个可认为是Docker Images的仓库,就像git的仓库一样,用来管理Docker  镜像的,提供了Docker镜像的上传、下载和浏览等功能,并且提供安全的账 号管理可以管理只有自己可见的私人image。就像git的仓库一样,docker  也提供了官方的Registry,叫做Dock Hub。

docker服务端和客户端版本 服务器docker_docker服务端和客户端版本

docker服务端和客户端版本 服务器docker_centos_02

   我们通过客户端写命令,然后客户端将命令发送给守护进程,守护进程再将命令执行的结果返回给客户端,这就使我们能通过命令查看执行结果,镜像就是容器的源代码,容器通过镜像启动,使用仓库来保存用户构建的镜像,仓库分为共有和私有。

   Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。

                     Docker        面向对象

                     容器          对象

                     镜像          类

   Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。

   上层的image依赖下层的image,因此docker中把下层的image称作父image,没有父image的image称作base image,因此想要从一个image启动一个container,docker会先加载其父image直到base image。

2、优势

docker image的体积非常的小,一个完整功能的ubuntu才100多mb。docker image如此小的体积,让我们可以方便的在网络上传输和分享,对于公司来说就提供了对大量image的管理和分发的可能。

docker的系统启动的耗时为0。启动系统的耗时,命令完成就直接输出了结果。程序执行完后container也跟着关闭,也并没有保存镜像的时间,但下次再运行还是会保留你处理过的状态。

docker系统占用资源极少,我们知道如果我们开启了一个vm的系统,不论是linux的或者windows,就算什么都不运行都会占用一部分内存,但是docker container启动后如果不运行程序,你是看不到系统资源被占用的。

3、与虚拟机的区别

下图是虚拟机与docker的大概原理图,直观上来讲vm多了一层guest OS,同时Hypervisor会对硬件资源进行虚拟化,docker直接使用硬件资源,所以资源利用率相对docker低也是比较容易理解的。

docker服务端和客户端版本 服务器docker_centos_03

虚拟机技术通过Hypervisor层抽象底层基础设施资源,提供相互隔离的虚拟机,通过统一配置、统一管理,计算资源的可运维性,以及资源利用率都能够得到有效的提升。同时,虚拟机提供客户机操作系统,客户机变化不会影响宿主机,能够提供可控的测试环境,更能够屏蔽底层硬件甚至基础软件的差异性,让应用做到的广泛兼容。然而,再牛逼的虚拟化技术,都不可避免地出现计算、IO、网络性能损失,毕竟多了一层软件,毕竟要运行一个完整的客户机操作系统。容器技术严格来说并不是虚拟化,没有客户机操作系统,是共享内核的。容器可以视为软件供应链的集装箱,能够把应用需要的运行环境、缓存环境、数据库环境等等封装起来,以最简洁的方式支持应用运行,轻装上阵,当然是性能更佳。Docker镜像特性则让这种方式简单易行。当然,因为共享内核,容器隔离性也没那么好。

二、安装

1、环境需求

Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。

Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。

2、安装

(注:执行安装过程中切记一定要吧防火墙关掉)

防火墙查看状态:firewall-cmd    --state

防火墙关闭:systemctl  stop   firewalld.service

防火墙开启:systemctl  start   firewalld.service

禁止开机启动启动防火墙:systemctl   disable   firewalld.service

安装执行:yum -y install docker

(注:在Centos6.x中安装docker首先需要安装epel,如果没有安装epel,会报 “No package docker available”)

查看版本:docker -v  或  docker version

启动执行: service docker start

3、卸载

  

yum remove docker
       yum remove docker-selinux

三、常用命令

1、镜像

     1、docker镜像检索:

     # docker search 镜像名

     docker search centos

     2、docker镜像下载:

     # docker pull 镜像名

     docker pull centos

    3、docker镜像列表:

    docker images

    4、docker镜像删除:

    # docker rmi  image-id (镜像id)

    docker rmi 34336sdf12

    5、删除所有镜像:

    docker rmi  $(docker images -q)

    6、镜像导出:

    docker save -o gitlab.tar b0c14a03d594

    7、镜像导入:

    docker load -i gitlab.tar

    8、镜像名称修改:

    docker tag b0c14a03d594 gitlab/gitlab-ce:latest

2、 容器

1、创建并运行容器:

# docker run 镜像命名
   docker run centos
   # 指定容器名
   docker run --name webcentos  centos
   # 以守护进程的方式运行容器
   docker run --name webcentos -d centos

2、容器列表:docker ps

3、容器状态:docker ps -a

4、停止容器:

# docker  stop 容器名称/容器Id
     docker stop webcentos

5、启动容器:

# docker start 容器名称/容器Id
    docker start webcentos

6、删除容器:

# docker rm 容器id
     docker rm 235483s15c

7、删除所有容器:docker rm $(docker ps -a -q)

8、登陆容器:

容器名称/容器id  /bin/bash

   

docker exec -it webcentos /bin/bash
     若/bin/bash 目录报错则
     docker exec -it 容器名称/容器id  /bin/sh

9、容器日志:

# docker logs 容器名称/容器id
     docker logs webcentos

实时查看docker容器日志

$ sudo docker logs -f -t --tail 行数 容器名

 

Run启动时:

-it 为交互式运行,/bin/bash 会启动一个新的shell,运行容器后,我们会离开当前的shell,进到我们新启动的shell中,我们被这个shell带到虚拟的容器环境中。我们在这个虚拟环境中的操作都是相对于容器的。例如查看目录、系统版本等信息时和宿主机就会不同。这时在新终端宿主机shell环境中执行docker ps时可以看到当前运行的容器,但是在容器shell中执行exit,可退出当前容器,这时容器也会停止,可通过docker ps -a 才会查看到我们之前运行过的容器。

 -d 为守护式运行,容器直接运行在后台。运行完成后我们还停留在当前shell中,通过docker ps命令我们可以发现            运行在后台的容器。

Docker inspect ID :命令可以查看容器更多属性。