Docker容器

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

2019-08-21  本文已影响4人  其实杰伦

#1.准备工作


#2.开整

  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 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配置

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
上一篇 下一篇

猜你喜欢

热点阅读