docker的介绍

1.什么是docker

docker解决了软件环境部署复杂的问题

对于一个传统的软件工程,开发人员把写好的代码放到服务器上去运行是一件很头疼的事情,因为常常会出现环境不兼容而导致各种各样的bug

比如说,开发是windows系统下编写的代码,放到linux服务器上可能会出问题,开发在本地依赖了一个系统自带的驱动,服务器上却没有这个驱动,开发在本地设置了很多环境变量,服务器上又得重新设置

在软件部署的时候,经常会发生在这台机器上可以跑,但是在另一台机器上却运行失败的情况。运维人员需要不断在开发环境和服务器环境之间调试

有了docker,只需要简单的几行命令,就可以做到所有运行环境都一致

docker使用的技术几乎没有新技术,大多是对linux已经存在的技术的封装,docker中的容器,是使用linux之前的一些技术,把开发需要设置的环境,全部隔离在一起,形成一个集装箱。当有其他的环境要配置的时候,只需要复制一个集装箱即可

2.为什么使用docker

作为一个测试来说,使用docker的主要原因就是用来搭建测试环境

例如:不同的公司使用的环境大不相同

语言      web框架    数据库

Java + spring bott + mysql + redis

php   +    yii     +    oracle

python + Django + mysql

接口自动化需要安装的内容:

  • linux --- centos,ubuntu
  • python
  • 设置环境变量
  • pip install -r requirements.txt
  • git / svn
  • jenkins

传统的安装环境的方式缺陷:

  • 没有固定的脚本可以执行
  • 系统发行版本不一样
  • 系统版本不一致
  • python版本不一致
  • 没有办法移植

docker 为什么能解决传统安装呢?因为它像虚拟机VMware相似,使用的是镜像文件(ISO)

不管你想安装什么软件,什么环境,只需要下载这个软件的镜像,通过docker运行即可,这样就避免了测试环境与生产环境,版本等因素造成的问题

在环境配置的时候,还可以使用创建虚拟机的方式来实现环境同步。如果服务器用的是centos的系统,可以在开发的时候就用centos开发。这确实解决了一些问题,但是还是需要去独立配置每一台机器。而且,虚拟机本身对多个程序之间的环境不兼容的时候无能为力,可能需要借助第三方的一些管理工具,而docker却可以轻松在一台机器上运行多个容器

容器不是一台机器,docker利用的是linux的资源分离机制,例如cgroups,以及linux核心命名空间(namespaces),来建立独立的容器(containers) 。容器看上去是一台机器,实际上是一个进程

相比于虚拟机,容器的优势主要有:

  • 资源占用少
  • 启动速度快
  • 本身体积小

docker给软件开发领域带来的不仅仅是提供环境,可以说它直接带火了Golang编程语言。因为docker容器创建和销毁非常方便,很适合用来动态扩容和缩容,可以直接用在云计算当中的弹性服务当中。另外,基于docker容器的隔离性,一台服务器上可以同时跑多个程序而做到管理方便,很符合微服务架构的需要

docker依赖于linux,在windows上安装比较麻烦,所以建议在linux上操作,最好在服务器上部署docker,因为工作中不可能给你台虚拟机去部署环境,都是使用服务器部署环境

3.购买云服务器

安装docker之前,我们需要先有服务器,没有的话需要先去购买云服务器,我这里纯是练习总结,所以选择了ucloud,因为他们家可以按量收费,大家要是想长期使用服务器,可以选择国内的大厂家的,如腾讯云,华为云,阿里云等,百度一搜好多广告

打开ucloud网站,然后注册登录,购买服务器

地区最好选择国外的,因为国内可能速度差点 

镜像如果选择的是centos的话,那最好选择7.几的版本,8.几的版本问题比较多,我这里自用,CPU1核,内存2G够用了,磁盘选择云盘即可

选择web设置,管理员的密码,主机名称,其他不用设置,选择付款方式购买即可,如果没有实名认证是付款不了的,所以要先进行实名认证

购买完成后可以看到服务器

因为默认开启的端口号很少,所以我们需要自己去开放端口号,点击【关联产品操作】-->【更换外网防火墙】

 

点击【外网防火墙页面】--> 选择默认的防火墙 --> 点击【复制】按钮

添加新的防火墙,输入名称点击确定即可,从列表可以查看新添加的

点击新增加的防火墙,点击【添加规则】--> 设置端口号

 

 开放完端口后,以下图片显示的端口就可以使用了,超出这些端口是不可以使用的

使用一些连接服务器工具可以连接,如xshell、finalshell、putty等,我这里使用的是xshell,已经安装好了

 登录成功后可以看到root的身份

 可以检查一下有没有安装过docker,显示没有就可以进行安装了

4.docker的安装

可以直接去docker官网查看centos的安装命令,具体步骤如下:

 需要什么命令,自行向下滑动页面,查找对应的命令

 安装docker步骤:

如果之前安装过可以执行以下命令进行卸载旧版本,没有安装过不用理

 sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

 安装命令:

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io

遇到是否安装,直接输入y即可

 重启docker

sudo systemctl start docker

重启后,可以输入docker查看是否安装成功,显示了docker相关内容说明安装成功

5.docker的镜像

docker的镜像和容器关系:

镜像相当于是安装包

容器相当于是运行的软件,进程

通过镜像去形成容器

我们可以通过docker image查看镜像相关的操作指令

 镜像相关的操作指令:(我们测试常用到的有以下)

  • docker image pull 镜像名称    下载镜像
  • docker image  rm  image_id(镜像ID)   删除镜像**
  • docker image ls  显示所有的镜像

nginx是用来搭建web的服务器 ,网上直接搜索docker nginx 即可,然后复制docker pull nginx到xshell中执行,就可以下载nginx了

下载完后,可以通过docker image ls 查看镜像

 

删除镜像:删除的镜像ID不需要输入完整,部分就可以了,删除完可以查看没有nginx镜像了

想安装什么镜像,可以直接搜索,复制命令,如jenkins

6.docker的容器

run运行容器

基础使用:

docker container  run nginx

docker 会到本地区查找有没有叫做nginx的镜像,如果没有会在Docker Hub官方仓库当中下载

docker 每条命令里都有可选参数,收下是run经常使用的一些可选参数:

-p /  --publish

开放端口,比如开放容器的80和22端口,分别映射到宿主机的8000和5000端口。nginx必须要开放端口才可以使用

docker container  run -p 8000:80 -p 5000:22 nginx

开放端口前,一定要确定服务器开放了8000端口的防火墙

 开放端口后,就可以访问了

 -d  / --detach

后台运行,打印容器ID

没有后台运行时,会显示nginx的日志:

 后台运行以后,打印容器ID后可以接着做其他的事:

 --name

给容器取一个名字,更容易记得住。默认容器名称是随机生成的

-e / --env

给容器添加环境变量

--rm

退出容器时自动删除容器,通常用在调试过程中

-v / --volume

添加volume数据卷(数据卷是宿主机和容器之间的数据通道)

logs日志查看

查看某个容器运行的日志

docker container logs container_id

stop命令

停止容器运行

docker container stop container_id(name)

rm命令

删除容器

docker container rm container_id(name)

ls查看容器

docker container ls

可选择的参数:

-a / --all

展示所有的容器,包含运行的和没有运行的

-q / --quiet

只显示IDs

-f / --filter

筛选容器

列举所有退出的容器,并显示ID

docker container ls -aq -f "status=exited"

7.jenkins运行docker容器

 使用官方的安装时,老是报错,所以我换了一种方式安装

执行如下命令即可:

注意:端口号根据自己开放的端口来填写,一定要确定填写的端口号是服务器开放的端口号

docker run -u root --rm -d --name blueocean -p 8084:8080 -p 50004:50000 -v $(which docker):/usr/bin/docker -v $HOME/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean

 查看一下可以看到 jenkins 的镜像安装成功

确认安装成功,就可以访问网址了

安装成功后,我们要去查看 jenkins 的初始密码,所以需要先查到 container id,然后再查看日志信息找到密码

把管理员密码复制到输入框内,然后点击【继续】按钮

之后的步骤可以参考我之前的一篇文章jenkins介绍与使用_晒不黑的黑煤球的博客-CSDN博客去进行设置,我这里就不一步一步介绍了

配置完成后的界面如下

点击开始使用后,就自动进入jenkins页面 

接下来,我们需要在 docker 上安装一个定制版的 python 镜像文件

怎么去打包一个python脚本的镜像:

  1. 远程服务器,安装python,推荐python3
  2. docker运行python,通过Dockerfile

dockerfile定制版的镜像:

dockerfile , 构建了一个 python 的容器
构建操作(steps):  python run.py
构建后的操作(post): 生成测试报告

dockerfile常用命令:

FROM

必须写,表示从哪个基镜像开始构建

FROM untuntu

# 从0开始

FROM scratch

WORKDIR

工作目录

WROKDIR /usr/share

# 相当于运行cd /usr/share

COPY / ADD

添加本地文件,一般使用COPY

COPY localfile/dest/file

ENV

添加环境变量 

ENV <key> <value>

ENV <key>=<value>

EXPOSE

开放端口,容器可以监听的端口,EXPOSE 80/udp,协议可以不填。注意和运行程序的-p区分

VOLUME

数据卷

RUN 

要运行的指令,可以是 shell格式,也可以是exec格式

RUN yum install wget

RUN ["yum","install","wget"]

CMD

一个 Dockerfile中只出现一次,容器开启时运行的命令。比如启动一个python程序:python run.py

格式也支持 shell 和 exec 格式

CMD python run.py

Dockerfile配置:(在项目中增加一个Dockerfile文件,添加如下代码)

注意:复制下面代码时到Dockerfile文件时,把后面的注释删除掉

FROM python:3.9-slim # 从python开始构建
WORKDIR /api_testing
COPY . . # 把本地文件复制到容器中
RUN pip3 install -r requirements.txt  # 安装所有的第三方库
CMD [ "python3", "run.py"] # 运行run.py

 Jenkinsfile配置:(在项目中增加一个 Jenkinsfile文件,添加如下代码)

pipeline {
    agent { dockerfile { additionalBuildArgs "-t api_testing:${currentBuild.number}"} }
    stages {
        stage('test') {
            steps {
                sh 'python run.py'
            }
            post {
                always {
                    publishHTML (target : [allowMissing: false,
                        alwaysLinkToLastBuild: true,
                        keepAll: true,
                        reportDir: 'reports',
                        reportFiles: '*.html',
                        reportName: 'My Reports',
                        reportTitles: 'The Report'])
                }
            }
        }
    }
}

然后把项目git push 到仓库

安装两个docker插件

 然后新建一个流水线

 只需要配置仓库的地址及用户名密码,点击保存

最后点击立即构建即可 

可以通过控制台Console Output,查看运行的过程

总结:

  1. jenkins一定要确定两个插件(docker plugin 和 docker pipeline)是否安装成功,否则构建结果会报错,我在搜索docker plugin时搜索不到,换了各种国内镜像文件也不行,最后我安装的docker后,查看已安装的插件时显示docker plugin已经安装好了
  2. 构建结果显示错误:pytest:ERROR: usage: run_tests.py [options] [file_or_dir] [file_or_dir] [...],这是因为requirements.txt中缺少pytest-html第三方库(不知道为什么,本地也未安装pytest-html运行就OK)
  3. 查找映射的地址,我的没有在home目录下,而是在 /root/jenkins/worksapce 下
  • 27
    点赞
  • 172
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值