加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

写给前端的Docker实战教程

发布时间:2019-09-27 19:12:15 所属栏目:优化 来源:花生PeA
导读:本篇文章详细而又简短的介绍了:一名完全不了解 Docker 前端程序员,将全站 Docker 化的过程。内容主要包含: Docker 基本概念 真实站点迁移过程: 静态站点 Nodejs 站点(Express) WordPress(PHP) 一些必备技巧:开机启动、常用Shell 文章会讲解使用 Docke

登录VPS服务器,安装 Nginx。因为我是 Ubuntu,所以可以用apt安装。其他 Linux 发行版可以百度下安装方法,通常2行内可以搞定:

  1. apt update # 更新软件包 
  2. apt-get install nginx # 安装 Nginx 
  3. systemctl status nginx # 查看 Nginx 状态 

此时本地通过浏览器访问 VPS 的公网 IP 可用看到 Nginx 的欢迎页面

写给前端的Docker实战教程

然后在 VPS 服务器的/etc/nginx/conf.d/中建立一个vhost.conf文件,配置如下内容:

  1. server { 
  2.     listen 80; 
  3.     server_name pea3nut.info; 
  4.  
  5.     location / { 
  6.         proxy_pass http://127.0.0.1:8082; 
  7.     } 

配置的意思是,监听来自 80 端口的流量,若访问域名是pea3nut.info(替换为你自己的域名),则全部转发到http://127.0.0.1:8082中

配置完成后,重启 Nginx 服务器。若是 Ubuntu 可以使用systemctl restart nginx命令,不同 Linux 发行版稍有不同

配置成功后,访问pea3nut.info会看到和VPS公网IP:8082相同的效果

更新站点

而迁移完成 Docker 后,我想改一个错别字的流程变为:

  • 本地修改完成,执行git push
  • 等待 CI 编译完成
  • 登录 VPS 服务器,执行:
  1. docker image pull pea3nut/pea3nut-info:latest 
  2. docker container create -p 8082:80 pea3nut/pea3nut-info:latest # 得到 yyy 
  3. docker container stop xxx # xxx 为当前运行的容器ID,可用 docker container ls 查看 
  4. docker container start yyy # yyy 第二条命令返回值 

命令还是有些长?我们在下面会进一步优化它

迁移 Nodejs 站点(Express)

接下来我们实战迁移一个由 Nodejs 写的 Express SSR 站点

  • 网址:pxer.pea3nut.org
  • 源码:github/pxer-homepage

我打算怎么做

网站使用 Ejs 模板渲染页面。在没迁移 Docker 之前,若我想更新线上网站中内容时,需要:

  1. 本地修改好 Ejs 或者其他文件
  2. 手动通过 FTP 上传到服务器
  3. 在服务器端重启 Nodejs 进程。若有 npm 包依赖改动,需要在VPS服务器上手动执行npm install
  4. git push更新 Github 源码

稍微有点麻烦,因此我打算这样改:

  1. 执行git push
  2. 自动检测到 github 有代码更新,自动打包出一个 Docker 镜像
  3. CI 编译完成后,SSH 登录 VPS,删掉现有容器,用新镜像创建一个新容器

而这样做的好处是:

  1. 不必再手动 FTP 上传文件
  2. 不必手动维护服务器的 Nodejs 运行环境

实施

具体的过程和处理静态站点没有什么特别的区别,无非是:

  1. 编写 Dockerfile 文件
  2. 在 CI 时自动打包镜像
  3. 在VPS增加一个 Nginx 反向代理

这次就不重复讲了,具体的配置可以参考项目中的相关文件

Tips: 你可能发现了 Dockerfile 中的ENTRYPOINT命令必须指定一个前台进程。若你的 Nodejs 应用是使用 PM2 进行保活的,你需要替换pm2 start app.js为pm2-docker app.js

docker-compose

当将 Nodejs 站点迁移完成,我们的 VPS 服务器上已经运行了2个容器。每次镜像更新都要手动的docker container create带一堆参数是比较麻烦的,尤其是当日后容器日益增多的时候。而这时,就轮到docker-compose登场了~

docker-compose 是 Docker 官方提供的一个 Docker 管理工具。若你是通过桌面端的 Docker 安装包安装的 Docker,它是会默认为你安装 docker-compose 的。可以试试如下命令:

  1. docker-compose --help 

如果是在 Linux,可以通过如下命令安装 docker-compose:

  1. curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 
  2. chmode +x /usr/local/bin/docker-compose 

docker-compose 和 Docker 差不多,也是只要一份文件就能跑起来。docker-compose 主要的作用就是能够让你不必手敲那么多 Docker 命令

建立一个目录,然后在目录中建立docker-compose.yml,内容如下:

  1. version: "3.7" # 这个是配置文件的版本,不同的版本号声明方式会有细微的不同 
  2. services: 
  3.     info: 
  4.         container_name: pea3nut-info 
  5.         image: pea3nut/pea3nut-info:latest 
  6.         ports: 
  7.             - "8082:80" 
  8.         restart: on-failure 

然后在目录中键入如下命令就能将服务跑起来:

  1. docker-compose up info 

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读