公司书架上有本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 自动化部署的更多相关文章

  1. springboot docker jenkins 自动化部署并上传镜像

    springboot + docker + jenkins自动化部署项目,jenkins.mysql.redis都是docker运行的,并且没有使用虚拟机,就在阿里云服务器(centos7)运行 1. ...

  2. 从零搭建docker+jenkins 自动化部署环境

    从零搭建docker+jenkins+node.js自动化部署环境 本次案例基于CentOS 7系统 适合有一定docker使用经验的人阅读 适合有一定linux命令使用经验的人阅读 1.docker ...

  3. Git + Docker + Jenkins自动化部署web到Linux(Centos)

    1.把代码托管到Github上 2.安装Docker 3.安装Jenkins 4.在项目中编写Dockerfile.publish.sh (1)Dockerfile内容 # 基于dotnet基础环境构 ...

  4. 基于Jenkins,docker实现自动化部署(持续交互)

      前言 随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致.基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化.因此 ...

  5. 基于Jenkins,docker实现自动化部署(持续交互)【转】

      前言 随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致.基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化.因此 ...

  6. AspNetCore容器化(Docker)部署(四) —— Jenkins自动化部署

    一.前言 (Jenkins.Docker.Git/Svn组建一套简单的自动化发布流程) 文章中用到的相关服务器角色 角色 环境 功能 开发机 Win10.Docker(Linux OS) 编码.调试 ...

  7. docker安装jenkins自动化部署

    Docker之Jenkins自动化部署 1.拉取jenkins镜像images(类比:java中的类) docker pull jenkinsci/jenkins:lts 或 docker pull ...

  8. Docker 之 Jenkins自动化部署

    Docker 之 Jenkins自动化部署 Jenkins部署 jenkis 绑定gitlab shell脚本自动化构建Docker镜像 提升maven构建速度 jenkins 无法通过shell脚本 ...

  9. Jenkins+Docker+Git 自动化部署

    Jenkins+Docker+Git 自动化部署图文教程 https://blog.csdn.net/qq_38252039/article/details/89791247 前言: 通过几天的学习和 ...

随机推荐

  1. Ubuntu18.04 修改IP地址、查看网关、防火墙

    1. Ubuntu18.04 修改IP地址 修改 sudo vim /etc/netplan/50-cloud-init.yaml文件 # This file is generated from in ...

  2. HDU5583 Kingdom of Black and White

    Kingdom of Black and White Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Ja ...

  3. 对于MD5加密处理方式

    来源:http://blog.51cto.com/xqtesting/1924977 但有时候我们请求的参数可能需要加密,比如登录接口中的密码可能需要经过md5加密这时候怎么处理呢? 这种方法比较简单 ...

  4. 2017年2月27日Unicorn, US (148) and China (69), followed by the U.K. (10), India (9), Israel (5) and Germany (5).

    Revisiting The Unicorn Club Get to know the newest crowd of billion dollar startups In 2013, when Ai ...

  5. 学习笔记(1)---matlab中常见函数解析

    一.fscanf函数 matlab中函数fscanf在文件读取方面的实例如下: 从文件中有格式地读数据 fscanf 语法1:[a,count]=fscanf(fid,format,size) 根据指 ...

  6. Springboot项目下mybatis报错:Invalid bound statement (not found)

    mybatis报错:Invalid bound statement (not found)的原因很多,但是正如报错提示一样,找不到xml中的sql语句,报错的情况分为三种: 第一种:语法错误 Java ...

  7. 2018-3-4-dotnet-设计规范-·-结构体定义

    title author date CreateTime categories dotnet 设计规范 · 结构体定义 lindexi 2018-03-04 17:48:44 +0800 2018-2 ...

  8. VisualTreeHelper使用——使用BFS实现高效率的视觉对象搜索

    BFS,即广度优先搜索,是一种典型的图论算法.BFS算法与DFS(深度优先搜索)算法相对应,都是寻找图论中寻路的常用算法,两者的实现各有优点. 其中DFS算法常用递归实现,也就是常见的一条路找到黑再找 ...

  9. 海胜专访--MaxCompute 与大数据查询引擎的技术和故事

    摘要:在2019大数据技术公开课第一季<技术人生专访>中,阿里巴巴云计算平台高级技术专家苑海胜为大家分享了<MaxCompute 与大数据查询引擎的技术和故事>,主要介绍了Ma ...

  10. 技巧专题3(cdq分治、整体二分等)

    cdq分治与整体二分 cdq来源于2008年国家集训队作业陈丹琦(雅礼巨佬),用一个log的代价完成从静态到动态(很多时候是减少时间那一维的). 对于一个时间段[L, R],我们取mid = (L + ...