😎 知识点概览
为了方便后续回顾该项目时能够清晰的知道本章节讲了哪些内容,并且能够从该章节的笔记中得到一些帮助,所以在完成本章节的学习后在此对本章节所涉及到的知识点进行总结概述。
本章节为【学成在线】项目的 day20
的内容。
- 原讲义中对该章节的
gitlab
与jenkins
安装步骤以及部署容器的内容和步骤描述得不够详细,在本文中做出了补充,详细的描述每个步骤。 - 本章节建议还是尝试看笔记来完成一次操作,然后再去看视频资料,这样能理解得更深刻。
目录
内容会比较多,可以根据目录进行按需查阅。
文章目录
一、DevOps介绍
DevOps 是 Development
和 Operations
两个词的缩写,引用百度百科的定义:
DevOps
是一种方法或理念,它涵盖开发、测试、运维的整个过程。DevOps
是提高软件开发、测试、运维、运营等各部门的沟通与协作质量的方法和过程,DevOps
强调软件开发人员与软件测试、软件运维、质量保障(QA)部门之间有效的沟通与协作,强调通过自动化的方法去管理软件变更、软件集成,使软件从构建到测试、发布更加快捷、可靠,最终按时交付软件。
DevOps
兴起于2009年,近年来由于云计算、互联网的发展,促进了DevOps的基础设施及工具链的发展,涌现了一大批优秀的工具,这些工具包括开发、测试、运维的各各领域,例如:GitHub、Git/SVN、Docker、Jenkins、Hudson、Ant/Maven/Gradle、Selenium、QUnit、JMeter 等。下图是DevOps相关的工具集:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6TrNCM8J-1595704048578)(https://qnoss.codeyee.com/20200704_5b6u5pyN5YqhW+WtpuaIkOWcqOe6v10gZGF5MjAtMe+8mkRldk9wcyDpobnnm67pg6jnvbLkuI7mjIHnu63pm4bmiJA=/image3.png)]
二、使用GitLab管理项目
0x01 安装Gitlab
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。
GitLab 与 GitHub的功能相似,通常企业使用GitLab在局域网搭建自己的Git代码管理仓库
拉取gitlab、redis、postgresql,gitlab
依赖 redis
和 postgresql
。
sudo docker pull sameersbn/redis
sudo docker pull sameersbn/postgresql
sudo docker pull gitlab/gitlab-ce:latest
新建容器的目录
sudo mkdir /var/docker/postgresql/data -p
sudo mkdir /var/docker/redis/data -p
sudo mkdir /var/docker/gitlab/data -p
创建 postgresql、redis 容器:
# 创建postgresql容器
sudo docker run --name postgresql -d --privileged=true -e 'DB_NAME=gitlabhq_production' -e 'DB_USER=gitlab' -e 'DB_PASS=123123' -e 'DB_EXTENSION=pg_trgm' -v /var/docker/postgresql/data:/var/lib/postgresql sameersbn/postgresql
# 创建redis容器
sudo docker run --name redis -d --privileged=true -v /var/docker/redis/data:/var/lib/redissameersbn/redis
创建gitlab容器:
sudo docker run --name gitlab -d --link postgresql:postgresql --link redis:redisio \
--hostname 10.1.1.161 -p 10022:22 -p 8910:80 -p 8911:443 -e 'GITLAB_PORT=8899' \
-e 'GITLAB_SSH_PORT=10022' \
-e 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \
-e 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \
-e 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \
-e 'GITLAB_HOST=10.1.1.161' \
-e 'SMTP_AUTHENTICATION=login' \
-v /var/docker/gitlab/data:/home/git/data docker.io/gitlab/gitlab-ce
- 使用 \ 来标识shell命令的换行,在shell命令过长的情况下使用 \ 换行可以使内容更加清晰
- –link:可以用来链接2个容器,使得源容器(被链接的容器)和接收容器(主动去链接的容器)之间可以互相通信,并且接收容器可以获取源容器的一些数据,如源容器的环境变量
浏览器访问:http://10.1.1.161:8910
初次访问需要等待一段时间。
查看 gitlab的启动日志
sudo docker logs -f gitlab
启动完成后,配置初始密码,默认用户名为 root
0x02 创建项目
登录 gitlab 后访问 http://10.1.1.161:8910/projects/new
填写项目的基本信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bqvoUHne-1595704048584)(https://qnoss.codeyee.com/20200704_5b6u5pyN5YqhW+WtpuaIkOWcqOe6v10gZGF5MjAtMe+8mkRldk9wcyDpobnnm67pg6jnvbLkuI7mjIHnu63pm4bmiJA=/image6.png)]
项目构建成功后,得到一个项目的链接 http://10.1.1.161:8910/root/xc-services-project
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hyk0NvRT-1595704048585)(https://qnoss.codeyee.com/20200704_5b6u5pyN5YqhW+WtpuaIkOWcqOe6v10gZGF5MjAtMe+8mkRldk9wcyDpobnnm67pg6jnvbLkuI7mjIHnu63pm4bmiJA=/image7.png)]
0x03 将项目推送至gitlab
打开 cmd,进入到项目的目录下
1、运行 git init
初始化项目的git配置
2、在项目根目录下创建 .gitignore
文件,将一些编译后生成的文件排除在外 不上传至git仓库,内容如下
.idea
*/target/*.*
*/target/**/*.*
*.class
*.iml
##ignore this file##
.classpath
.project
.settings
##filter databfile、sln file##
*.mdb
*.ldb
*.sln
##class file##
*.com
*.class
*.dll
*.exe
*.o
*.so
# compression file
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
*.via
*.tmp
*.err
# OS generated files #
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
Icon?
ehthumbs.db
Thumbs.db
3、执行 git add .
命令,暂存当前目录下的所有子目录以及文件到git记录
4、执行 git commit -m "第一次提交"
将暂存的记录正式提交到 git
记录内,-m 参数的内容为描述信息
5、执行以下命令,设置远程仓库的地址
git remote add origin "http://10.1.1.161:8910/root/xc-services-project.git"
6、执行 git push origin master
推送代码到远程仓库
推送成功,查看远程仓库
三、部署微服务到Docker
0x00 Docker简介
服务器虚拟化主要有两种技术:
1、Hypervisor也叫VMM(virtual machine monitor)即虚拟机监视器
Hypervisor
是一种将操作系统与硬件抽象分离的方法,实现在宿主机(host machine)上能同时运行多个客户机(guest machine),每个客户机就是一个虚拟机,这些虚拟机高效地分享宿主机的硬件资源。
如下图:
在服务器(宿主机)上安装操作系统,并安装hypervisor虚拟机管理软件,如VMware、VirtualBox等,由
hypervisor管理多个虚拟机,每个虚拟机上需要安装客户操作系统、依赖库、应用软件。
2、Containers容器化技术
容器技术中 docker
引擎取代了 hypervisor
,docker引擎是运行在住宿操作系统上的一个进程,该进程管理了多个docker容器,每个docker容器集成了应用软件、依赖库,容器之间相互隔离。
3、技术对比
资源占用:
虚拟机由于是独立的操作系统,占用资源比docker多。
启动速度:
虚拟机包括操作系统,启动虚拟机相当于启动一个操作系统,容器则不一样,容器中只包括操作系统的内核,启动
一个容器实例相当于启动一个进程,容器的启动速度比虚拟机快。
体积:
容器包括操作系统内核、软件及依赖库,虚拟机不仅包括软件和依赖库还将完整的操作系统打包进去,虚拟机的体
积比容器大的多。
4、Docker 容器架构
-
Docker daemon(Docker守护进程)
Docker守护进程是部署在操作系统上,负责支撑
Docker Container
的运行以及本地Image
的管理。 -
Docker client
用户不直接操作Docker daemon,用户通过
Docker client
访问Docker
,Docker client
提供
pull、run 等操作命令实现对docker的操作。 -
Docker Image
Docker 镜像就是一个只读的模板。 例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了 Tomcat或用户需要的其它应用程序。 镜像可以用来创建 Docker 容器。 Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
-
Docker Container
Docker 利用容器来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停
止、删除。每个容器都是相互隔离的、保证安全的平台。打个比方,镜像相当于类,容器相当于对象。 -
Docker Registry
Docker 仓库分为公开仓库(Public)和私有仓库(Private)两种形式 最大的公开仓库是
Docker Hub,存放了数量庞大的镜像供用户下载。 用户也可以在本地网络内创建一个私有仓库。 当用户创建自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。
0x01 安装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
关于的 docker
的一些常用的命令和操作,参考 https://www.runoob.com/docker/docker-tutorial.html
0x02 部署流程
本项目微服务采用 SpringBoot
开发,将每个微服务工程打成Jar
包,最终在 Docker
容器中运行 jar
,部署流程如下:
1、SpringBoot 工程最终打成 Jar
包
2、创建Docker镜像
3、创建容器
4、启动容器
0x03 打包
1、使用 maven 的打包插件:
将下边的插件依赖拷贝到微服务工程中,本例子将学成在线的 Eureka
工程打包:
<build>
<finalName>${project.artifactId}-${project.version}</finalName>
<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>xc-framework-parent</artifactId>
<groupId>com.xuecheng</groupId>
<version>1.0-SNAPSHOT</version>
<relativePath>../xc-framework-parent/pom.xml