前言:如果你想使用Jenkins调用同一台服务器上的代码,那么使用docker安装jenkins不是一个好的方法,容器的隔离使得Jenkins内部缺少非常多的库包,非常难以运行程序,运行镜像之类的还蛮适合的。
##.什么是docker
Docker是基于Go语言实现的云开源项目。
Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。
Linux 容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用运行在 Docker 容器上面,而 Docker 容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。
而 Linux 容器是 Linux 发展出了另一种虚拟化技术,简单来讲, Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离,相当于是在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。
Docker可以让一个应用在任何操作系统中非常方便的运行。而以前我们接触的虚拟机,也能在一个操作系统中,运行另外一个操作系统,保护系统中的任何应用。
两者有什么差异呢?
虚拟机(virtual machine)是在操作系统中模拟硬件设备,然后运行另一个操作系统,比如在 Windows 系统里面运行 Ubuntu 系统,这样就可以运行任意的Ubuntu应用了。
Docker仅仅是封装函数库,并没有模拟完整的操作系统,如图:
小结:
Docker和虚拟机的差异:
docker是一个系统进程;虚拟机是在操作系统中的操作系统
docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般
Docker将用户程序与所需要调用的系统(比如Ubuntu)函数库一起打包
Docker运行到不同操作系统时,直接基于打包的函数库,借助于操作系统的Linux内核来运行
我们用的传统虚拟机如 VMware , VisualBox 之类的需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给它的资源将全部被占用。每一台虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。
2.1 下载及配置
-
下载命令
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
-
创建/etc/docker/daemon.json文件
-
写入配置镜像加速
-
免去sudo
2.2 启动服务及运行hello-world
-
启动docker服务
-
运行hello-world
- 创建数据卷 一般在下
- 查看数据卷
- 删除数据卷
3.4 容器
- 查看运行过的容器(包括已经暂停的)
- 查看正在运行的容器
3.5 删除镜像步骤
3.5.1
- 查看运行过的容器
- 停止该容器运行
- 移除该容器
- 查看docker镜像
- 删除该镜像
3.6查看镜像内容器目录
- 其中 <image_name> 是Docker镜像的名称或ID,<directory_path> 是您想要查看的目录路径。此命令将创建一个新的容器,列出指定目录中的所有文件和子目录,并在完成后立即删除该容器
-
-v与–mount的区别
3.7进入容器内部
- 需要容器在运行中 一般使用/bin/bash功能全一点
4.1.搜索 Jenkins 镜像
4.2.拉取镜像
4.3.创建 Jenkins 挂载目录并赋予权限
4.4.创建并启动 Jenkins 容器
- -d:后台运行容器;
- -p 9001:8080:将容器的 8080 端口映射到服务器的 9001端口;
- -p 50000:50000:将容器的 50000 端口映射到服务器的 50000 端口 好像与jenkins相关;
- -v /usr/local/jenkins:/var/jenkins_home:将容器中 Jenkins 的工作目录挂载到服务器的 /usr/local/jenkins;
- -v /etc/localtime:/etc/localtime:让容器使用和服务器同样的时间设置;
- –restart=always:设置容器的重启策略为 Docker 重启时自动重启;
- –name=jenkins:给容器起别名
- jenkins/jenkins:镜像名称
重新启动jenkins
查看启动日志
4.5 jenkins国内镜像加速
- 选择第一个安装jenkins插件
1.点击【Manage Jenkins】->【Manage Plugins】选项。
2.点击【可选插件】选项,右侧输入【Locale】选项。
3.勾选【插件选项】,点击【直接安装】选项。
4.重启Jenkins:在URL后加上【/restart】,点击【回车】,点击【是】即可。
二、设置为中文
1.点击【Manage Jenkins】->【Configure System】选项。
2.找到【Locale】选项,输入【zh_CN】,勾选下面的选项,最后点击【保存】和【应用】即可
详细操作4.8 重启Jenkins
在浏览器地址最后加上即可
4.9 能在jenkins镜像里使用docker命令
-
可以看见目前容器是不可以使用docker命令的
若想使用jenkins运行其它的镜像 如运行自动化测试时则需要能使用docker命令;
目的是在此镜像内操作其它容器
-
停止某个镜像
docker是通过 docker client 调用docker socket向docker server 发出请求
- 找到docker client
-
找到docker socket(一般都是都在这个目录下)
-v /usr/bin/docker:/usr/bin/docker # 文件挂载 使用同一个客户端
-v /var/run/docker.sock://var/run/docker.sock # 文件挂载 使用同一个socket
-u root 给予Jenkins root的权限5.1下载并安装docker desktop
- 验证是否安装成功docker
5.2 为python脚本制作镜像
5.2.1 Dockfile编写
- 基础知识
1.关键字 指令使用大写字母
2.执行从上到下顺序执行
3.# 表示注释
4.每一个指令都会创建提交一个新的镜像层
Dockerfile :构建文件,定义了一切的步骤,源代码
Docker images:通过DockerFile构建生成的镜像,最终发布和运行的产品!
Docker 容器︰容器就是镜像运行起来提供服务器- 镜像命令( 当前路径 为Dockfile的路径)
5.2.3 推送镜像到dockerhub
- 使用dockerlogin登录
- 推送到docker hub
后面是镜像名称:标签
这是你的仓库名称philyou/study_work 推送时会推到对应的仓库 注意是公有仓库还是私有仓库登录dockerhub
- 使用dockerlogin登录(笔者拉取的是私人镜像)
7.1 创建jenkins(也是宿主机)的挂载目录
之前jenkins是通过 挂载到宿主机的 目录下的
要为allure-report 创建挂载的宿主机目录 /usr/local/jenkins的allure-result构建触发器
- 构建后命令 把容器里生成的json和text挂载到jenkins里的工作空间里
7.2 jenkins安装allure插件
- 1
项目名为
创建文件夹
从这是脚本产生的数据结果复制都当前项目空间下的文件夹allure-reslts则为
参考文献
https://yeasy.gitbook.io/docker_practice/introduction/what
https://blog.csdn.net/itcast_cn/article/details/124865268
https://blog.csdn.net/weixin_45847167/article/details/121242285
https://www.bilibili.com/video/BV1ce4y1S7hm
https://blog.csdn.net/aiwangtingyun/article/details/123523669
https://www.bilibili.com/video/BV1og4y1q7M4-
/bin/bash和/bin/sh的区别
-
停止一个容器后使用使用新命令重新启动该容器,该容器之前的数据会消失吗
就是挂载后的数据不会消失
- 如何向一个正在运行的容器挂载本地文件
可以先stop、rm该容器