docker + jenkins 自动化部署
公司书架上有本docker的书籍,正好最近事不多就写个demo来玩一玩。
DevOps未死,ContainerOps已到
- ContainerOps VS DevOps
避免了复杂的环境,应用之间的相互影响
撸前准备 docker
引入一些概念
- 镜像只读的一个应用 (类似 node_modules 下面的包)
- 容器可读写的镜像
开撸
检验docker是否安装成功
docker --version
如果成功会有相应的版本号显示
然后就可以去下载自己想下载的镜像了docker registry(镜像仓库) 类似 npm 仓库
可以通过
docker search
来搜索镜像是否存在。接下来就是拉去镜像,默认的话docker 都会拉最新的镜像包,如果要拉取特定的版本在后面在,下载Jenkins。
docker pull jenkins/jenkins:lts
!切记,直接docker pull jenkins 会拉去 jenkins:latest 版本是2.60.3,这个版本兼容问题贼大。有兴趣的同学可以去试一试。
下完的镜像都在docker image 下面,通过 命令 docker images 或者 docker image ls 可以查看安装过的镜像。每个镜像可以看作一个个独立的盒子,也可以看成单独的app可以独自运行。
如何运行一个image?
docker container 是docker的 image运行的容器。通过命令
docker run (image name)常用一般
docker container run -d -p port:port --name=name -v mount:mount imageName
docker run -d -p 8000:8080 --name=jenkins -v ~/jenkins_node/:/var/jenkins_home jenkins/jenkins:lts
- -d 后台运行
- -p 运行端口修改
- --name 重命名
- -v 挂在地址
(详细用法)
查看,启动,删除一个容器
docker container ls -a || docker ps
docker container stop (container id )
docker container start (container id )
docker container rm (container id )
docker image rm (image id )
查看日志
docker logs (container id )
进入容器终端
docker exec -it (container id ) /bin/bash
参数/bin/bash 表示启动一个bash交互终端。
参数-t让Docker分配一个伪终端并绑定在容器的标准输入上,-i让容器的标准输入保持打开。
构建自己的镜像
dockerfile
- FROM指定基础镜像,必须为第一个命令
- MAINTAINER指定镜像的作者信息
- RUN构建镜像时执行的命令
- ADD将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
- COPY功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
- CMD构建容器后调用,也就是在容器启动时才进行调用。
- EXPOSE指定于外界交互的端口
- VOLUME用于指定持久化目录
- WORKDIR工作目录,类似于cd命令
docker build -t tagname .
读取当前目录下面的dockerfile文件,并运行命令。
Jenkins 部分
- 插件安装的时候萌新就选推荐的插件安装就行。
- 初始化密码如果不是挂在本地,需要执行docker exec -it (container id) /bin/bash 去里面找默认密码
jenkin 这个按着提示的来就行,没啥特别大的难度,如果插件安装失败的 系统配置-> 插件管理 继续安装,和选择自己想要的插件来安装。(基本的node 和 git 一般都要装)
番外篇 pm2
node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,上手容易。
安装及使用
npm install pm2 -g
pm2 start app.js (可选参数)
- --watch:监听应用目录的变化,一旦发生变化,自动重启。如果要精确监听、不见听的目录,最好通过配置文件。
- -i --instances:启用多少个实例,可用于负载均衡。如果-i 0或者-i max,则根据当前机器核数确定实例数目
- --ignore-watch:排除监听的目录/文件,可以是特定的文件名,也可以是正则。比如--ignore-watch="test node_modules "some scripts""
- -n --name:应用的名称。查看应用信息的时候可以用到。
- -o --output <path>:标准输出日志文件的路径。
- -e --error <path>:错误输出日志文件的路径。
- --interpreter <interpreter>:the interpreter pm2 should use for executing app (bash, python...)。比如你用的coffee script来编写应用。
docker + jenkins 自动化部署的更多相关文章
- springboot docker jenkins 自动化部署并上传镜像
springboot + docker + jenkins自动化部署项目,jenkins.mysql.redis都是docker运行的,并且没有使用虚拟机,就在阿里云服务器(centos7)运行 1. ...
- 从零搭建docker+jenkins 自动化部署环境
从零搭建docker+jenkins+node.js自动化部署环境 本次案例基于CentOS 7系统 适合有一定docker使用经验的人阅读 适合有一定linux命令使用经验的人阅读 1.docker ...
- Git + Docker + Jenkins自动化部署web到Linux(Centos)
1.把代码托管到Github上 2.安装Docker 3.安装Jenkins 4.在项目中编写Dockerfile.publish.sh (1)Dockerfile内容 # 基于dotnet基础环境构 ...
- 基于Jenkins,docker实现自动化部署(持续交互)
前言 随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致.基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化.因此 ...
- 基于Jenkins,docker实现自动化部署(持续交互)【转】
前言 随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致.基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化.因此 ...
- AspNetCore容器化(Docker)部署(四) —— Jenkins自动化部署
一.前言 (Jenkins.Docker.Git/Svn组建一套简单的自动化发布流程) 文章中用到的相关服务器角色 角色 环境 功能 开发机 Win10.Docker(Linux OS) 编码.调试 ...
- docker安装jenkins自动化部署
Docker之Jenkins自动化部署 1.拉取jenkins镜像images(类比:java中的类) docker pull jenkinsci/jenkins:lts 或 docker pull ...
- Docker 之 Jenkins自动化部署
Docker 之 Jenkins自动化部署 Jenkins部署 jenkis 绑定gitlab shell脚本自动化构建Docker镜像 提升maven构建速度 jenkins 无法通过shell脚本 ...
- Jenkins+Docker+Git 自动化部署
Jenkins+Docker+Git 自动化部署图文教程 https://blog.csdn.net/qq_38252039/article/details/89791247 前言: 通过几天的学习和 ...
随机推荐
- 类的加载classload和类对象的生成
在Java中最重要的可以说就是类的加载了.不论我们编写的功能多么复杂,或是多么简单,永远逃离不开的,就是将这个类从class文件加载到JVM中来. 类的加载过程 首先我们要了解一下类的加载过程,包括: ...
- PYTHON网络爬虫与信息提取[信息的组织与提取](单元五)
1 三种信息类型的简介 xml : extensible markup language 与html非常相似 现有html后有xml xml是html发展来的 扩展 通用 json 类型 javas ...
- 【P3056】【USACO12NOV】笨牛Clumsy Cows
P3056 [USACO12NOV]笨牛Clumsy Cows 题目描述 Bessie the cow is trying to type a balanced string of parenthes ...
- 【python之路15】深浅拷贝及函数
一.集合数据类型(set):无序不重复的集合,交集.并集等功能 二.三元运算符 三.深浅拷贝 1)字符串和数字:深浅内存地址都一样 2)其他:浅拷贝:仅复制最外面第一层 深拷贝:除了最内层其他均拷贝 ...
- QT_获取正在运行程序的进程id(判断程序是否正在运行)
bool checkProcessRunning(const QString &processName, QList<quint64> &listProcessId) { ...
- 全球城市群Megalopolis
Megalopolis From Wikipedia, the free encyclopedia (Redirected from Megalopolis (city type)) &quo ...
- LintCode刷题笔记-- Distinct Subsequences
标签:动态规划 题目描述: Given a string S and a string T, count the number of distinct subsequences of T in S. ...
- Java.控制层.响应工具类.
Java.控制层.响应工具类. package cn.com.spdbccc.cds.index.web.base; public class ApiResponse { private int co ...
- C++11中的并发
在 C++98 的时代,C++标准并没有包含多线程的支持,人们只能直接调用操作系统提供的 SDK API 来编写多线程程序,不同的操作系统提供的 SDK API 以及线程控制能力不尽相同.到了 C++ ...
- day4-转自金角大王
Python之路,Day4 本节大纲 迭代器&生成器 装饰器 基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及 ...