Jenkins与Docker的自动化CI/CD实战(一)

做这个项目之前回顾一下docker

一 、docker介绍

1.什么是docker

Docker属于Linux容器的一种封装,提供简单易用的容器使用接口。
Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。
有了Docker,就不用担心环境问题。 总体来说,Docker的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

2.docker的概念

Docker是开发人员和系统管理员使用容器开发、部署和运行应用程序的平台。使用Linux容器来部署应用程序称为集装箱化。使用docker轻松部署应用程序。

集装箱化的优点:

  • 灵活:即使是复杂的应用程序也可封装。
  • 轻量级:容器利用并共享主机内核。
  • 便携式:您可以在本地构建,部署到云上并在任何地方运行。
  • 可扩展性:您可以增加和自动分发容器副本。
  • 可堆叠:您可以垂直堆叠服务并及时并及时堆叠服务。               

3.容器和虚拟机

虚拟机(virtual machine)就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,比如在Windows系统里面运行Linux系统。应用程序对此毫无感知,
因为虚拟机看上去跟真丝系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其它部分毫无影响。
Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。
由于容器是进程级别的,相比虚拟机又很多优势。
优缺点 虚拟机 linux容器(LXC)
资源 资源占用多 资源占用少
启动速度 启动慢 启动快
复杂程度 冗余步骤多 体积小
安全性 安全--防止交互 有些不安全

4.基本概念

   4.1docker镜像

对于linux而言,会挂载root文件系统为其提供用户空间支持。而Docker镜像,相当于一个root文件系统。除了提供容器运行时所需的程序、库、资源、配置等文件外,还包括了一些为运行时准备的一些配置参数(,匿名卷,环境变量,用户等)

分层存储

  docker设计时,充分利用Union FS的技术,将其设计为分层存储的架构。所以镜像是一个虚拟概念,其实实际是由多层文件系统联合组成。分层存储的特征还使得镜像的复用,定制变得更为容易,甚至可以用之前构建好的镜像作为基础层。

 

统一文件系统(Union file system)能够将不同层整合成一个文件系统,为这些曾提供了一个统一的视角,这样就隐藏了多层的存在,用户视角只能看到一个文件系统。

   4.2 Docker容器

  镜像和容器的关系,就想是面向对象程序设计中类和实例一样,镜像是静态的定义,容器是镜像运行的实体。

  容器存储层的生存周期和容器一样,容器小王时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失

5.仓库

   Docker Registry

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry就是这样的服务。
一个Docker Registry中可以包含多个仓库(Repository);每个仓库可以包含多个标签(tag);每个标签对应一个镜像。
通常,一个仓库会包含一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件那个版本的镜像。如果不给出标签,将以laest作为默认标签。
以ubuntu镜像为例,ubuntu是仓库的名字,其包含有不同的版本标签,如,14.04,16.04。我们可以通过ubuntu:14.04或者ubuntu:16.04来具体指定所需要哪个版本的镜像。如果忽略了标签,比如ubuntu,那将视为ubuntu:latest。
仓库名经常以两段式路径形式出现,比如jwilder/nginx-proxy,前者意味着Docker Registry多用户环境下的用户名,后者则往往是对应的软件名。但这并非绝对,取决于所使用的具体Docker Registry的软件或服务。

     公开服务

  最常用的Registry公开服务是官方的Docker Hub,这也是磨人的Registry,并拥有大量的高质量的官方镜像。比如:Google Container Registry,Kubernetes的镜像使用就是这个服务。

      私有仓库

 Docker提供了Docker registry镜像,可以作为私有仓库服务

二、Docker的使用场景

1、Web应用服务

Web应用服务是使用最广泛的一类服务,典型的架构是前端一个Tomcat + Java服务,后端mysql数据库。前端的Java web服务器是最适合使用Docker容器的,先将Java运行环境、web服务器直接打包成一个通用的基础docker镜像,之后再将自定义应用代码或编译程序包加入到该基础镜像中就能产生一个新的应用镜像,最后通过docker服务立马就能以容器的形式启动web应用服务。因为web应用程序一般是无状态的,随着业务访问量增减,用同样的镜像新建、销毁容器即可轻松实现伸缩(前面还需配上DNS域名或者负载均衡的服务),例如下图所示。

 2.持续集成和持续部署

互联网行业倡导敏捷开发,使用docker容器云平台,就能实现从代码编写完成推送到git/svn后,自动触发后端平台将代码下载、编译并构建成测试docker镜像,再替换测试环境容器服务,自动在Jenkins中运行单元/集成测试,最后测试通过后,马上就能自动将新版本镜像更新到线上,完成服务升级。整个过程全自动化,一气呵成,最大程度地简化了运维成本,而且保证线上、线下环境完全一致,而且线上服务版本与git/svn发布分支也实现统一。

三、docker组件

docker client

docker daemon

docker image

docker Registry

docker Container

(1)docker client,docker daemon

Docker 是一个客户端、服务端(C/S)架构的程序。Docker客户端只需向Docker服务器或守护进程发出请求,服务器或守护进程将完成所有工作并返回结果。Docker守护进程有时也称为Docker引擎。Docker提供了一个命令行工具docker以及一整套RESTful API来与守护进程交互。用户可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。

(2)docker image

(3)docker Registry

(4)docker Container

四 docker安装

(1)环境要求

安装docker ce ,需要centos7维护版本。

(2)卸载旧版本

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

(3)使用存储库安装

Docker 要求CentOS系统的内核版本高于3.10

①查看内核版本

uname -r
升级内核

②确保yum包更新到最新

yum update -y
reboot

③安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

④以下命令来设置稳定的仓库。

yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

⑤要安装特定版本的 Docker Engine-Community,请在存储库中列出可用版本,然后选择并安装:

yum list docker-ce --showduplicates | sort -r

⑥安装

yum install docker-ce
yum install <FQPN>  安装指定版本

⑦启动并设为自启

systemctl start docker
systemctl enable docker

docker version

4.2 docker基本操作

配置镜像加速器:

针对docker客户端版本大于1.10.0用户

mkdir /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF' 
{ 
"registry-mirrors": ["https://sopn42m9.mirror.aliyuncs.com"] 
} 
EOF 
sudo systemctl daemon-reload 
sudo systemctl restart docker

运行一个WEB应用

docker pull training/webapp
docker run -d -P training/webapp python app.py

参数说明:

-d  :容器在后台运行

-P :将容器内部使用的网络端口映射到我们使用的主机上

-p: 8088:8080  前面为宿主机的端口,后面为容器的端口

docker run -d -p 5000:5000 training/webapp python app.py

查看容内部标准输出

docker logs -f  "container id"

 docker运行(创建)容器命令

 

 · docker run tomcat

docker run -it 镜像名
docker run -it --name 别名 镜像名

参数说明:

-i : 表示创建要给交互式容器

-t:表示运行容器的同时创建一个伪终端,一般与 -i 一起使用

–-name : 自定义容器别名

2. docker查看容器命令

猜你喜欢

转载自www.cnblogs.com/lanist/p/13209678.html