1、 docker简介mysql
1. Docker是什么?linux
Docker的英文本意是“搬运工”,在程序员的世界里,Docker搬运的是集装箱(Container),集装箱里装的是任 意类型的App,开发者经过Docker能够将App变成一种标准化的、可移植的、自管理的组件,能够在任何主流 系统中开发、调试和运行。 说白了,docker是一种用了新颖方式实现的轻量级虚拟机,相似于VM,可是在原理和应用上和VM的差异仍是很大 的.而且docker的专业叫法是应用容器(Application Container)。nginx
2.为啥要用容器?程序员
应用容器是个啥样子呢,一个作好的应用容器长得就像一个装好了一组特定应用的虚拟机同样,好比我如今想用 mysql,那我就找个装好了mysql的容器就能够了,而后运行起来,我就能使用mysql了。sql
为啥不能直接安装一个mysql?安装一个SQL Server也能够啊,但是有的时候根据每一个人电脑的不一样,在安装的时候 可能会报出各类各样的错误,万一你的机器中毒了,你的电脑挂了,你全部的服务都须要从新安装.docker
可是有了docker, 或者说有了容器就不一样了,你就至关于有了一个能够运行起来的虚拟机,只要你能运行容器,mysql的配置就省了.而 且若是你想换个电脑,直接把容器”端过来”就可使用容器里面的服务。数据库
Docker 基于Go语言开发,代码托管在Github上,并遵循Apache 2.0 开源协议。json
Docker 容器能够封装任何有效 负载,几乎能够在任何服务器之间进行一致性运行。换句话说,开发者构建的应用只需一次构建便可多平台运 行。运营人员只需配置他们的服务,便可运行全部的应用。vim
如果利用容器的话,那么开发直接在容器里开发,测试的时候把整个容器给测试,测好了把测试后容器再上线就好 了.经过容器,整个开发,测试和生产环境能够保持高度一致。后端
此外容器也VM同样具备必定得隔离性,各个容器之间的数据和内存空间相互隔离,能够保证必定的安全性。
Hyper-V、KVM和Xen等虚拟机管理程序都“基于虚拟化硬件仿真机制。这意味着,它们对系统要求很高.然而,容器却使用共享的操做系统。
这意味着它们在使用系统资源方面比虚拟机管理程序要高效得多。容器不是对硬 件进行虚拟化处理,而是驻留在一个Linux实例上。 Docker能够解决虚拟机可以解决的问题,同时也可以解决 虚拟机因为资源要求太高而没法解决的问题。
2、为何要使用docker?
1 、快速交付应用程序
开发者使用一个标准的 image 来构建开发容器,开发完成以后,系统管理员就可使用这个容器来部署代码
docker能够快速建立容器,快速迭代应用程序,并让整个过程可见,使团队中的其余成员更容易理解应用程 序是如何建立和工做的。
docker容器很轻!很快!容器的启动时间是次秒级的,节约开发、测试、部署的时间
2 、更容易部署和扩展
docker容器能够在几乎全部的环境中运行,物理机、虚拟机、公有云、私有云、我的电脑、服务器等等。
docker容器兼容不少平台,这样就能够把一个应用程序从一个平台迁移到另一个。
三、效率更高
docker容器不须要 hypervisor ,他是内核级的虚拟化。
4 、快速部署也意味着更简单的管理
一般只须要小小的改变就能够替代以往巨型和大量的更新工做。
Docker 的经常使用案例包括:
自动打包和部署应用
建立轻量、私有的 PaaS 环境
自动化测试和持续集成/部 署
部署并扩展 Web 应用、数据库和后端
3、docker和vm比较优点
1. 启动速度快,容器一般在一秒内能够启动.而VM要好久.
2. 资源利用率高,一台普通服务器能够跑上千个容器,而跑VM就。。。。。。
3. 性能开销小,VM须要额外的CPU和内存来完成OS的功能,这一部分占据了额外的资源
可见容器是在操做系统层 面上实现虚拟化,直接复用本地主机的操做系统,而传统方式则是在硬件层面实现
4、 Docker优点和劣势
做为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具备众多的优点。
首先,Docker 容器的启动可 以在秒级实现,这相比传统的虚拟机方式要快得多。
其次,Docker 对系统资源的利用率很高,一台主机上可 以同时运行数千个 Docker 容器。
容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很 高,同时系统的开销尽可能小。
传统虚拟机方式运行 10 个不一样的应用就要起 10 个虚拟机,而 Docker 只须要启 动 10 个隔离的应用便可。
1.,Docker 在以下几个方面具备较大的优点。
1.更快速的交付和部署
对开发和运维(devop)人员来讲,最但愿的就是一次建立或配置,能够在任意地方正常运行。开发者可使 用一个标准的镜像来构建一套开发容器,开发完成以后,运维人员能够直接使用这个容器来部署代码。 Docker 能够快速建立容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其余成员更容易理解应用程序是 如何建立和工做的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时 间。
2.更高效的虚拟化
Docker 容器的运行不须要额外的 hypervisor 支持,它是内核级的虚拟化,所以能够实现更高的性能和效率。
3.更轻松的迁移和扩展
Docker 容器几乎能够在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、我的电脑、服务器等。这 种兼容性可让用户把一个应用程序从一个平台直接迁移到另一个。
4.更简单的管理
使用 Docker,只须要小小的修改,就能够替代以往大量的更新工做。全部的修改都以增量的方式被分发和更 新,从而实现自动化而且高效的管理。
对比传统虚拟机总结
5、Docker 的体系结构
docker使用C/S 架构,docker daemon 做为 server 端接受 client 的请求,并处理(建立、运行、分发容器),
他们能够运行在一个机器上,也经过 socket或者 RESTful API 通讯 Docker daemon 通常在宿主主机后台运行。
Docker client以系统命令的形式存在,用户用docker命令来跟 docker daemon 交互。
Docker 内部:
要理解 Docker 内部构建,须要理解如下三种部件:
Docker 镜像 - Docker images Docker 仓库 - Docker registeries Docker 容器 - Docker containers
1.Docker 镜像
Docker 镜像是 Docker 容器运行时的只读模板,镜像能够用来建立 Docker 容器。每个镜像由一系列的层 (layers) 组成。Docker 使用UnionFS(联合文件系统)来将这些层联合到单独的镜像中。
UnionFS容许独立文件 系统中的文件和文件夹(称之为分支)被透明覆盖,造成一个单独连贯的文件系统。正由于有了这些层的存在, Docker 是如此的轻量。
当你改变了一个 Docker 镜像,好比升级到某个程序到新的版本,一个新的层会被创 建。所以,不用替换整个原先的镜像或者从新创建(在使用虚拟机的时候你可能会这么作),只是一个新的层被 添加或升级了。
如今你不用从新发布整个镜像,只须要升级,层使得分发 Docker 镜像变得简单和快速。 每一个 docker都有不少层次构成,docker使用 union file systems 将这些不一样的层结合到一个image 中去。
例如: centos镜像中安装nginx,就成了nginx镜像”,其实在此时Docker镜像的层级概念就体现出来了。底层一个 centos操做系统镜像,上面叠加一个ngnx层,就完成了一个nginx镜像的构建。
层级概念就不难理解,此时咱们 通常centos操做系统镜像称为nginx镜像层的父镜像。
2.Docker仓库
Docker 仓库用来保存镜像,能够理解为代码控制中的代码仓库。一样的,Docker 仓库也有公有和私有的概 念。
公有的 Docker 仓库名字是 Docker Hub。Docker Hub 提供了庞大的镜像集合供使用。
这些镜像能够是自 己建立,或者在别人的镜像基础上建立。 仓库是集中存放镜像文件的场所。
有时候会把仓库和仓库注册服务器 (Registry)混为一谈,并不严格区分。
实际上,仓库注册服务器上每每存放着多个仓库,每一个仓库中又包含了 多个镜像,每一个镜像有不一样的标签(tag)。 仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是 Docker Hub,存放了数量庞 大的镜像供用户下载。国内的公开仓库包括 Docker Pool等,能够提供大陆用户更稳定快速的访问。 固然,用户也能够在本地网络内建立一个私有仓库。
当用户建立了本身的镜像以后就可使用push命令将它上 传到公有或者私有仓库,这样下次在另一台机器上使用这个镜像时候,只须要从仓库上pull下来就能够了。
注:Docker 仓库的概念跟Git相似,注册服务器能够理解为 GitHub 这样的托管服务。
3. Docker 容器
Docker 利用容器来运行应用,一个Docker容器包含了全部的某个应用运行所须要的环境。
每个 Docker 容器 都是从 Docker 镜像建立的。Docker 容器能够运行、开始、中止、移动和删除。
每个 Docker 容器都是独立 和安全的应用平台。 容器是从镜像建立的运行实例。
它能够被启动、开始、中止、删除。每一个容器都是相互隔 离的、保证安全的平台。
能够把容器看作是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空 间和网络空间等)和运行在其中的应用程序。
注意:镜像是只读的,容器在启动的时候建立一层可写层做为最上层。
6、Docker底层技术
docker底层的 2 个核心技术分别是 Namespaces 和 Control groups Namespaces用来隔离各个容器
1)pid namespace
不一样用户的进程就是经过pid namespace 隔离开的,且不一样 namespace 中能够有相同pid。全部的LXC进程在 docker中的父进程为docker进程,每一个lxc进程具备不一样的 namespace 。
2) net namespace
有了pid namespace, 每一个 namespace 中的pid可以相互隔离,可是网络端口仍是共享 host 的端口。
网络隔离是 经过 net namespace 实现的,每一个 net namespace 有独立的 network devices, IP addresses, IP routing tables, /proc/net 目录。这样每一个 container 的网络就能隔离开来。
docker默认采用veth的方式将 container 中的虚拟 网卡同 host 上的一个docker bridge: docker0 链接在一块儿。
3) ipc namespace
container 中进程交互仍是采用linux常见的进程间交互方法 (interprocess communication - IPC),包括常见的信号 量、消息队列和共享内存。
container 的进程间交互实际上仍是host 上具备相同pid namespace 中的进程间交互。
4) mnt namespace
相似chroot,将一个进程放到一个特定的目录执行。mnt namespace 容许不一样 namespace 的进程看到的文件 结构不一样,这样每一个 namespace 中的进程所看到的文件目录就被隔离开了。
在container里头,看到的文件系 统,就是一个完整的linux系统,有/etc、/lib 等,经过chroot实现。
5) uts namespace
UTS("UNIX Time-sharing System") namespace 容许每一个 container 拥有独立的 hostname 和 domain name, 使 其在网络上能够被视做一个独立的节点而非 Host 上的一个进程。
6) user namespace
每一个 container 能够有不一样的 user 和 group id, 也就是说能够在 container 内部用 container 内部的用户执行程 序而非 Host 上的用户。
有了以上 6 种 namespace 从进程、网络、IPC、文件系统、UTS和用户角度的隔离,一个 container 就能够对外 展示出一个独立计算机的能力,而且不一样 container 从 OS 层面实现了隔离。
然而不一样 namespace 之间资源还 是相互竞争的,仍然须要相似ulimit来管理每一个 container 所能使用的资源 - -cgroup。 cgroups(Control groups)实现了对资源的配额和度量。
7、docker安装
一)、yum安装
1.安装一些系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2
2.添加软件源信息
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.更新安装docker-ce
yum makecache fast yum -y install docker-ce
4.开启docker服务
service docker start
二)、安装指定版本
官方软件源默认启用了最新的软件,您能够经过编辑软件源的方式获取各个版本的软件包。例如官方并无将测试版本的软件源置为可用,您能够经过如下方式开启。同理能够开启各类测试版本等。
1.查看docker-ce版本
yum list docker-ce.x86_64 --showduplicates
2.安装指定版本
yum -y install docker-ce-[版本号]
3、安装校验
docker version
8、docker经常使用命令
1.查看镜像 docker images 2.安装程序 docker pull 程序名称 3.查看正在运行容器 docker ps 4.启动容器 docker run -dit -p 81:80 httpd (这种只是普通启动)
9、改成国内下载源
1.添加配置文件
vim /etc/docker/daemon.json
2.写入配置文件
{ "registry-mirrors": ["https://registry.docker-cn.com"] }
3.重启服务
service docker restart
国内源有:
1)、Docker 官方中国区 https://registry.docker-cn.com 2)、网易 http://hub-mirror.c.163.com 3)、中国科技大学 https://docker.mirrors.ustc.edu.cn 4)、阿里云 https://pee6w651.mirror.aliyuncs.com