本篇是 Centos 从安装到部署 系列文章的最后一篇。最近忙于其他事情,本该早就完成的终结篇拖了好久。
在 《Centos 从安装到部署之 Docker》中简单的讲解了一些 Docker 的基础知识,主要就是为本篇文章做一个前置铺垫。接下来将会为大家介绍如何通过借助 Daocloud 实现 Docker 镜像的自动构建及部署。
使用 Docker 进行应用部署的优势:
- 使用不同版本的镜像部署容器,轻松实现应用版本管理及控制,且方便移植
- 可以同时部署多个容器,实现单机集群化部署
- 依托第三方平台,轻松实现应用的持续集成、自动构建及部署
- 应用之间彼此隔离,降低环境维护成本,提高安全性
要实现的目标:
-
本地编写业务代码,无需构建
-
推送代码到 Github 仓库
-
Daocloud 拉取最新代码进行镜像构建
-
构建完成自动部署镜像到指定服务器
Talk is cheap, show me step!
一、编写 Dockerfile 文件
在 上一篇 中,我们了解到 Dockerfile 文件是构建 docker 镜像的 “指南”,Docker Daemon 会根据项目上下文中的 Dockerfile 文件中的指令将项目打包构建为一个镜像,所以编写 Dockerfile 文件是第一步。 首先我们在项目根目录下创建一个 Dockerfile 文件(本文的构建过程以我的个人项目 recatch 为例),然后在其中写入如下代码:
# 指定当前镜像的基础镜像为 node,版本为 8.9.1
FROM node:8.9.1
# 指定当前镜像维护人信息
MAINTAINER yvanwang googolewang@gmail.com
# 此处将项目根目录下的 package*.json 拷贝到 /tmp/文件夹下
COPY package*.json /tmp/
# 运行命令行指令切换执行上下文到 /tmp 下,并执行 npm install 命令进行第三方依赖包的安装。
# 之所以要在 /tmp/ 目录下安装 npm 包,是为了可以充分利用 docker 镜像层的缓存,
# 防止每次构建镜像都需要重新安装
RUN cd /tmp && npm install
# 运行命令创建 /usr/src/recatch 文件夹
RUN mkdir -p /usr/src/recatch
# 指定工作目录为 /usr/src/recatch
WORKDIR /usr/src/recatch
# 将项目根目录下的内容拷贝到镜像的 /usr/src/recatch 目录下
COPY . .
# 运行命令将安装的 npm 包 拷贝到/usr/src/recatch 目录下,并执行项目构建
RUN cp -a /tmp/node_modules /usr/src/recatch && npm run build
# 运行命令安装 pm2,我们将使用 pm2 来守护我们的 node 进程
RUN npm install pm2 -g
# 声明容器运行端口
EXPOSE 8084
# 容器启动命令,将会执行 package.json 中的 start:docker 脚本
CMD ["npm", "run", "start:docker"]
对配置指令进行简单介绍:
FROM:指定基础镜像,我们的镜像就是基于该基础镜像进行定制,所以在 Dockerfile 中 FROM 指令是必需的,而且必须是第一条指令
MAINTAINER:镜像维护人信息
COPY:复制文件,格式为:COPY <源路径> <目标路径>
RUN:是用来执行命令行命令的
WORKDIR:指定工作目录,格式为: WORKDIR <工作目录路径>
EXPOSE: 声明运行时容器提供服务端口,只是一个声明,容器运行端口以启动容器时的配置为主
CMD: 容器启动命令,用于指定容器启动时需要运行的启动命令
详细具体的 Dockerfile 指令参考 《Docker — 从入门到实践》。
二、配置 Daocloud 设置 Github 项目
需要前往 Daocloud 注册一个管理账户,可以使用 Github 账户登录。 登录完成后,配置 Github 项目仓库。选择 项目 —> 创建新项目, 创建项目完成后,我们登录 Github,选择我们在 Daocloud 中选中配置的项目,切换到 Settings —> Webhooks 在菜单下可以看到一个 hook 配置。有了这个钩子配置,每次在我们提交代码之后,Github 就会向 Daocloud 发送一个 POST 请求,发送项目推送信息,Daocloud 接受到通知后就会自动执行镜像构建流程。
三、拉取镜像,运行容器
镜像构建完成后,设置 Daocloud 中的集群管理,配置我们的自有主机,拉取镜像并运行。选择 自有主机 —> 集群管理 —> 添加应用云平台 执行完成后选择 应用—>创建应用—>选择我们设置的项目 即可手动进行镜像部署。 至此,当我们的项目提交代码后, Daocloud 就会自动执行镜像构建,然后我们就可以部署镜像到我们的云主机,但是镜像部署这一步仍然需要我们手动执行。 万里长征就差最后一步,设置自动部署。选择 应用 —>我们创建的应用(点击应用名称)—>发布 将自动发布功能打开。
经过以上三步,我们就可以实现项目的自动构建和部署了。
本文旨在为大家提供一种使用 Docker 实现应用自动构建及部署的方法,如有不正确的地方,大家可以留言指出,共同学习,共同进步。
欢迎大家加入前端学习交流群 { 前端学习之同道中人 } :713117335
参考项目: recatch
参考资料: Docker — 从入门到实践 Docker 五大优势 — 持续集成、版本控制、可移植性、隔离性和安全性
文章发布在我的个人博客:https://www.yvanwang.com/post/5a7fbb33dd37a80025577fa7 原创文章作者:王亚飞 ( 如若转载,请注明出处 )