如何将nodeclub构建成Docker镜像(2)

先把我写的Dockerfile贴出来:

# Dockerfile to create a nodeclub image
FROM google/nodejs
MAINTAINER Carrotzpc
# Add files to the image
RUN mkdir -p /opt/nodejs
ADD . /opt/nodejs
WORKDIR /opt/nodejs
# Install the dependencies modules
RUN npm install
# Run make build
RUN make build
# Expose environment variables
ENV MONGO_CARROT_ADDR **LinkMe**
ENV MONGO_CARROT_PORT **LinkMe**
ENV MONGO_CARROT_DATABASE admin
ENV MONGO_CARROT_USER **ChangeMe**
ENV MONGO_CARROT_PASS **ChangeMe**
# Expose the container port
EXPOSE 5000
ENTRYPOINT ["node", "app.js"]

这么简单的几行命令,就可以构建出一个nodeclub镜像。下面我重点聊一下环境变量ENV,nodeclub的源码我用的是node + mongo(无Redis)的版本,mongo配置信息通过环境变量传递,这就需要我们简单修改一下nodeclub的配置文件,我在配置文件中增加了以下代码(不过直接在配置文件里边这样写不太好),用来获取mongo数据库连接字符串:

// Get mongodb connec string from env
function _getMongoUrl(){
  var db_addr = process.env.MONGO_CARROT_ADDR;
  var db_port = process.env.MONGO_CARROT_PORT;
  var db_user = process.env.MONGO_CARROT_USER;
  var db_pass = process.env.MONGO_CARROT_PASS;
  var db_database =  process.env.MONGO_CARROT_DATABASE;
  var db_url  = 'mongodb://';
  if (db_user && db_pass) {
    db_url += (db_user + ':' + db_pass + '@');
  }
  db_url += (db_addr? db_addr: 'localhost');
  db_url += ':' + (db_port? db_port: 27017);
  db_url += '/' + (db_database? db_database: 'admin');
  console.log('Connect to MongoStore Use this url:' + db_url);
  return db_url;
}

到这里我们完成了源码的修改,其中Dockerfile是放在源代码根目录的。现在可以开始构建nodeclub镜像了,Windows安装Docker比较蛋疼,我本地没有安装Docker环境,我用的是TenxCloud时速云的本地客户端tce,安装配置都比较简单,这里就不说了,大家可以参考官方文档。

在命令行中输入tce login填写用户名、密码后完成登录,然后进入到源代码根目录,执行tce push nodeclub命令,tce会自动将Dockerfile及引用的本地文件打包成zip,并上传到TenxCloud,由TenxCloud的容器引擎构建Docker 镜像,我们可以看到Docker构建镜像的相关日志:

如何将nodeclub构建成Docker镜像

完成构建后打开时速云网站,进入镜像市场>我的镜像就可以看到我们刚刚构建的镜像nodeclub:

如何将nodeclub构建成Docker镜像

在镜像详情页可以上传镜像图标、修改镜像信息、服务接口等,我们把Dockerfile中的ENV增加到服务接口中,用于在部署镜像时填写mongo的相关配置信息:

如何将nodeclub构建成Docker镜像

万事具备,只欠一个mongo了,正好时速云有提供mongo的镜像,于是我部署了一个mongo,然后在部署nodeclub时填写这个mongo的地址、端口等信息,��样就完成了nodeclub的部署:

如何将nodeclub构建成Docker镜像

还有一种方式就是把mongo也集成到我们的镜像中,这就涉及到了mongo的安装以及启动,我们留在下一次讨论。我把源代码上传到了github,大家有兴趣的话可以自己构建试试:https://github.com/Carrotzpc/docker-nodeclub。示例网站::46141/。 PS:由于部署镜像前host并不可知,所以我把源码改成了通过req.headers.host来获取host,这样激活邮件中的链接就可用了。

更多Docker相关教程见以下内容

Docker安装应用(CentOS 6.5_x64)  

Ubuntu 14.04安装Docker   

Ubuntu使用VNC运行基于Docker的桌面系统 

阿里云CentOS 6.5 模板上安装 Docker  

Ubuntu 15.04下安装Docker   

在Ubuntu Trusty 14.04 (LTS) (64-bit)安装Docker  

在 Ubuntu 15.04 上如何安装Docker及基本用法

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/15d3728bf3cbce25c61c1f5333aebf9d.html