1.DevOps介绍

3.1.是什么

DevOps是Development和Operations两个词的缩写,引用百度百科的定义:

DevOps是一种方法或理念,它涵盖开发、测试、运维的整个过程。DevOps是提高软件开发、测试、运维、运营 等各部门的沟通与协作质量的方法和过程,DevOps强调软件开发人员与软件测试、软件运维、质量保障(QA)部 门之间有效的沟通与协作,强调通过自动化的方法去管理软件变更、软件集成,使软件从构建到测试、发布更加快捷、可靠,最终按时交付软件。

devops dockerfile例子 devops和docker的区别_nginx


持续集成-docker镜像(操作系统镜像iso—>安装N多操作系统)

docker容器部署-集装箱是操作(提前已经装好了,只需允许即可)

开发即运维-开发可以做运维事情,开发出来的东西就是要快速部署东西

1.2.工具链

DevOps兴起于2009年,近年来由于云计算、互联网的发展,促进了DevOps的基础设施及工具链的发展,涌现了一大批优秀的工具,这些工具包括开发、测试、运维的各各领域,例如:GitHub、Git/SVN、Docker、Jenkins、 Hudson、Ant/Maven/Gradle、Selenium(自动化测试)、QUnit、JMeter(性能测试)等。下图是DevOps相关的工具集:

devops dockerfile例子 devops和docker的区别_docker_02


我们的项目中使用过,使用一系列工具完成自动处理,达到开发出来就是要拿去部署.解决开发环境和部署的环境不一致而导致反复部署过程.虽然增加了开发人员工作量,对整个公司有好处,提高了运维效率,降低了公司成本.

2.Docker简介

2.1.虚拟化

2.1.1.什么是虚拟化

在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。
在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件 对资源充分利用
虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip)、桌面虚拟化、服务虚拟化、虚拟机等等。

2.1.2.虚拟化种类

(1)全虚拟化架构

虚拟机的监视器(hypervisor)是类似于用户的应用程序运行在主机的OS之上,如VMware的workstation,这种虚拟化产品提供了虚拟的硬件。

devops dockerfile例子 devops和docker的区别_nginx_03


(2)OS层虚拟化架构

devops dockerfile例子 devops和docker的区别_nginx_04


(3)硬件层虚拟化-宿主机没有操作系统

devops dockerfile例子 devops和docker的区别_docker_05


硬件层的虚拟化具有高性能和隔离性,因为hypervisor直接在硬件上运行,有利于控制VM的OS访问硬件资源,使用这种解决方案的产品有VMware ESXi 和 Xen server

Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统,它可以协调访问服务器上的所有物理设备和虚拟机,也叫虚拟机监视器(Virtual Machine Monitor,VMM)。

Hypervisor是所有虚拟化技术的核心。当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统。 宿主机

Hypervisor是所有虚拟化技术的核心,软硬件架构和管理更高效、更灵活,硬件的效能能够更好地发挥出来。常见的产品有:VMware、KVM、Xen等等。Openstack

3.2.什么是Docker-容器虚拟化

devops dockerfile例子 devops和docker的区别_docker_06

3.2.1.容器技术

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

3.2.2.容器与虚拟机比较

(1)本质上的区别-共享操作系统

devops dockerfile例子 devops和docker的区别_devops dockerfile例子_07


不需要安装额外操作系统

(2)使用上的区别

devops dockerfile例子 devops和docker的区别_Docker_08


容器的性能更加优越

3.2.3.Docker特点

(1)上手快。
用户只需要几分钟,就可以把自己的程序“Docker化”。Docker依赖于“写时复制”(copy-on-write)模型,使修改应用程序也非常迅速,可以说达到“随心所致,代码即改”的境界。
随后,就可以创建容器来运行应用程序了。大多数Docker容器只需要不到1秒中即可启动。由于去除了管理程序的开销,Docker容器拥有很高的性能,同时同一台宿主机中也可以运行更多的容器,使用户尽可能的充分利用系统资源。
(2)职责的逻辑分类
使用Docker,开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如何管理容器。Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境一致性。从而降低那种“开发时一切正常,肯定是运维的问题(测试环境都是正常的,上线后出了问题就归结为肯定是运维的问题)”
(3)快速高效的开发生命周期
Docker的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让你的应用程序具备可移植性,易于构建,并易于协作。(通俗一点说,Docker就像一个盒子,里面可以装很多物件,如果需要这些物件的可以直接将该大盒子拿走,而不需要从该盒子中一件件的取。)
(4)鼓励使用面向服务的架构
Docker还鼓励面向服务的体系结构和微服务架构。Docker推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或者服务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或调试应用程序都变得非常简单,同时也提高了程序的内省性。(当然,可以在一个容器中运行多个应用程序)

传统操作
开发人员开发代码-打包-装系统-装依赖软件(jdk,tomcat,mysql等)-导入sql,部署项目
部署麻烦
升级麻烦-开发环境部署一致

集装箱操作模式. 开发即部署 (对开发人员要很高.) 运维前置

4.1.在VMware Workstation(或云服务器)中安装CentOS

使用ip addr命令查看本地IP

devops dockerfile例子 devops和docker的区别_devops dockerfile例子_09

4.2.安装Docker

使用yum命令在线安装

yum install docker

4.3.安装后查看Docker版本

docker version

4.4.启动与停止Docker

启动docker:systemctl start docker
停止docker:systemctl stop docker
重启docker:systemctl restart docker
查看docker状态:systemctl status docker
开机启动:systemctl enable docker
查看docker概要信息:docker info
查看docker帮助文档:docker --help

5.Docker镜像操作

5.1.列出镜像

列出docker下的所有镜像:

docker images

devops dockerfile例子 devops和docker的区别_Docker_10


REPOSITORY:镜像所在的仓库名称

TAG:镜像标签

IMAGE ID:镜像ID

CREATED:镜像的创建日期(不是获取该镜像的日期)

SIZE:镜像大小

这些镜像都是存储在Docker宿主机的/var/lib/docker目录下

5.2.搜索镜像

docker search 镜像名称

devops dockerfile例子 devops和docker的区别_docker_11


NAME:仓库名称

DESCRIPTION:镜像描述

STARS:用户评价,反应一个镜像的受欢迎程度

OFFICIAL:是否官方

AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的63.4拉取镜像

5.3.拉取镜像

这是Docker Hub上最受欢迎的10大镜像

devops dockerfile例子 devops和docker的区别_docker_12


拉取命令

docker pull 镜像名称:版本号

5.4.删除镜像

1、docker rmi $IMAGE_ID:删除指定镜像

2、docker rmi docker images -q:删除所有镜像

devops dockerfile例子 devops和docker的区别_Docker_13

6.Docker容器操作

6.1.查看容器

查看正在运行容器

docker ps

查看所有的容器(启动过的历史容器)

docker ps –a 高版本才支持

devops dockerfile例子 devops和docker的区别_devops dockerfile例子_14


查看最后一次运行的容器

docker ps –l

查看停止的容器

docker ps -f status=exited

6.2.创建与启动容器

创建容器常用的参数说明:
创建容器命令:docker run
-i:表示运行容器
-t:表示容器启动后会进入容器命令行(交互式)。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
–name :为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

6.3.交互式容器 -另开窗口

创建一个交互式容器并取名为centos

docker run -it --name=centos centos:7 /bin/bash

devops dockerfile例子 devops和docker的区别_docker_15


使用exit命令 退出当前容器

6.4.守护式容器

创建一个守护式容器:如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器

docker run -di --name=centos centos:7

登录守护式容器方式

docker exec -it container_name (或者 container_id)  /bin/bash(exit退出时,容器不会停止)

devops dockerfile例子 devops和docker的区别_docker_16


进去以后出来不会关闭

6.5.停止与启动容器

停止正在运行的容器:docker stop $CONTAINER_NAME/ID

devops dockerfile例子 devops和docker的区别_devops dockerfile例子_17

启动已运行过的容器:docker start $CONTAINER_NAME/ID

devops dockerfile例子 devops和docker的区别_devops dockerfile例子_18

6.6.文件拷贝

docker cp 需要拷贝的文件或目录 容器名称:容器目录

也可以将文件从容器内拷贝出来

docker cp 容器名称:容器目录 需要拷贝的文件或目录

6.7.目录挂载

我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
创建容器 添加-v参数 后边为 宿主机目录:容器目录

docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=centos centos:7

如果你共享的是多级的目录,可能会出现权限不足的提示

devops dockerfile例子 devops和docker的区别_Docker_19


这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题

6.8.查看容器IP地址

docker inspect centos

也可以直接执行下面的命令直接输出IP地址

docker inspect --format='{{.NetworkSettings.IPAddress}}' centos

6.9.删除容器

删除指定的容器:docker rm $CONTAINER_ID/NAME

devops dockerfile例子 devops和docker的区别_docker_20


注意,只能删除停止的容器

删除所有容器:docker rm `docker ps -a -q`

devops dockerfile例子 devops和docker的区别_nginx_21

7.MySQL部署

7.1.拉取MySQL镜像

docker pull mysql:5.7

devops dockerfile例子 devops和docker的区别_nginx_22


查看镜像 docker images

devops dockerfile例子 devops和docker的区别_docker_23

7.2.创建MySQL容器

docker run -di --name hrm_mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD是root用户的登陆密码
端口映射:把容器的端口映射成能够通过宿主机的端口进行访问.

7.3.进入MySQL容器,登陆MySQL

进入mysql容器

docker exec -it hrm_mysql /bin/bash

登陆mysql

mysql -u root -p

8. Nginx部署

8.1.拉取Nginx镜像

docker pull nginx

8.2.创建Nginx容器

docker run -di --name=nginx -p 8080:80 nginx

8.3.测试Nginx

浏览器地址栏输入: http://服务器地址:8080

devops dockerfile例子 devops和docker的区别_Docker_24

8.4.配置反向代理

官方的nginx镜像,nginx配置文件nginx.conf 在/etc/nginx/目录下。
在容器内编辑配置文件不方便,我们可以先将配置文件从容器内拷贝到宿主机,编辑修改后再拷贝回去。
(1)从容器拷贝配置文件到宿主机
···
docker cp hrm_nginx:/etc/nginx/nginx.conf nginx.conf
···
编辑nginx.conf,添加反向代理配置

upstream tomcat-cas {
	server 172.17.0.7:8080;
server 172.17.0.7:8081;

server 172.17.0.7:8082;
}
server {
	listen 80;
	server_name localhost;
	location / {
		#proxy_pass http://tomcat地址; 单机配置
        proxy_pass http://集群名称(tomcat-cas); 集群配置

		index index.html index.htm;
	}
}

将修改后的配置文件拷贝到容器

docker cp nginx.conf  nginx:/etc/nginx/nginx.conf

重新启动容器

docker restart nginx

9.Redis部署

9.1.拉取Redis镜像

centos是基础镜像

docker pull redis

9.2.创建Redis容器

docker run -di --name=hrm_redis -p 6379:6379 redis
设置密码
docker run -di --name hrm-redis -p 6379:6379 redis --requirepass "mypassword"

9.3.客户端测试

在你的本地电脑命令提示符下,用window版本redis测试

redis-cli -h 你的服务器地址

10.tomcat部署

10.1.拉取tomcat镜像

centos是基础镜像
···
docker pull tomcat:8
···

10.2.创建tomcat容器

···
docker run -di --name=tomcat -p 9090:8080 tomcat:8
···

10.3.测试

http://服务器地址:9090