Docker+Jenkins实现CI/CD

为何要使用docker

在咱们前端部署项目的时候,须要把咱们项目的各类环境原封不动的搬到服务器上。而后若是有多个环境,好比开发环境-测试环境-预上线环境-线上环境等等,咱们就须要把这些环境等在多台服务器上进行部署。而且要保证环境的版本要保持一致。可是docker就能够解决这种问题。javascript

什么是docker

docker是利用go语言开发的应用容器引擎,基于容器化,沙箱化的应用部署技术,可用于自动化测试,打包,持续集成和发布的应用场景。能够用于数据库的搭建。nginx服务器的搭建,nodejs,php等编程语言环境的搭建。容器是彻底使用沙箱机制,相互之间不会有任何接口。简言之,就是能够在Linux上镜像使用的这么一个容器。 可能这儿仍是不懂docker是干吗,那么就打个比喻:我来到一片空地,想建个房子,因而我搬石头、砍木头、画图纸,一顿操做,终于把这个房子盖好了。结果,我住了一段时间,想搬到另外一片空地去。这时候,按以往的办法,我只能再次搬石头、砍木头、画图纸、盖房子。可是,跑来一个老巫婆,教会我一种魔法。这种魔法,能够把我盖好的房子复制一份,作成“镜像”,放在个人背包里。等我到了另外一片空地,就用这个“镜像”,复制一套房子,摆在那边,拎包入住。这种魔法就是dockerphp

什么是容器化

容器化是将应用程序或服务。以及其依赖的配置,一块儿打包成容器映像的一种软件开发方法前端

docker的安装

方法一:vue

  1. 安装yum-utils软件包(提供yum-config-manager 实用程序)并设置稳定的存储库。
sudo yum install -y yum-utils
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo  (能够换成阿里源)
复制代码
  1. 安装
sudo yum install docker-ce docker-ce-cli containerd.io
复制代码

这样会安装最新版本,你也能够指定版本安装java

// 查看全部版本
yum list docker-ce --showduplicates | sort -r   
// 安装指定版本,把<VERSION_STRING>替换成相应的版本就行
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
复制代码
  1. 启动docker,而且注册为开机服务
sudo systemctl start docker
sudo systemctl enable docker
复制代码
  1. 查看docker的版本,以及是否安装成功
docker -v 
docker run hello-world
复制代码

方法二:利用脚本安装(生产环境不推荐使用,本身学习的时候能够用)node

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
// 加入用户组
usermod -aG docker your-user
复制代码

官网安装教程:docs.docker.com/engine/inst…linux

docker的使用

docker的三大核心概念

  1. 仓库 仓库是存放docker镜像的地方。仓库和注册服务器(Registry)仍是有区别的。注册服务器是存放仓库的地方,在其中存放了不少仓库,每一个仓库存放一类镜像文件。仓库分为公有仓库和私有仓库,DockerHub是目前最大的公有仓库。能够经过docker push/pull命令从仓库中上传和下载镜像,docker search命令来搜索镜像。(有点相似于咱们前端的npm同样,里面存放着各类开源插件)
  2. docker镜像

Docker镜像(Image)相似与虚拟机的镜像,能够将他理解为一个面向Docker引擎的只读模板,包含了文件系统。 例如:一个镜像能够彻底包含了Ubuntu操做系统环境,能够把它称做一个Ubuntu镜像。镜像也能够安装了Apache应用程序(或其余软件),能够把它称为一个Apache镜像。 镜像是建立Docker容器的基础,经过版本管理和增量的文件系统,Docker提供了一套十分简单的机制来建立和更新现有的镜像。 用户能够从网上下载一个已经作好的应用镜像,并经过命令直接使用。 总之,应用运行是须要环境的,而镜像就是来提供这种环境。(有点相似于前端的no_modules里面的文件)
3. Docker容器 Docker容器(Container)相似于一个轻量级的沙箱子(由于Docker是基于Linux内核的虚拟技术,因此消耗资源十分少),Docker利用容器来运行和隔离应用。 容器是从镜像建立的应用运行实例,能够将其启动、开始、中止、删除,而这些容器都是相互隔离、互不可见的。 能够把每一个容器看做一个简易版的Linux系统环境(包括了root用户权限、进程空间、用户空间和网络空间),以及与运行在其中的应用程序打包而成的应用盒子。 镜像自身是只读的。容器从镜像启动的时候,Docker会在镜像的最上层建立一个可写层,镜像自己将保持不变。就像用ISO装系统以后,ISO并无什么变化同样。nginx

docker常见的命令

1.docker pull hello-world   从仓库拉取镜像    
2.docker images   查看本地镜像     
3.docker run hello-world   // 若果本地没有镜像,就会拉取,并运行,若是有镜像,就会直接运行镜像,生成一个容器
4.docker ps //查看正在运行的容器
5.docker ps -a // 查看全部容器
6.docker stop hello-world  // 中止正在运行的容器
7.docker start hello-world  // 启动容器 
8.docker restart hello-world   // 重启容器 
9.docker rm  hello-world   // 删除容器
10.docker rmi  hello-world   // 删除镜像
复制代码

可能你们仍是很陌生,那么我这里用两个实例来演示一下这些命令git

  1. 使用nginx
docker pull nginx   // 拉取nginx的镜像并运行
docker images   // 查看镜像 
docker run -d -p 8000:80 --name my-nginx nginx 
参数说明:
-d 以守护模式运行镜像,也就是后台运行
-p 宿主机端口映射的镜像端口,左边是宿主机端口,右边是镜像端口,80是Nginx访问端口
--name给容器起一个惟一的别名
这里就启动了nginx   在浏览器输入; ip:8080就能够看到nginx启动成功
docker ps  // 查看容器 
复制代码
  1. 安装node.js
docker pull node:latest   // :latest 表示最新版本。能够指定对应的版本
docker run -itd --name node-test node   // 运行node 
参数说明
-d :分离模式: 在后台运行
-i :容器的标准输入保持打开
-t :让docker分配一个伪终端并绑定到容器的标准输入上
docker exec -it node-test /bin/bash  // 经过 exec 命令对指定的容器执行 bash
node -v    
复制代码

利用docker安装jenkins

docker run -u root -itd --name jenkins -p 9000:8080 -v $(which docker):/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock  -v /volume1/docker/jenkins:/var/jenkins_home jenkins/jenkins
复制代码

启动命令含义 -u root: 权限等级为root
-p 9000:8080 Jenkins默认网页访问端口为8080,将端口映射到外部主机
-v $(which docker):/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock使Jenkins内部可使用docker命令
-v /volume1/docker/jenkins:/var/jenkins_home 将Jenkins的配置映射到外部主机卷,容器删除仍可保留配置github

等浏览器初始化jenkins成功后,会提示须要一个初始密码,这个时候,咱们能够到/volume1/docker/jenkins/secrets/initialAdminPassword 查看密码

部署一个前端项目

  1. 进入jenkins,安装一些第三方插件

2. 安装node.js 3. 进入 4. 配置node 5. 安装(这个是为了在后面构建项目的时候,能够自由的选择分支) 6.这样jenkins初始化就完成了。咱们开始初始化一个vue3项目到github上 7. 开始配置jenkins 8. 参数化构建(后面能够选择分支)
9. 绑定github 10. 添加node 11. 执行脚本(这里利用docker去安装nginx,并映射到9001端口) 12. 开始构建 13. 完成构建,能够到对应的地址+端口号访问你的前端项目。

相关文章
相关标签/搜索