热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux环境自动部署案例,Linux下基于Gitlab和Jenkins的自动化部署实例(二)—构建docker镜像,并利用构建的镜像运行容器...

续我的上篇博文:https:mp.csdn.netpostedit89260300。即test项目已经配置好本篇博文配置的自动化部署之推送docker镜像是在上篇博文

续我的上篇博文:https://mp.csdn.net/postedit/89260300。即test项目已经配置好

本篇博文配置的自动化部署之推送docker镜像是在上篇博文的hello项目构建成功之后,才触发的。

git——>gitlab——>jenkins——>docker  build  images——>docker  engine ——>container

在实验之前,先进行设置,使得虚拟机可以上网(因为本次实验需要在安装有Jenkins软件的虚拟机server2上下载有关docker的软件)

##物理机

[root@foundation83 Desktop]# iptables -t nat -I POSTROUTING -s 172.25.83.0/24 -j MASQUERADE

##server2

[root@server2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

ONBOOT=yes

BOOTPROTO=static

IPADDR=172.25.83.2

PREFIX=24

GATEWAY=172.25.83.83 #设置网关地址

DNS1=114.114.114.114 #设置DNS域名解析

[root@server2 ~]# ping www.baidu.com #测试网络是否ok

PING www.a.shifen.com (220.181.112.244) 56(84) bytes of data.

64 bytes from 220.181.112.244 (220.181.112.244): icmp_seq=1 ttl=50 time=23.0 ms

64 bytes from 220.181.112.244 (220.181.112.244): icmp_seq=2 ttl=50 time=23.7 ms

64 bytes from 220.181.112.244 (220.181.112.244): icmp_seq=3 ttl=50 time=35.0 ms

^C

--- www.a.shifen.com ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2001ms

rtt min/avg/max/mdev = 23.070/27.307/35.090/5.513 ms

一、实验环境(rhel7.3版本)

1、selinux和firewalld状态为disabled

2、各主机信息如下:

主机

ip

server1(git)

172.25.83.1

server2(git,jdk,jenkins)

172.25.83.2

二、基于Gitlab和Jenkins的自动化部署实例—构建docker镜像,并利用构建的镜像运行容器

1、在server2端:进入jenkins界面:在jenkins上创建一个新的自由风格的项目(项目的名字随意给,我这里给的名字是docker)

c8976578e2e5f86d350031ddd7e60426.png

点击“新建任务”

003b699c80dc1ebf49a01cf401d9e761.png

配置界面如下图:(1)在任务名称这栏中填入“docker”;(2)选择“构建一个自有风格的软件项目”

63b7df326cede1287b6a67e535bf5918.png

点击确定

27bfc01949eb2fd19f631745329074b6.png

就这样,一个自由风格的项目(docker)就创建好了。

“点击”最上面一行的“Jenkins”,回到主界面

2、在jenkins下载有关docker的插件(Docker,CloudBees  Docker  Build and  Publish)

7528d35bf16a14271801c215c869120b.png

系统管理—>管理插件—>可选插件

838a0c1ef308b14aa0ddc4c56b148c03.png

可以在过滤选择框内搜索docker,在搜索结果中选择“Docker”,和“CloudBees  Docker  Build and  Publish”

6b7ccfa9d6fde7547e8a17883c4e8a25.png

1de2d01902e5e449e56c6ee972b0274e.png

点击“直接安装”,安装选中的这两个插件

ccf583cd30c9a6577066c396b896eb84.png

下面的图片是插件安装成功之后的界面图

8934295e07c08f25dd392e96c6443d1e.png

3、在server2端:安装docker的相关软件,启动docker服务,导入registry和nginx镜像,并利用registry镜像建立一个本地仓库服务。

7b3535f1acec98b3e6a2814ef13d11a4.png

9d3864b234707c34cd3aac0c94af4d4e.png

[root@foundation83 docker]# yum install * -y

[root@server2 docker]# systemctl start docker

[root@server2 ~]# ls

docker nginx.tar registry.tar

[root@server2 ~]# docker load -i nginx.tar

[root@server2 ~]# docker load -i registry.tar

[root@server2 ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

nginx latest e548f1a579cf 13 months ago 109MB

registry 2.3.1 83139345d017 3 years ago 166MB

[root@server2 ~]# mkdir /opt/registry

[root@server2 ~]# docker run -d --name registry -p 5000:5000 -v /opt/registry/:/var/lib/registry registry:2.3.1

[root@server2 ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

010759261e68 registry:2.3.1 "/bin/registry /etc/…" 4 seconds ago Up 3 seconds 0.0.0.0:5000->5000/tcp registry

[root@server2 ~]# netstat -antulpe | grep 5000

tcp6 0 0 :::5000 :::* LISTEN 0 31191 2596/docker-proxy

4、修改上篇博文配置好的hello项目中的配置(因为下面配置的docker项目是在hello项目构建好的基础上才触发的)

<1>配置“源码管理“——上上篇博文已经做过&#xff0c;不用进行修改

<2>配置构建触发器——上篇博文已经做过&#xff0c;不用进行修改

<3>配置“构建”

[root&#64;server2 ~]# ll -d /var/run/docker.sock

srw-rw---- 1 root docker 0 Apr 15 11:37 /var/run/docker.sock

[root&#64;server2 ~]# chmod 777 /var/run/docker.sock #修改docker启动时对应的套接字文件(docker.socket)的权限,使得其对jenkins用户有读写的权限

fd4424b933cf04900911fa52841f7556.png

添加“增加构建步骤”中的“Docker  Build  and  Publish”

2ec592524e25a038fcdc8840a8730ca8.png

删除之前添加的“执行shell脚本”的构建步骤

a035ceae8b27cb3d9694afe2999e3ad1.png

在该构建步骤中&#xff0c;写入如下的内容

2382cebff94d2be039d3080bc405aef9.png

点击“高级”&#xff0c;并在其中进行配置&#xff0c;配置图如下&#xff1a;

9f1b367f62fdde69d1d358b490426330.png

点击“保存”

4856b0a7781f86498f03eed8e18c1290.png

就这样想要的hello项目就配置好了。

5、在创建好的docker项目中进行设定&#xff0c;使得该项目能够自动推送docker镜像

<1>配置“源码管理“&#xff1a;其配置图如下&#xff1a;

91f297f7f6763917bb4647848c4a24c3.png

<2>配置“构建触发器“&#xff1a;其配置图如下&#xff1a;

39807c27425ce49aa30bb5b073e4d95c.png

<3>配置“构建“

[root&#64;server2 ~]# vim /etc/sudoers #编辑/etc/sudoer文件,赋予jenkins用户全部的权限。并输入":wq!"强制保存退出

91 root ALL&#61;(ALL) ALL

92 jenkins ALL&#61;(ALL) NOPASSWD: ALL #新添加的内荣

0fa69c787b5815d634f26387362e99c8.png

在“构建“中的“增加构建步骤”的下拉菜单中选择“执行shell”

edf956bce4e1629e932806b57f276ab2.png

在命令这栏写入想要执行的shell命令

2c7697db3af60487ea517db865fa4fb5.png

点击“保存”

2604594bff94848b6ae32a3a85ecf822.png

就这样想要的docker项目就配置好了。

6、在server2端编写Dockerfile&#xff0c;进行测试&#xff0c;以保证Dockerfile的编写是正确的。

[root&#64;server2 ~]# mkdir test

[root&#64;server2 ~]# cd test/

[root&#64;server2 test]# vim Dockerfile

FROM nginx

COPY index.html /usr/share/nginx/html

[root&#64;server2 test]# vim index.html

xin

[root&#64;server2 test]# docker build -t nginx:v1 .

[root&#64;server2 test]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

nginx v1 5c0bec80cba3 10 seconds ago 109MB

nginx latest e548f1a579cf 13 months ago 109MB

registry 2.3.1 83139345d017 3 years ago 166MB

[root&#64;server2 test]# docker run -d --name vm1 -p 80:80 nginx:v1

[root&#64;server2 test]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

c37471f8bbb6 nginx:v1 "nginx -g &#39;daemon of…" 8 seconds ago Up 7 seconds 0.0.0.0:80->80/tcp vm1

010759261e68 registry:2.3.1 "/bin/registry /etc/…" 3 hours ago Up 3 hours 0.0.0.0:5000->5000/tcp registry

[root&#64;server2 test]# curl localhost

xin

[root&#64;server2 test]# docker rm -f vm1

[root&#64;server2 test]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

010759261e68 registry:2.3.1 "/bin/registry /etc/…" 3 hours ago Up 3 hours 0.0.0.0:5000->5000/tcp registry

7、将server2端编写的Dockerfile文件以及所需要的index.html(覆盖server1之前推送的index.html文件)发送到server1端的Gitlab对应的目录(test目录)下。

[root&#64;server2 test]# ls

Dockerfile index.html

[root&#64;server2 test]# scp * server1:/root/test

root&#64;server1&#39;s password:

Dockerfile 100% 49 0.1KB/s 00:00

index.html 100% 4 0.0KB/s 00:00

[root&#64;server1 test]# pwd

/root/test

[root&#64;server1 test]# ls

Dockerfile file1 file2 index.html README.md

[root&#64;server1 test]# cat index.html

xin

8、在server1端&#xff1a;向Gitlab远程仓库推送Dockerfile文件和index.html文件

[root&#64;server1 test]# git add Dockerfile

[root&#64;server1 test]# git commit -m "add Dockerfile"

[root&#64;server1 test]# git add index.html

[root&#64;server1 test]# git commit -m "add index.html"

[root&#64;server1 test]# git push -u origin master

a5579c0dc1fb5ff494ef9fb37fd2b5d9.png

9、测试&#xff1a;

<1>测试一&#xff1a;

点击“返回面板”&#xff0c;查看可以hello工程和docker是否已经配置好。s下面的球显示蓝色的&#xff0c;即表示构建成功

e7a9275966934d4fe455dc6476bbfafd.png

<2>测试二&#xff1a;

点击“hello”&#xff0c;进入hello工程的构建历史的主界面&#xff0c;点击“#5“左边”蓝色的球“&#xff0c;查看控制台输出&#xff0c;如果有输出&#xff0c;则表示hello工程已经配置好

45bfbbf6c316914d68cfa47757edbbe4.png

7be581a2ca4371bc12d382137a8acaf1.png

点击“返回面板”——>“docker”&#xff0c;进入docker工程的构建历史的主界面&#xff0c;查看控制台输出&#xff0c;如果有输出&#xff0c;则表示可以docker工程已经配置好

184c4864a95d99f4667e613f36e144ad.png

283540d00d364839e8f43f76085cde40.png

<3>测试三&#xff1a;

进入Jenkins的工作目录&#xff0c;查看是否有Gitlab上test项目中的内容&#xff0c;如果有&#xff0c;则表示hello工程和docker工程已经配置好

[root&#64;server2 hello]# pwd

/var/lib/jenkins/workspace/hello

[root&#64;server2 hello]# ll

total 20

-rw-r--r-- 1 jenkins jenkins 49 Apr 15 17:07 Dockerfile

-rw-r--r-- 1 jenkins jenkins 8 Apr 15 17:00 file1

-rw-r--r-- 1 jenkins jenkins 3 Apr 15 17:03 file2

-rw-r--r-- 1 jenkins jenkins 4 Apr 15 16:57 index.html

-rw-r--r-- 1 jenkins jenkins 8 Apr 15 16:57 README.md

<4>测试四&#xff1a;

在server2端查看对应的tag为5的镜像是否构建成功&#xff0c;查看webserver容器是否在运行&#xff0c;并访问webserver容器。如果镜像构建成功&#xff0c;容器在运行并且访问成功&#xff0c;则表示hello工程和docker工程已经配置好

[root&#64;server2 ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

localhost:5000/nginx 5 94cbfc629e0a 8 minutes ago 109MB

localhost:5000/nginx latest 94cbfc629e0a 8 minutes ago 109MB

nginx latest 344960c969db 26 minutes ago 109MB

nginx v1 5c0bec80cba3 3 hours ago 109MB

nginx bb776ce48575 4 days ago 109MB

registry 2.3.1 83139345d017 3 years ago 166MB

[root&#64;server2 ~]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

75fb8c1692c8 localhost:5000/nginx "nginx -g &#39;daemon of…" 8 minutes ago Up 8 minutes 80/tcp webserver

010759261e68 registry:2.3.1 "/bin/registry /etc/…" 6 hours ago Up 6 hours 0.0.0.0:5000->5000/tcp registry

[root&#64;server2 ~]# docker inspect webserver | grep IPAddress

"SecondaryIPAddresses": null,

"IPAddress": "172.17.0.3",

"IPAddress": "172.17.0.3",

[root&#64;server2 ~]# curl 172.17.0.3

xin

值的注意的是&#xff1a;

1、因为在构建hello工程时&#xff0c;选中了“Skip  Push”&#xff0c;即相当于没有将构建好的镜像上传到registry私有仓库中&#xff0c;所以/opt/registry目录中应该是没有内容的。

[root&#64;server2 ~]# ls /opt/registry/

[root&#64;server2 ~]#

2、我们会发现一个问题&#xff1a;如果修改了index.html文件的内容&#xff0c;重新推送到Gitlab&#xff0c;那么就会触发hello工程(构建docker镜像)&#xff0c;hello工程构建成功之后&#xff0c;就会触发docker工程&#xff0c;而docker工程主要的作用就是利用新构建的镜像运行容器webserver。那如果webserver容器已经在运行&#xff0c;那么在构建docker工程时&#xff0c;就会报错&#xff0c;这该如何解决呢&#xff1f;请看我的下篇博文。



推荐阅读
  • Linux入门教程第七课:基础命令与操作详解
    在本课程中,我们将深入探讨 Linux 系统中的基础命令与操作,重点讲解网络配置的相关知识。首先,我们会介绍 IP 地址的概念及其在网络协议中的作用,特别是 IPv4(Internet Protocol Version 4)的具体应用和配置方法。通过实际操作和示例,帮助初学者更好地理解和掌握这些基本技能。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 七款高效编辑器与笔记工具推荐:KindEditor自动换行功能解析
    本文推荐了七款高效的编辑器与笔记工具,并详细解析了KindEditor的自动换行功能。其中,轻笔记QingBiJi是一款完全免费的记事本软件,用户可以通过其简洁的界面和强大的功能轻松记录和管理日常事务。此外,该软件还支持多平台同步,确保用户在不同设备间无缝切换。 ... [详细]
  • Docker入门指南:初探容器化技术
    Docker入门指南:初探容器化技术摘要:Docker 是一个使用 Go 语言开发的开源容器平台,旨在实现应用程序的构建、分发和运行的标准化。通过将应用及其依赖打包成轻量级的容器,Docker 能够确保应用在任何环境中都能一致地运行,从而提高开发和部署的效率。本文将详细介绍 Docker 的基本概念、核心功能以及如何快速上手使用这一强大的容器化工具。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • 虚拟机网络设置与数据库远程连接优化指南
    本文针对个人计算机上虚拟机网络配置与数据库远程连接的问题,提供了一套详细的优化指南。在探讨远程数据库访问前,需确保网络配置正确,特别是桥接模式的设置。通过合理的网络配置,可以有效解决因虚拟机或网络问题导致的连接失败,提升远程访问的稳定性和效率。 ... [详细]
  • 解读中台架构:微服务与分布式技术的区别及应用
    中心化与去中心化是长期讨论的话题。中心化架构的优势在于部署和维护相对简单,尤其在服务负载较为稳定的情况下,能够提供高效稳定的性能。然而,随着业务规模的扩大和技术需求的多样化,中心化架构的局限性逐渐显现,如扩展性和故障恢复能力较差。相比之下,微服务和分布式技术通过解耦系统组件,提高了系统的灵活性和可扩展性,更适合处理复杂多变的业务场景。本文将深入探讨中台架构中微服务与分布式技术的区别及其应用场景,帮助读者更好地理解和选择适合自身业务的技术方案。 ... [详细]
  • 基于域名、端口和IP的虚拟主机构建方案
    本文探讨了在单台物理服务器上构建多个Web站点的虚拟主机方案,详细介绍了三种主要的虚拟主机类型:基于域名、基于IP地址和基于端口的虚拟主机。每种类型的实现方式及其优缺点均进行了深入分析,为实际应用提供了全面的技术指导。 ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • 大家好,全新的技术专栏《从零开始掌握容器云网络实战》正式上线。该专栏将系统地介绍容器云网络的基础知识、核心技术和实际应用案例,帮助读者全面理解和掌握容器云网络的关键技术与实践方法。 ... [详细]
  • 技术日志:Ansible的安装及模块管理详解 ... [详细]
author-avatar
手机用户2502855257
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有