jenkins+docker+node+mongo前端视角下的部署流程

#1.准备工作

  • 我不会照搬文档上官方的话术,完全凭自己的理解写,可能不规范,不喜欢请左上角
  • 你的服务器必须装好了docker,怎么装的自行研究
  • 你已经部署好了jenkins并且和github建立了hook链接,怎么的请参考我之前的文章
  • 网上很多文章都写明了什么是dockerdocker api之类的,建议阅读掌握基本概念,但是我觉得他们说的都太表面了,举个栗子:
    1. Dockerfile文件: 这个文件是用来docker build -t (your image name) .,就是用来制作docker镜像的,这是基础,建议放在项目根目录
    2. docker-compose.yml: 是docker官方的docker-compose插件的构建文件,用来生成多个相关联的docker container容器的快捷方式,这里有很大的坑,后续讨论,不用这个也可以,可以用docker run -----的建立方式,一个个的建立容器,同样可以达到效果,并且兼容性(服务器环境或者jenkins环境)更佳,建议放在项目根目录

#2.开整

  • 我们首先采用docker-compose的方式:
  1. 因为项目是个Koa服务,所以你得明白koa是node的一个框架,那么自然你必须得想到项目是基于node的,docker容器可以理解为一个干净的操作系统,那么操作系统你想运行node应用是不是要安装node呢,当然是了,项目根目录建立Dockerfile文件,如下:
#FROM是所有Dockerfile文件的必须,并且开头就要写明,意思是依赖的环境,我们的项目依赖node镜像,所以要写node,10是版本号。
#不用管我好像没有pull node image啊,没关系这里写了,就会自动帮你下载
FROM node:10
# Dockerfile的概念就是 build一个镜像用的 什么依赖都在这里写
# 起注释的作用
LABEL maintainer = "qsm <348867341@qq.com>"
# 创建容器中的工作目录,容器是一个干净的目录什么都没有,你想要放一个项目肯定要创建一些目录
#为了简单,这里创了一个根目录下面的app目录, 每次构建镜像都删除app目录,其实没必要因为你每次构建镜像都是一个感觉的
RUN rm -rf /app
RUN mkdir /app
# 创建工作目录就是容器内部的目录 必须指定
WORKDIR /app

# 安装项目依赖  将当前目录所有文件拷贝到上面创建的容器工作目录 忽略.dockerignore的文件 copy 和 add都会忽略
COPY . /app
# 安装yarn 
#RUN curl -o- -L https://yarnpkg.com/install.sh | bash
#RUN $HOME/.yarn/bin/yarn install
RUN yarn
#RUN npm install
#RUN npm run build
#ENV PORT=4403 NODE_ENV=pro
# 该镜像生产的容器内的端口号,相当于后续docker run -p 8827: 9930的9930
EXPOSE 4403

#容器生成时 执行 yarn run prd启动项目
CMD yarn run prd
  1. node服务的镜像构建文件写好了,下面就是生成容器了,项目根目录新建docker-compose.yml文件,前提是你服务器安装了docker-compose,怎么装的请百度,如下:
#  写死就行  compose的版本 如果你的jenkins 支持docker componse 的话 用这个方法
version: '3.1'
services:
#services的名字 其他services需要关联的时候有用
  database:
#node依赖的mongo镜像,会自动帮你下载
    image: mongo
#容器的名字,建议声明
    container_name: xipasswordmongo
#总是重启
    restart: always
    # 映射到宿主机的端口,宿主27018,容器内27017(自己根据需要赋值)
    ports:
      - 27018:27017
#映射到宿主机的mongo目录,当你需要在宿主机也需要相应文件的时候,比如志,
#你总不能每次都进容器看吧,这样挂载到宿主机,会方便一些
#右边的/data/db是Mongo镜像默认生成的工作目录,你自定义的是:左边的
    volumes:
      - /usr/local/mongo:/data/db
#创建一个容器内的网络桥接,可以很方便的容器互联,比如node链接mongo,不需要写公网Ip了
#可以直接写mongods://(your container name):(容器内端口号)
   networks:
      - webapp-network
  web:
    # 你docker build 的镜像名(就是dockerfile 运行 build 生成的那个镜像)  因为镜像依赖的node镜像所有包含了 node了环境
    image: "qsmben/xitupassword"
    # 指定一个别名
    container_name: xipasswordkoa
    restart: always
    #保持一致 前面是你的宿主机目录 /app在docker里面创建的工作目录  注意:mac下挂在文件 仅仅支持 /Users /Volumes /tmp
    #volumes:
     #- /usr/local/nodefile/node/password:/app
    #links: 
    # - database
    # 依赖上面的数据库
    links:
     - database
    depends_on:
     - database
      #我在js里面手动写了
    #environment: 
    #  - NODE_ENV=pro 
    # 4403是 dockerfile暴露出来的端口  尽量和Node的端口全部保持一致 避免混乱
    ports:
      - 4403:4403
    networks:
      - webapp-network
#创建链接桥
networks:
  webapp-network:
    driver: bridge
  1. 运行docker-compose up -d, 不出意外会新建两个容器, docker ps -a查看:
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                    PORTS                                NAMES
bc64dfdba38e        qsmben/xitupassword   "docker-entrypoint..."   3 hours ago         Up 3 hours                0.0.0.0:4403->4403/tcp               xipasswordkoa
0687206883aa        docker.io/mongo       "docker-entrypoint..."   17 hours ago        Up 17 hours               0.0.0.0:27018->27017/tcp             xipasswordmongo
  1. 如果不行,恭喜您 和我一样, 服务器无论如何都装不上docker-compose,我也谷歌过各种方法没啥用,遂放弃这种方法,采用官网的run方法。
  • docker run 方法, 直接贴代码和上面的都是对应的,很容易理解:
#创建容器内的网络桥接    
  docker network create -d bridge xituNet

   # mongo 容器
   docker run \
   -d \
   --name xipasswordmongo \
   -u root \
   -p 27018:27017 \
   -v /usr/local/mongo:/data/db \
   --network xituNet \
   docker.io/mongo

# node服务 容器 依赖mongo
 docker run \
   -d \
   -it \
   --rm \
  --name xipasswordkoa \
   -u root \
   -p 4403:4403 \
   --link xipasswordmongo \
   --network xituNet \
   qsmben/xitupassword

#3.jenkins配置

  • 上面连各种构建容器的方法,到底在哪运行比较合适呢,如果你采用jenkins 持续构建那肯定写在jenkins构建服务里比较合适,在jenkins的构建栏目选择执行shell,然后填入 配置如下:
whoami 
echo '开始项目构建命令'
echo $PATH
node -v
npm -v
echo '当前分支'
git branch -a

echo '拉代码'
git config -l
git pull origin master

echo 'docker image'
docker image ls 
echo 'docker container'
docker ps -a


echo 'build docker image'

echo '停止之前的docker容器和删除'
#/usr/local/bin/docker-compose down
docker stop xipasswordkoa 
docker rm xipasswordkoa
docker rmi qsmben/xitupassword
docker build -t qsmben/xitupassword .
echo '构建compose'

docker run \
  -d \
  -it \
  --rm \
 --name xipasswordkoa \
  -u root \
  -p 4403:4403 \
  --link xipasswordmongo \
  --network xituNet \
  qsmben/xitupassword

#ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose
#chmod 0755 /usr/local/bin/docker-compose
#docker-compose up -d
#docker-compose up -d

echo '容器运行列表'
docker ps -a
echo '镜像列表'
docker image ls
  • 上面的注释基本告诉了啥意思,还是那句话如果docker-compose没问题采用docker-compose,不行的话就跟我一样用docker run好了, 我这里只每次git提交 构建koa的node应用,因为mongo的容器基本不需要变动的,又不是业务代码,所以你在服务器内手动构建一次就好了。
  • 如果不遇到不懂的api或者对docker不明白,强烈建议看docker中文文档
  • 写完了,告辞!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容