一、Docker入门简介linux
Docker技术相似码头上看到的集装箱,最先集装箱没有出现的时候,码头上有许多搬运的工人在搬运货物,有了集装箱之后,搬运货物变得简单,经过集装箱的搬运模式更加单1、高效,将货物打包在集装箱里面,能够复制货物之间相互影响。nginx
若是要将货物搬运到另外一个码头就须要装运,经过集装箱,能够直接把它们运送到另外一个航舱内,并且彻底能够保证里面的货物是总体地搬迁,而不会损坏货物自己。docker
而Docker虚拟化正是基于相似的原理,将本来复杂的环境打包成为镜像模块,而后将模块迁移到各个平台,能够快速地交付使用,从而减小了人工大量的干预。json
Docker是一个开源的应用容器引擎,开发者使用打包他们的应用以及依赖包到一个可移植的容器中,而后发布到如何流行的Linux机器上,进而实现虚拟化。centos
容器是彻底使用沙箱机制的,并且互相之间不会有如何接口,几乎没有性能开销,能够很容易地在机器和数据中心运行,最重要的是,他们不依赖于如何语言、框架或包括系统。bash
Docker虚拟化和传统虚拟机(KVM、Xen等)方式的不一样之处在于Docker虚拟化能够在操做系统层面上直接实现App或者虚拟化,直接复用本地机器的操做系统,而传统方式则须要在硬件的基础上,虚拟GurstOS操做系统,而后在GuestOS操做系统上部署相关的App应用。服务器
Docker虚拟化实施有如下三个概念:架构
- Docker镜像:Docker镜像是一个静态模块,与常见的ISO镜像相似,是一个样板,不能直接修改,能够经过封装生成;
- Docker容器:基于Docker镜像运行启动的应用或系统,称之为一个Docker容器或Docker虚拟机;
- Docker仓库:Docker仓库是存放Docker镜像的地方,常见分为公开仓库和私有仓库两种形式;
Docker仓库的用处:框架
Docker仓库是Docker镜像的存储仓库。能够推送镜像到docker仓库中,而后在docker客户端,能够从docker仓库中搜索和拉取镜像。性能
Docker容器是如何工做的:
一个Docker容器包含了一个操做系统、用户添加的文件和元数据(meta-data)。每一个容器都是从镜像创建的,镜像告诉Docker容器内包含了什么,当容器启动时运行什么程序,还有许多配置数据。Docker镜像是只读的,当Docker运行一个从镜像创建的容器,它会在镜像顶部添加一个可读写的层,应用程序能够在这里运行。
Docker用途:简单配置、代码流水管理、开发效率、应用隔离、服务器整合、多租户、快速部署
二、Docker LXC及Cgroup
Docker虚拟化的由来须要从Docker发展历史来看,最先的Docker技术为LXC+联合文件系统(AUFS)组合。Docker0.9.0版本开始引入libcontainer能够视做LXC的替代品,其中LXC负责资源管理,AUFS负责镜像管理。而LXC包括Cgroup、Namespace、Chroot等组件,并经过Cgroups进行资源管理。
Docker、LXC、Cgroup三者的关系是Cgroup在最底层落实资源管理。LXC在Cgroup上封装了一层,Docker又在LXC封装了一层。
Cgroups最初的目标是为资源管理提供一个统一的框架,整合现有的Cpuset等子系统,也为将来开发新的子系统提供接口。
Linux container容器能够提供轻量级的虚拟化,以便隔离进程和资源,并且不须要提供指令解释机制以及全虚拟化的其余复杂性。容器有效地将由单个操做系统管理的资源划分到独立的组中,以便更好地在独立的组之间平衡有冲突的资源使用需求。
三、Docker虚拟化特色
Docker虚拟化跟传统虚拟化相比,有如下特色:
- 操做启动快,运行时的性能能够获取极大提高,管理操做(启动、中止、开启、重启等)都是以秒或毫秒为单位的;
- 轻量级虚拟化,用户会拥有足够的“操做系统”,仅需添加或减少镜像便可,单台服务器上能够部署100~1000个containers容器,而传统虚拟化能虚拟10~20个虚拟机就很是不错了;
- 开源免费,成本低,由现代Linux内核支持并驱动;
- 前景及云支持,正在愈来愈受欢迎,各大主流公司都在推进Docker的快速交付;
- 更简单的管理,使用Docker只须要小小的修改,就能够替代以往大量的更新工做,全部的修改都以增量的方式被分发和更新,从而实现自动化而且高效的管理;
四、Docker虚拟化原理
Docker虚拟化中最核心部分为Docker引擎,Docker引擎是一个C/S(client/server)机构的应用;
Docker server是一个常驻进程,rest API实现了client和server间的交互协议 ,CLI实现容器和镜像的管理,为用户提供统一的操做界面。Docker使用C/S架构,client经过接口与server进程通讯实现容器的构建、运行和发布,client和server能够运行在同一台集群,也能够经过跨主机实现远程通讯。
Docker镜像做为Docker中最基本的概念,有如下特性:
- 镜像分层:每一个镜像都由一个或多个镜像层组成;
- 可经过在某个镜像上加上必定的镜像层获得新镜像(此过程能够经过编写DockerFile或基于容器Commit实现);
- 每一个镜像层拥有惟一镜像ID;
- 镜像在存储和使用时共享相同的镜像层(根据ID),因此在Pull镜像时,已有的镜像层会在自动跳过下载;
- 每一个镜像层都是只读的,即便启动成容器,也没法对其真正的修改,修改只会做用于最上层的容器层。
Docker容器,能够理解为一个或多个运行进程,而这些运行进程将占有相应的内存、相应的CPU计算资源,则经过Docker镜像的镜像层文件来提供。
基于每一个镜像的json文件,Docker能够经过解析Docker镜像的惊悚文件,获知应该在这个镜像之上运行什么样的进程,应该为进程配置怎样的环境变量,Docker守护进程实现了静态向动态的转变。
五、Docker安装配置-CentOS7.X系列安装Docker软件
sed -i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config setenforce 0 yum -y install epel-release yum -y install docker* systemctl start docker
报错:
Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
解决办法:
vi /etc/sysconfig/docker
systemctl start docker systemctl enable docker ps -ef |grep docker
Docker下载加速,默认docker下载是从国外去下载,可是下载速度慢,全部咱们 这边使用国内的:
cat > /etc/docker/daemon.json <<EOF { "registry-mirrors": [ "https://registry.docker-cn.com", "https://dockerhub.azk8s.cn", "https://reg-mirror.qiniu.com" ] } EOF systemctl restart docker
六、Dockers必备命令
公共仓库Nginx和CentOS镜像下载以及本地导入CentOS镜像,执行以下命令
docker pull centos :Docker下载CentOS镜像
docker pull nginx :Docker下载Nginx镜像
本地导入镜像:
格式:cat 本地容器快照名 | docker import-自定义容器名:自定义标记名
docker version :查看Docker版本
docker info :查看当前信息
docker search centos :搜索可用Docker镜像
docker search -s 500 nginx :搜索星级为500以上的镜像
docker pull docker.io/nginx :下载nginx镜像
docker images :查看当前Docker全部镜像
启动Docker镜像:
-i:表示交互输入 -t:表示打开终端 -d:表示后台启动
docker run -i -t centos /bin/bash
进入Docker容器:
docker exec -it a9ca644fd04f /bin/bash :红色部分是容器的ID
退出Docker容器:
(1)exit或者ctrl+d :退出并中止容器
(2)先按ctrl+p再按ctrl+q :退出伪终端,容器后台运行
docker ps :查看容器,-l得到最后一个容器的ID,-a查看全部的容器
docker start id :启动Docker容器,能够利用docker ps查看容器,而后输入iD
docker stop id :关闭Docker容器
docker save -o centos-7.2.tar centos:latest :存储镜像
docker rm id :删除Docker容器,若是删除多个容器则须要使用空格隔离便可~!
docker rmi id :删除Dokcer镜像
docker load < centos-7.2.tar :导入容器快照
docker export -o centos-7.2.test.tar container_id :Docker导出镜像
cat centos-7.2.test.tar | docker import - centos-7.2.test :本地导入Docker镜像,红色为镜像名,须要自定义
docker run -p 5500:80 -it nginx /bin/bash :将宿主机5500端口映射给容器的80端口
nginx :启动nginx服务
图片显示