通过Jenkins + Docker实现antdPro自动化推送私服、自动容器化部署功能
Docker与Docker私服
1. 安装docker
https://docs.docker.com/install/
2. 配置docker镜像加速
https://www.daocloud.io/mirror
3. 安装启动docker私服
https://docs.docker.com/registry/deploying/
# 启动docker私服
docker run -d -p 5000:5000 --restart=always --name registry registry:2
4. docker配置私服地址,并且加入http访问私服名单
# 方案1
vim /etc/docker/daemon.json
# 添加配置`"insecure-registries":["172.18.123.72:5000"],`到json对象中
systemctl reload-daemon
systemctl restart docker
# 方案2
# 修改docker启动命令,注入配置参数
vim /usr/lib/systemd/system/docker.service
# ExecStart=/usr/bin/dockerd后添加配置:” --insecure-registry 172.16.48.129:5000“
systemctl reload-daemon
systemctl restart docker
5. docker施一公ubuntu镜像验证私服功能
拉取镜像发送到私服,使用ubuntu:16.04镜像,并且重新打tagmy-ubuntu, 然后推送到私人仓库. 最后镜像
ubuntu:16.04和my-ubuntu镜像从本地删除my-ubuntu镜像从私服中拉取。
$ docker pull ubuntu:16.04
$ docker tag ubuntu:16.04 localhost:5000/my-ubuntu
$ docker push localhost:5000/my-ubuntu
$ docker image remove ubuntu:16.04
$ docker image remove localhost:5000/my-ubuntu
$ docker pull localhost:5000/my-ubuntu
6. docker私服api操作参考文档
https://docs.docker.com/registry/spec/api/#detail
配置自动化集成环境
1. 安装jenkins
# 先安装java环境:参考百度
# 获取官方jar包
wget http://ftp-nyc.osuosl.org/pub/jenkins/war-stable/2.164.2/jenkins.war
# 使用命令行直接启动,配置文件生成在home目录中的.jenkins目录中
java -jar jenkins.war --httpPort=8080 &
# 日志中含有启动验证秘钥,或者在文件中
cat /var/jenkins_home/secrets/initialAdminPassword
# 默认配置安装,设定管理员账号,进入jenkins
2. fork antd-design-pro项目到自己的github仓库
git clone https://github.com/fly-piglet/ant-design-pro.git
3. 添加编译脚本
docker-publish.sh记得赋予可执行权限
# 设定私服地址
registryhosts="localhost:5000"
# 设定项目名称
imageName="project"
# 设定容器启动名称
containerName="project"
# 设定tag,默认使用latest、实际按照生产版本进行使用
tag="latest"
# 拼接镜像的名字
allImageNmae="${registryhosts}/${imageName}:${tag}"
echo "1. 安装依赖 + 编译项目"
npm install && npm run build
echo "2. 编译镜像 + 标签镜像"
docker build -f Dockerfile.hub -t ${allImageNmae} ./
echo "3. 推送镜像"
docker push ${allImageNmae}
4. 添加启动脚本
docker-start.sh启动镜像脚本,可以在部署目标机器执行
# 设定私服地址
registryhosts="localhost:5000"
# 设定项目名称
imageName="project"
# 设定容器启动名称
containerName="project"
# 设定tag,默认使用latest、实际按照生产版本进行使用
tag="latest"
# 拼接镜像的名字
allImageNmae="${registryhosts}/${imageName}:${tag}"
# 启动的端口地址
port="8060"
echo "1. 停止容器 + 删除容器 + 删除镜像"
docker stop ${containerName} && docker rm ${containerName} && docker rmi ${allImageNmae}
echo "2. 拉取镜像"
docker pull ${allImageNmae}
echo "3. 启动镜像"
docker run -d -p ${port}:80 --name=${containerName} --restart=always ${allImageNmae}
echo "4. 部署完毕: http://localhost:${port}/"
最佳实践
Ci流程:通过git的webhook + jenkins自动化编译 + 自动化ssh远端机器 + 自动化部署。
环境区分:默认的配置文件为开发环境的配置,生产环境通过-v外挂配置文件实现环境切换
使用配置文件进行区分,方便保证镜像经过开发环境的测试,只是配置不同,保证一致性。
版本区分:tag:无或者默认为latest,需要管理版本按照1.0.0的顺序递增修改版本号即可
前端docker镜像,暂时没哟版本管理的需求,使用最新版,需要则启用。
后续优化
使用Jenkinsfile以及管道的形式配置,内置docker容器进行打包编译
引入docker-compose.yml配置环境启动,通过配置文件进行环境配置
npm中引入命令体系,直接进行打包和发布
后端引入docker部署
- 配置中心:默认一套jar包配置实现一个项目不同环境固定部署,基于这个条件在通过-e、或者-v修改配置文件实现配置修改,项目暂时不引入配置中心
- 日志中心:引入elk服务,后续入口集成redis或者kafka进行缓存
- 工程化流程:
- 使用maven插件进行镜像的打包和推送,通过命令进行服务的启动
- 优化内部jar包名称,在dockerfile进行处理的时候,统一化外部端口映射,保证启动脚本的统一抽象。
遇到的问题
- jenkins使用docker部署的使用,出现既需要node环境,
通过Jenkins + Docker实现antdPro自动化推送私服、自动容器化部署功能的更多相关文章
- 1. 容器化部署一套云服务 第一讲 Jenkins(Docker + Jenkins + Yii2 + 云服务器))
容器化部署一套云服务系列 1. 容器化部署一套云服务之Jenkins 一.购买服务器 服务器
- Azure Devops实践(5)- 构建springboot项目打包docker镜像及容器化部署
使用Azure Devops构建java springboot项目,创建镜像并容器化部署 1.创建一个springboot项目,我用现有的项目 目录结构如下,使用provider项目 在根目录下添加D ...
- spring boot本地开发与docker容器化部署的差异
spring boot本地开发与docker容器化部署的差异: 1. 文件路径及文件名区别大小写: 本地开发环境为windows操作系统,是忽略大小写的,但容器中区分大小写 2. docker中的容器 ...
- Gogs的Docker容器化部署流程遇到的问题
Gogs的Docker容器化部署流程遇到的问题 最近在学习CI/CD的一些方案,个人比较青睐容器化轻量级.CI方面一开始是想使用gitlab的,但是发现我自己买的服务器配置太低,内存根本不够(大写 ...
- 使用Gitlab的CI/CD功能自动化推送docker镜像到Nexus仓库出现的问题
在服务器中可以直接使用命令行登录,推送docker镜像等 但是在使用Gitlab的CI/CD功能中,gitlab-ci.yml文件执行过程中出现如下错误: 原因分析: 服务器上之前使用命令行登陆过Ne ...
- 通过容器提交镜像(docker commit)以及推送镜像(docker push)笔记
在本地创建一个容器后,可以依据这个容器创建本地镜像,并可把这个镜像推送到Docker hub中,以便在网络上下载使用. 查看镜像 [root@docker-test1 ~]# docker image ...
- node项目自动化部署--基于Jenkins,Docker,Github(3)自动化部署
GitHub仓库 由于现在的代码基本上都是多人合作开发,所以肯定会用到像 git 这样的版本控制工具 所以这里使用 GitHub 来做一个演示 首先我们需要在github上新建一个仓库 点击New来新 ...
- 转:IOS的推送。是一个强大的功能
IOS下我们很多人天天开着 邮件推送 微信推送 QQ推送 微博推送 新浪微博推送,安卓敢吗? 五个后台进程消耗电.流量谁敢这么做?现在安卓也出了推送,但绝对是伪推送.实际是挂了个进程,关掉了就收不到. ...
- Asp.Net Core 使用Docker进行容器化部署(一)
前几篇文章介绍了Liunx下的环境搭建,今天来分享一下.Net Core在Liunx上的部署. 我采用的方案是使用Dokcer作为运行虚拟机,Nginx作为Http服务器来进行反向代理,你可以理解为D ...
随机推荐
- 7.20 python线程3
2018-7-20 18:46:49 去俺弟家玩去 后天回来 1.复习 # !/usr/bin/env python # !--*--coding:utf-8 --*-- # !@Time :2018 ...
- Mysql----索引原理与慢查询优化
一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...
- 解决VMware安装ubuntu16.04后无法全屏的问题
参考教程:http://www.jb51.net/os/Ubuntu/356462.html 双系统经常崩,故在windows10下装了个ubuntu的虚拟机,安装完成后无法全屏,进入系统设置调试显示 ...
- R数据可视化手册学习简单的绘制常见的图形
1.绘制散点图 # 使用ggplot2 library(ggplot2) ggplot(data = mtcars, aes(x = wt, y = mpg)) + geom_point() 2.绘制 ...
- C++基础知识之动态库静态库
一. 静态库与动态库 库(library),一般是一种可执行的二进制格式,被操作系统载入内存执行. 我们通常把一些公用函数制作成函数库,供其它程序使用.函数库分为静态库和动态库 静态库和动态库区别: ...
- SHU 414 - 字符串进制转换
题目链接:http://acmoj.shu.edu.cn/problem/414/ 很咸鱼的网上拉了个进制转换模板过来,因为数组开的太小一直WA,后来一气之下MAXN开到1e5,真是蓝瘦…… 后来实在 ...
- iOS常用基础框架
一,简述 1.1,IOS操作系统的层次架构 iOS为应用程序开发提供了许多可使用的框架,并构成IOS操作系统的层次架构,分为四层,从上到下依次为:Cocoa Touch Layer( ...
- WIN7怎么把暴风影视库去除?
最近在win7 64位系统上安装新版暴风,打开我的电脑里面多了个暴风影视库图标,点击右键也没有删除 每次一打开“计算机”看见这个很碍眼.怎么把它关闭呢? 方法如下: 打开注册表,删除此项 HKEY_C ...
- Ucenter社区服务搭建
1.搭建lamp环境yum –y install httpd php php-mysql mysql mysql-server 2启动服务 3.设置服务开机自动启动 4.上传UCEN ...
- Redis经验谈(转)
原文:http://www.programmer.com.cn/14577/ 新浪作为全世界最大的Redis用户,在开发和运维方面有非常多的经验.本文作者来自新浪,希望能为业界提供一些亲身经历,让大家 ...
- 1. 容器化部署一套云服务 第一讲 Jenkins(Docker + Jenkins + Yii2 + 云服务器))