目录
- 1、Docker是什么
- 1.1、Docker优点
- 1.2、Docker缺点
- 2、Docker安装部署
- 2.1、安装
- 2.2、开启服务
- 2.3、安装镜像(这里是以centos为例)
- 3、开启该镜像的服务
- 4、错误的解决方案
- 4.1、Docker出现“. Is the docker daemon running”的解决方案
- 4.2、Docker报错“Error response from daemon: Container *”的解决方案
- 5、Docker实例
- 5.1、docker run
- 5.2、docker cp
1、Docker是什么
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
1.1、Docker优点
1.简化配置
这是Docker初始目的,虚拟机VM最大的好处是基于你的应用配置能够无缝运行在任何平台上。Docker提供同样类似VM的能力,但是没有任何副作用,它能让你将环境和配置放入代码然后部署,同样的Docker配置能够在各种环境中使用,这实际是将应用环境和底层环境实现了解耦。
2.代码管道化管理
能够对代码以流式pipeline管道化进行管理,从开发者的机器到生产环境机器这个流程中都能有效管理。因为在这个流程中会有各种不同的环境,每个都可能有微小的区别,Docker提供了跨越这些异构环境以一致性的微环境,从开发到部署实现流畅发布。
3.开发人员的生产化
在一个开发环境,我们希望我们的开发环境能更加接近于生产环境,我们会让每个服务运行在自己的VM中,这样能模拟生产环境,比如有时我们并不总是需要跨越网络连接,这样我们可以将多个Docker装载一系列服务运行在单机上最大程度模拟生产分布式部署的环境。
4.应用隔离
有很多理由你需要在一台机器上运行多个应用,这就需要将原来铁板一块monolithic的应用切分为很多微服务。实现应用之间的解耦,将多个应用服务部署在多个Docker中能轻松达到这个目的。
5.服务合并
使用Docker也能合并多个服务以降低费用,不多的操作系统内存占用,跨实例共享多个空闲的内存,这些技术Docker能以更加紧密资源提供更有效的服务合并。
6.多租户
Docker能够作为云计算的多租户容器,使用Docker能容易为每个租户创建运行应该多个实例,这得益其灵活的快速环境以及有效diff命令。
7.快速部署
Docker通过创建进程的容器,不必重新启动操作系统,几秒内能关闭,你可以在数据中心创建或销毁资源,不用担心额外消耗。典型的数据中心利用率是30%,通过更积极的资源分配,以低成本方式对一个新的实例实现一个更聚合的资源分配,我们很容易超过这个利用率,大大提高数据中心的利用效率。
8.环境统一 docker将容器打包成镜像,创建符合docker hub规范的镜像,上传进个人的私有docker hub,转换环境时直接pull即可,最大程 度的保证了开发环境,正式环境统一
1.2、Docker缺点
Docker并不是全能的,设计之初也不是KVM之类虚拟化手段的替代品,简单总结几点:
1、Docker是基于Linux 64bit的,无法在32bit的linux/Windows/unix环境下使用
2、LXC是基于cgroup等linux kernel功能的,因此container的guest系统只能是linux base的
3、隔离性相比KVM之类的虚拟化方案还是有些欠缺,所有container公用一部分的运行库
4、网络管理相对简单,主要是基于namespace隔离
5、cgroup的cpu和cpuset提供的cpu功能相比KVM的等虚拟化方案相比难以度量(所以dotcloud主要是按内存收费)
6、Docker对disk的管理比较有限
7、container随着用户进程的停止而销毁,container中的log等用户数据不便收集
2、Docker安装部署
2.1、安装
yum install docker
2.2、开启服务
systemctl start docker.service
2.3、安装镜像(这里是以centos为例)
docker pull centos:7.2.1511
可以利用以下命令查看是否安装成功
docker images
3、开启该镜像的服务
一个镜像可以开启N多次,彼此操作之间不影响。也就是说你在A镜像中删除某文件,但是B镜像中的该文件还依然存在,不会影响。以下举个例子,其中4cbf是镜像IMAGE ID字段,前四位的缩写。
docker run -ti 4cbf /bin/bash
开启后会自动进入到镜像中,此时操作就是再镜像中了,查看是否真的是在镜像中
uname -a
记住按“ctrl + q + p”组合键退出该镜像,这样镜像并不会停止服务,可以通过该命令查看
docker ps
如果不小心结束了该服务,比如说按了exit等,还可以通过该命令查看
docker ps -a
如何再进入到开启的服务中呢?
直接输入以下命令即可(其中469a913f3c26是该Image的Container ID)
docker exec -it 469a913f3c26 /bin/bash
4、错误的解决方案
4.1、Docker出现“. Is the docker daemon running”的解决方案
执行docker ps命令,出现"Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?”问题。此时已确定Docker本身已经安装正常。
问题原因是因为docker服务没有启动,所以在相应的/var/run/ 路径下找不到docker的进程。
执行以下命令,启动docker服务
service docker start
4.2、Docker报错“Error response from daemon: Container *”的解决方案
例如:
现象:
docker exec -it 7c5a2350c4cb /bin/bash
Error response from daemon: Container * is not running。
原因:
因为这个exec跑不起来,那就用start
解决:
docker start 7c5a2350c4cb
5、Docker实例
5.1、docker run
docker run -d -p 8082:80 --name nginx -v /usr/sinatra/nginx/www:/usr/share/nginx/html
-v /usr/sinatra/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
-v /usr/sinatra/nginx/logs:/var/log/nginx:ro nginx
- 挂载数据卷默认权限是rw,可以通过ro指定为只读
- -d 开启Daemon模式
- :左边是主机的配置,右边是docker里面的配置
- -p 8082:80: 将容器的 80 端口映射到主机的 8082 端口
- 记住进程是
5.2、docker cp
docker cp 6dd4380ba708:/etc/nginx/nginx.conf ~/nginx/conf
- 拷贝容器内 Nginx 默认配置文件到本地当前目录下的 conf 目录,容器 ID 可以查看 docker ps 命令输入中的第一列