1.1.在传统的开发流程中:开发人员,测试人员,运维人员都是独立工作的,沟通不畅不能很好的协作.
为了解决开发人员和运维人员之间的协作关系,加快应用交付速度,越来越多的企业引入了DevOps这一概念。但是,传统的开发过程中,开发、测试、运维是三个独立运作的团队,团队之间沟通不畅,开发运维之间冲突时有发生,导致协作效率低下,产品交付延迟, 影响了企业的业务运行。
DevOps(英文Development和Operations的组合)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
为了解决这个问题采用Docker技术!
1.2.什么是Docker技术?
- Docker是一个构建在LXC(Linux Container容器)之上,
基于进程容器的轻量级VM(虚拟机)解决方案,实现了一种应用程序级别的资源隔离及配额. - Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows 机器上(但是Docker可以直接在Linux上安装,在Windows上使用需要额外安装虚拟机),也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口。
- Docker技术将应用以集装箱的方式打包交付,使应用在不同团队中共享,通过镜像的方式,应用可以部署在任何环境中.
- Docker是基于容器技术的轻量级虚拟化解决方案,以容器方式交付的Docker技术支持不断的开发迭代,大大提升了产品开发和交付的速度.
1.3.Docker VS 虚拟机
Hypervisor (虚拟化层)
Docker Engine 直接移植在Linux内核上,共享内核,系统内核损耗低,减少开销
1.4.Docker给我们带来的好处
- 快速交付和部署
- 保证环境一致
- 高效的资源利用
- 弹性的伸缩
- 动态调度迁移成本
但安全性比虚拟机弱
使用Docker可以帮助企业解决服务器资源利用率不充分,部署难的问题.
Docker可以控制很多资源(比如硬盘和内存大小,CPU和网卡,CPU个数),目前还不能对硬盘I/O读写资源进行隔离.
1.5.Docker的三个组件:镜像、容器、仓库
-
镜像是用来创建容器的模板。 是一个打包好的开发环境.
-
容器是镜像运行时的实体。 一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器.
(镜像和容器的关系可以类比面向对象的类和对象的关系) -
仓库用来保存镜像,就是放了一堆镜像的地方,我们可以把镜像发布到仓库中,需要的时候从仓库中拉下来就可以了.
1.6.Docker架构
一个完整的Docker有以下四个部分组成:
- DockerClient 客户机
- Docker Daemon 守护进程
- Docker Image 镜像
- DockerContainer 容器
1.7.Docker run 运行(新建一个Docker)的流程
2.1 下载Docker
网站:https://www.docker.com/
资源:http://www.runoob.com/docker/docker- tutorial.html
2.2Docker的安装和使用
Docker 分为 CE 和 EE 两大版本。 CE 即社区版(免费,支持周期 7 个月), EE 即企业版,强调安全,付费使用,支持周期 24 个月。
我们在安装前可以参看官方文档获取最新的 Docker 支持情况:
官方文档:https://docs.docker.com/install/
Docker 对于内核支持的功能,即内核的配置选项也有一定的要求(比如必须开启 Cgroup 和 Namespace 相关选项,以及其他的网络和存储驱动等), Docker 源码中提供了一个检测脚本来检测和指导内核的配置
脚本链接:https://raw.githubusercontent.com/docker/docker/master/contrib/check-config.sh
环境准备:
- 阿里云服务器(1核2G,1M带宽)
- CentOS 7.4 64位
安装步骤:
-
由于 Docker-CE 支持 64 位版本的 CentOS7 ,并且要求内核版本不低于 3.10 首先我们需要卸载掉旧版本的Docker.
sudo yum remove docker \docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine
-
执行以下命令安装依赖包
sudo yum install -y yum-utils \device-mapper-persistent-data \ lvm2
-
安装Docker.Docker 软件包已经包括在默认的 CentOS-Extras 软件源里。
因此想要安装 docker,只需要运行下面的 yum 命令。
sudo yum install docker
当然在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS 系统上可以使用这套脚本安装:
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh
执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker CE 的 Edge 版本安装在系统中。
执行docker version
or
docker info
返回docker的版本相关信息,证明 docker 安装成功
- 启动Docker-CE
sudo systemctl enable docker(开机启动)
sudo systemctl start docker
2.2.Docker常用命令
https://www.runoob.com/docker/docker-command-manual.html
http://www.cnblogs.com/DeepInThought/p/10896790.html
2.2.1.docker操作
- docker version 查看docker容器版本
- docker info 查看docker容器信息
- docker --help 查看docker容器帮助
2.2.2镜像操作
- docker images 列出本地images
- docker images -a 含中间映像层
- docker images -q 只显示镜像ID
- docker images -qa 含中间映像层
- docker images --digests 显示镜像摘要信息
- docker images --no-trunc 显示镜像完整信息
- docker history -H redis 显示指定镜像的历史创建;参数 H 镜像大小和日期,默认为true;–no-trunc 显示完整的提交记录;-q 仅列出提交记录ID
- docker search mysql 搜索仓库MySQL镜像
- docker search --filter=starts=600 mysql --filter=stars=600 只显示starts>600的镜像
- docker search --no-trunc mysql --no-trunc 显示镜像完整DESCRIPTION描述
- docker search --automated mysql --automated只列出AUTOMATED=OK的镜像
- docker pull redis 下载Redis官方最新镜像 相当于docker pull redis:latest
- docker pull -a redis 下载仓库所有Redis镜像
- docker pull bitnami/redis 下载私人仓库镜像
- docker rmi redis 单个镜像删除
- docker rmi -f redis强制删除(针对基于镜像有运行的容器进程)
- docker rmi -f redis tomcat nginx 多个镜像删除,不同镜像间以空格间隔
- docker rmi -f $ (docker images -q) 删除本地全部镜像
镜像构建:
1.编写dockerfile cd /docker/dockerfile vim mycentos
2.构建docker镜像 docker build -f /docker/dockerfiel/myscentos -t mycentos:1.1
2.2.3容器操作
容器启动
- 新建并启动
docker run -i -t --name mycentos - 后台启动容器
docker run -d mycentos - 启动一个或多个已经被停止的容器
docker start redis - 重启容器
docker restart redis
容器进入与退出
- 使用run方式在创建时进入
docker run -it centos /bin/bash - 关闭容器并退出
exit - 仅退出容器,不关闭
快捷键:Ctrl+P+Q
查看容器
- 查看正在运行的容器
docker ps - 查看正在运行的容器的ID
docker ps -q - 查看正在运行+历史运行过的容器
docker ps -a - 显示运行容器总文件大小
docker ps -s