docker-compose 持续集成初步探究

如果还对 docker 不太了解可以先看看这两篇教程,十分详细。

Docker 教程

Docker —— 从入门到实践

只要在项目根目录下写好 Dockerfile 和 docker-compose.yml ,然后执行

docker-compose stop #如果原有项目已存在,则先停止
docker-compose up -d --build    #加上--build重新编译项目
docker system prune -a -f #清理掉失效容器和镜像,如果不清理每次部署都会重新生成一个镜像,很占磁盘

在使用docker-compose up -d --build编译的过程中会利用以前已经编译过的缓存,这对于整个项目的快速部署是十分有帮助的

例如,我们都知道 nodejs 项目中的 node_modules 是非常庞大的,如果每次部署都要重新下载会非常耗时间,因此要利用缓存

# 编译环境
FROM alpine:3.11

WORKDIR /home/app

#锁定nodejs版本
ENV NODE_VERSION 12.15.0-r1
ENV NPM_VERSION 12.15.0-r1
ENV NODE_ENV production

# 安装nodejs环境。
RUN echo "http://mirrors.aliyun.com/alpine/v3.11/main/" > /etc/apk/repositories \
    && echo "http://mirrors.aliyun.com/alpine/v3.11/community/" >> /etc/apk/repositories \
    && apk update \
    && apk add --no-cache --update "nodejs=${NODE_VERSION}" "nodejs-npm=${NPM_VERSION}" \
    && npm config set registry https://registry.npm.taobao.org

COPY package.json /home/app/

RUN npm install --production    #先安装依赖能有效利用缓存

COPY . /home/app

RUN npm run build    #部署命令由项目决定

EXPOSE 80    #对外开放80端口

CMD ["npm", "start"]    #启动命令

修改完代码后提交到 github 之类的代码仓库,然后使用 webhook 推送到 jenkins 之类的 CI 进行编译部署即可。