DevOps中篇

1.Docker

DevOps中篇_第1张图片

1.1Docker常用命令

1.1.1镜像篇
  • docker images查看镜像
  • docker search 镜像名称搜索镜像
  • docker pull 镜像名称拉取镜像
  • docker rmi 镜像id删除镜像
1.1.2容器篇
docker ps查看正在运行的容器使用命令
docker ps -a查看所有容器使用命令
docker run -it --name=mycentos7 centos:7 /bin/bash创建并启动名称为mycentos7的交互式容器
docker run -di --name=mycentos2 centos:7\#创建并启动守护式容器
docker exec -it mycentos2 /bin/bash\#登录进入容器命令为:docker exec -it container_name (或者 container_id) /bin/bash(exit退出 时,容器不会停止)
docker stop mycentos2停止正在运行的容器:docker stop 容器名称或者ID
docker start mycentos2启动已运行过的容器:docker start 容器名称或者ID
docker cp abc.txt mycentos2:/复制abc.txt到mycentos2的容器的 / 目录下
docker cp mycentos2:/cba.txt /root将容器mycentos2的/cba.txt文件复制到 宿主机器的/root目录下
docker run -di -v /usr/local/test:/usr/local/test --name=mycentos3 centos:7创建并启动容器mycentos3,并挂载linux中的/usr/local/test目录到容器的/usr/local/test;也就是在 linux中的/usr/local/test中操作相当于对容器相应目录操作
docker inspect 容器ID\| grep IPAddress查看容器IP
docker rm mycentos7删除容器
docker update --restart=always 容器名称或容器ID容器开机自动启动
**MySql**
docker run -di --name=mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root centos/mysql57-centos7创建mysql容器
**MongoDB**
docker run -itd --name mongo -p 27017:27017 mongo创建MongoDB容器

1.2虚拟化技术

1.2.1问题描述

互联网的发展使软件业发生了巨大的变化,其中一个显著的变化是软件的规模越来越大,基于微服务架构的软件在 生产部署时遇到了这样的挑战:
1、微服务的开发语言、操作系统、依赖库等环境配置不同,如何快速安装、迁移、配置软件?
2、一个软件由若干微服务组成,如何快速批量部署微服务?
3、如何有效的利于计算机资源? 针对前两个问题的思考:
传统的软件部署流程是:安装操作系统–>安装依赖软件/库–>安装软件(微服务)–>配置软件–>最终软件上线运 行,面对大量的微服务及微服务集群,使用此方案不仅效率低下,而且还可能会出现环境兼容问题,显然此方案不 适合用在微服务部署。
设想:如果有一项技术可以快速的将软件及所需要的各种环境配置打包、批量复制将会解决以上问题。 针对第三个问题的思考:
在一台计算机只安装一个微服务对计算机资源极大的浪费,如果安装多个微服务就可以有效的利于计算机资源,但 是对于批量软件的安装部署还是会面临1、2问题。
设想:在一台计算机安装多个微服务,使用一种技术将微服务打包、复制部署,并且微服务之间隔离互不影响。

1.2.2虚拟化技术

引用百度百科(https://baike.baidu.com/item/%E8%99%9A%E6%8B%9F%E5%8C%96/547949)
DevOps中篇_第2张图片
总结:虚拟化技术是对软件基础设施、操作系统、软件等IT资源进行有效的管理,使用户不再受物理资源的限制, 提高计算机资源的利用率。虚拟化技术是云计算的基础,例如阿里云的云主机、腾讯云等都应用了虚拟化技术。
虚拟化技术整体上包括两个方面:硬件虚拟化和软件虚拟化,具体分为:网络虚拟化、存储虚拟化、桌面虚拟化、 服务器虚拟化等,我们平常说的最多的是服务器虚拟化。
服务器虚拟化就是在同一个物理服务器上运行多个虚拟机,让服务器的cpu、内存、磁盘、I/O等硬件设施为每个 虚拟机服务,在每个虚拟机中运行不同的软件,虚拟机之间是隔离状态。
服务器虚拟化主要有两种技术:
1、Hypervisor也叫VMM(virtual machine monitor)即虚拟机监视器
Hypervisor是一种将操作系统与硬件抽象分离的方法,实现在宿主机(host machine)上能同时运行多个客户机
(guest machine),每个客户机就是一个虚拟机,这些虚拟机高效地分享宿主机的硬件资源。
如下图:
DevOps中篇_第3张图片
在服务器(宿主机)上安装操作系统,并安装hypervisor虚拟机管理软件,如VMware、VirtualBox等,由hypervisor管理多个虚拟机,每个虚拟机上需要安装客户操作系统、依赖库、应用软件。
2、Containers容器化技术
DevOps中篇_第4张图片
容器技术中docker引擎取代了hypervisor,docker引擎是运行在住宿操作系统上的一个进程,该进程管理了多个
docker容器,每个docker容器集成了应用软件、依赖库,容器之间相互隔离。
3、技术对比: 资源占用:
虚拟机由于是独立的操作系统,占用资源比docker多。启动速度:
虚拟机包括操作系统,启动虚拟机相当于启动一个操作系统,容器则不一样,容器中只包括操作系统的内核,启动 一个容器实例相当于启动一个进程,容器的启动速度比虚拟机快。
体积:
容器包括操作系统内核、软件及依赖库,虚拟机不仅包括软件和依赖库还将完整的操作系统打包进去,虚拟机的体 积比容器大的多。

1.3Docker组成

DevOps中篇_第5张图片
1、Docker daemon(Docker守护进程): Docker守护进程是部署在操作系统上,负责支撑Docker Container的运行以及本地Image的管理。
2、Docker client: 用户不直接操作Docker daemon,用户通过Docker client访问Docker,Docker client提供pull、run等操作命令。
3、Docker Image: Docker 镜像就是一个只读的模板。 例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Tomcat或用户需要的其它应用程序。 镜像可以用来创建 Docker 容器。 Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使 用。
4、Docker Container: Docker 利用容器来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。打个比方,镜像相当于类,容器相当于对象。
5、Docker Registry: Docker 仓库分为公开仓库(Public)和私有仓库(Private)两种形式 最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。 用户也可以在本地网络内创建一个私有仓库。 当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。

2.部署微服务到Docker

2.1安装docker

Docker可以运行MAC、Windows、Centos、DEBIAN、UBUNTU等操作系统上,提供社区版和企业版,本教程基 于Centos安装Docker。Centos6对docker支持的不好,使用docker建议升级到centos7。
1、在Centos7上安装Docker
直接通过yum安装即可:
yum install -y docker
启动docker:service docker start
查询docker版本:docker version
2、在Centos6上安装Docker
rpm -ivh http://dl.Fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm yum install -y docker-io
service docker start

2.2部署流程

本项目微服务采用SpringBoot开发,将每个微服务工程打成Jar包,最终在Docker容器中运行jar,部署流程如下:
1、SpringBoot工程最终打成 Jar包
2、创建Docker镜像
3、创建容器
4、启动容器

2.3打包

1、使用maven的打包插件:
将下边的插件依赖拷贝到微服务工程中,本例子将学成在线的Eureka工程打包:

<build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring‐boot‐maven‐plugin</artifactId>
		</plugin>
	</plugins>
</build>

完整的Eureka工程pom.xml文件如下:

<?xml version="1.0" encoding="UTF‐8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema‐instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven‐4.0.0.xsd">
<parent>
	<artifactId>cangjk‐framework‐parent</artifactId>
	<groupId>com.cangjk</groupId>
	<version>1.0‐SNAPSHOT</version>
	<relativePath>../cangjk‐framework‐parent/pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>cangjk‐govern‐center</artifactId>
<dependencies>
<!‐‐ 导入Eureka服务的依赖 ‐‐>
	<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring‐cloud‐starter‐netflix‐eureka‐server</artifactId>
	</dependency>
</dependencies>
<build>
	<finalName>${project.artifactId}‐${project.version}</finalName>
	<plugins>
		<plugin>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring‐boot‐maven‐plugin</artifactId>
		</plugin>
	</plugins>
</build>
</project>

2、maven打包
在工程目录运行:mvn clear package
或通过IDEA执行clear package打包命令

2.4创建镜像

将上一步的jar包拷贝到Linux服务器,准备创建镜像。
测试jar包是否可以运行,执行:java -jar xc-govern-center-1.0-SNAPSHOT.jar
在xc-govern-center-1.0-SNAPSHOT.jar 位置编写Dockerfile文件

FROM java:8
ENV ARTIFACTID cangjk‐govern‐center ENV ARTIFACTVERSION 1.0‐SNAPSHOT
ENV HOME_PATH /home WORKDIR $HOME_PATH
ADD /$ARTIFACTID‐$ARTIFACTVERSION.jar $HOME_PATH/$ARTIFACTID.jar
ENTRYPOINT ["java", "‐jar", "cangjk‐govern‐center.jar"]

在Dockerfile文件所在目录执行:docker build -t cangjk-govern-center:1.0-SNAPSHOT .
镜像创建成功,查询镜像:docker images

2.5创建容器

基于cangjk-govern-center:1.0-SNAPSHOT镜像创建容器,容器名称为cangjk-govern-center-test

docker create ‐‐name cangjk‐govern‐center‐test ‐t ‐p 50101:50101 ‐e PORT=50101 ‐e EUREKA_SERVER=http://192.168.101.64:50101/eureka/,http://192.168.101.64:50102/eureka/ cangjk‐govern‐center:1.0‐SNAPSHOT

容器创建成功,可通过docker ps -a命令查看

2.6启动容器

docker start xc-govern-center-test
容器启动完成可以通过docker ps 查询正在运行中的容器。

2.7停止和删除

要删除的一个镜像重新创建,需要通过如下步骤:
1、停止正在运行的容器docker stop 容器名
例如:docker stop cangjk-govern-center-test
2、删除容器
docker rm 容器名
例如:docker rm cangjk-govern-center-test
3、删除镜像
docker rmi 镜像名或镜像Id
例如:docker rmi cangjk-govern-center:1.0-SNAPSHOT

2.8 重点:maven构建镜像

上边构建的过程是通过手工一步一步完成,maven提供docker-maven-plugin插件可完成从打包到构建镜像、构建 容器等过程。
1、编写pom_docker.xml

<?xml version="1.0" encoding="UTF‐8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema‐instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven‐4.0.0.xsd">
<parent>
	<artifactId>cangjk‐framework‐parent</artifactId>
	<groupId>com.cangjk</groupId>
	<version>1.0‐SNAPSHOT</version>
	<relativePath>../cangjk‐framework‐parent/pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>cangjk‐govern‐center</artifactId>
<version>1.0‐SNAPSHOT</version>
<dependencies>
<!‐‐ 导入Eureka服务的依赖 ‐‐>
	<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring‐cloud‐starter‐netflix‐eureka‐server</artifactId>
	</dependency>
</dependencies>
<build>
	<finalName>${project.artifactId}‐${project.version}</finalName>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring‐boot‐maven‐plugin</artifactId>
		</plugin>
		<plugin>
			<groupId>com.spotify</groupId>
			<artifactId>docker‐maven‐plugin</artifactId>
			<version>1.0.0</version>
<!‐‐docker镜像相关的配置信息‐‐>
			<configuration>
<!‐‐镜像名,这里用工程名‐‐>
				<imageName>${project.artifactId}‐${project.version}</imageName>
<!‐‐Dockerfile文件所在目录‐‐>
				<dockerDirectory>${project.basedir}/src/main/resources</dockerDirectory>
<!‐‐TAG,这里用工程版本号‐‐>
				<imageTags>
					<imageTag>${project.version}</imageTag>
				</imageTags>
					<imageName>${project.artifactId}:${project.version}</imageName>
<!‐‐构建镜像的配置信息‐‐>
				<resources>
					<resource>
					<targetPath>/</targetPath>
					<directory>${project.build.directory}</directory>
					<include>${project.artifactId}‐${project.version}.jar</include>
					</resource>
				</resources>
			</configuration>
		</plugin>
	</plugins>
</build>
</project>

2、将Dockerfile文件拷贝到src/main/resource下
3、删除之前创建的cangjk-govern-center镜像
4、进入工程根目录(pom_docker.xml所在目录)执行

mvn ‐f pom_docker.xml clean package ‐DskipTests docker:build
总结:实际开发过程当中主要就是用到上述得maven构建镜像,其中就包括将微服务打成jar包,然后自动构建成镜像,然后下载拉取镜像,创建容器,启动容器等所有步骤,然后通过一条指令直接运行微服务

你可能感兴趣的:(编程工具使用,docker,linux,java,maven)