公司书架上有本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. Docker Mysql部署

    1.下载tomcat镜像 docker pull mysql 2.启动容器 docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD ...

  2. SpringBooot-基础<2>-POM.xml配置

    SpringBooot-基础<2>-POM.xml配置 项目创建完成后,需要配置pom.xml文件. pom.xml里面的配置,按需进行添加,这里提供一份参考,后面做笔记会都用到. < ...

  3. Lab2 新增的细节

    entry.S 新增加了这个入口函数 bootloader 加载完成后 将执行 kern_entry 而非lab1 中的kern_init defs.h 使用了 ({})宏定义的方式,并且执行了一行定 ...

  4. UE4物理模块(三)---碰撞查询(上)

    在前一文中介绍了如何在UE4中创建简单碰撞或者直接使用其mesh表示的复杂碰撞: Jerry:UE4物理模块(二)---建立物体碰撞​zhuanlan.zhihu.com 那么在拿到碰撞之后,就可以进 ...

  5. FZU 1576【计算几何/费马点】

    Oaiei居住在A城市,并且是这个城市建设的总设计师.最近有个问题一直困恼着他.A城市里有三个大型工厂,每个大型工厂每天都需要消耗大量的石油,现在城市里要建设一个石油中转站,从石油中转站到三个大型工厂 ...

  6. 记CRenderTarget:DrawText()绘制中文乱码的BUG及解决办法

    原文:记CRenderTarget:DrawText()绘制中文乱码的BUG及解决办法 转载请注明出处:http://www.cnblogs.com/Ray1024 一.问题描述 在MFC中使用Dir ...

  7. 深入浅出Javascript闭包

    一.引子 闭包(closure)是 Javascript 语言的一个难点,面试时常被问及,也是它的特色,很多高级应用都要依靠闭包实现.本文尽可能用简单易懂的话,讲清楚闭包的概念.形成条件及其常见的面试 ...

  8. JavaScript--放大镜

    上例图: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF- ...

  9. (转)jQuery中append(),prepend()与after(),before()的区别

    在jQuery中,添加元素有append(),prepend和 after(),before()两种共四个. 根据字面意思我们可以看出他们分别是追加,添加和之前,之后,意思相近.同时他们又都有添加元素 ...

  10. Spring_自动组件扫描和 基于注解配置bean

    自动组件扫描 启用Spring组件扫描功能. 使用@Component注释来表示这是类是一个自动扫描组件.  package com.tanlei.dao; import org.springfram ...