【Docker】记 Docker 下,基于 Ubuntu:14.04 安装 nodejs ,并配置相关环境

消息中心本地 Docker 配置

起因:因消息中心所用的消息队列服务,是基于 阿里云 提供的。官方并没有 NodeJS的 API 接口。其 C++ 模块在 MacUbuntu 上的表现形式差别很大。在本地 Mac 上开发,不能完全模拟 服务器 上的表现,所以需要在本地模拟服务器环境进行开发。


Docker 安装

这个比较简单,可以参考 Mac 上安装 Docker

选择镜像版本

因为服务器使用的是 Ubuntu 14.04,所以选择的 Docker 基础镜像为 Ubuntu:14.04

docker pull ubuntu:14.04
  
  
  • 1

在控制台/命令行输入上述指令,等待片刻即可完成下载。

创建 Dockerfile 文件

第一版本:漏洞,安装东西过多,且出现 apt-get 更新不完全,导致 npm 的版本过低,无法完成后续安装。

FROM ubuntu:14.04
RUN sudo apt update \
    && sudo apt-get install -y python-software-properties \
    && sudo apt-get install -y curl \
    && sudo apt-get install make \
    && curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - \
    && curl -L https://www.npmjs.com/install.sh \
    && sudo apt-get install -y nodejs \
    && alias cnpm="npm --registry=https://registry.npm.taobao.org \
--cache=$HOME/.npm/.cache/cnpm \
--disturl=https://npm.taobao.org/dist \
--userconfig=$HOME/.cnpmrc" \
    && npm install npm@latest -g \
    && curl https://raw.githubusercontent.com/creationix/nvm/v0.16.1/install.sh 
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

这个版本的 Dockerfile 比较烦琐,安装了比较基础的东西。
因为没有解决掉 bashshDockerfile中的切换问题,还是需要手动去安装一些环境。而过多的 RUN 会在增加镜像的生成层。所以,直接写了下面的一个简洁版本。

FROM Ubuntu:14.04
RUN bash | echo start to install things \
    && sudo apt update \
    && sudo apt-get install -y python-software-properties \
    && sudo apt-get install -y curl \
    && sudo apt-get install -y make \
    && apt-get install -y gcc \
    && apt-get install g++ \
    && curl https://raw.githubusercontent.com/creationix/nvm/v0.16.1/install.sh | bash \
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

生成镜像

将工作目录切换至 Dockerfile 所在的目录下,运行:

docker build -t msgcenter_docker .
  
  
  • 1

因为创建镜像过程中,上下文 . 的影响,所以将共享目录没有放在 Dockerfile中实现。

生成容器

镜像生成之后,使用 docker image ls 查看当前镜像。
基于 msgcenter_docker 镜像,可以生成运行的容器:

 docker run -dit -v 消息中心目录:/YourProject \
 -p 7077:7077 \
 -p 80:80 \
 -p 7080:7080 \
 -p 81:81 \
 -p 8080:8080 \
 msgCenterContainer \
 /bin/bash
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

-dit: 表示后台,标准输入/输出流,类终端形式运行容器

手动安装剩余配置

接下来的部分比较烦琐,我也很想全部放在 Dockerfile 中实现。。。
这个部分等待后续全部在 Dockerfile 中实现!~~~

1. 安装 npm ,node
nvm install v6.10.2
  
  
  • 1

因为 npm 依赖于 node 产生。所以第二个 Dockerfile 采用更简洁的方式,防止了由基础镜像得到的容器,获取不到最新版本的 bug.

2. 安装 snpm – 私有库安装
npm install snpm -g --registry=你的库
  
  
  • 1
3. 安装 node-gyp、make、gcc、g++ 等编译工具
apt-get install -y make
apt-get install -y gcc
apt-get install -y g++
npm install node-gyp
  
  
  • 1
  • 2
  • 3
  • 4

上述四行代码,与 Dockerfile 有部分重合,可以去掉重合的部分。

4. 迁移项目代码

因为 Mac 跟 Ubuntu 上有些模块的表现形式不一样,所以需要移除 node_module 文件夹及其下所有内容,进行重新安装。又因为挂载的目录下修改文件,会对真实文件产生同样的更改。所以,将其移到至新的目录。
* 创建新目录:

mkdir /YourProject
  
  
  • 1
  • 复制项目:
cp -r /YouWantPut  /YourProject
  
  
  • 1
  • 删除原模块
rm -rf /YouWantPut/node_moudle/
  
  
  • 1
5. 配置项目
  • 安装内部模块,移至项目目录下 :
    shell
    snpm install
  • 安装其它模块:
npm install
  
  
  • 1
  • 编译环境:
make config-dev
  
  
  • 1
6. 全局安装 bunyan 与运行
  • 安装 bunyan:
npm install -g bunyan
  
  
  • 1
  • 运行:
node app | bunyan
  
  
  • 1

本来,准备写一些安装过程中遇到的各种坑。实在太晚了,基本上的坑都在上文中写完了。都是 Ubuntu 镜像太基础了,没有”任何“现成命令。

关于加速

  • apt-get 的加速
cd /etc/apt/
mv sources.list sources.list.bak
curl -O http://mirrors.163.com/.help/sources.list.precise
mv sources.list.precise sources.list
  
  
  • 1
  • 2
  • 3
  • 4
  • npm 加速
alias cnpm="npm --registry=https://registry.npm.taobao.org \
# --cache=$HOME/.npm/.cache/cnpm \
# --disturl=https://npm.taobao.org/dist \
# --userconfig=$HOME/.cnpmrc"
  
  
  • 1
  • 2
  • 3
  • 4

关于保存镜像

将启动的容器一路配置到开发环境是件不太”容易“且费时的事。所以,最好在配置完成之后,进行一次打包,使之生成新的镜像。

docker commit b23 msgserver/base:1
  
  
  • 1

b23 : 为生成窗口的 ID 前三位
后面的参数为生成的新镜像命名。

关于体积

可以观察,生成的镜像的体积无比巨大(跟原始镜像相比)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值