前端开发同志找到我们,说是要部署一个新的react服务,
根据前端的描述,需要我们制作服务启动Docker镜像,
因此记录制作步骤如下:
一、依赖原ubuntu16.04镜像
# 启动Ubuntu镜像
docker run -dit ubuntu:16.04
# 进入容器运行环境
docker exec -it xxx bash
# 替换ubuntu16.04镜像源为阿里镜像源
vim /etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ xenial main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe
# 更新源
apt-get update
# 安装常用软件
apt-get install curl
apt-get install vim
apt-get install net-tools
二、在镜像内安装nodejs
参考:
https://www.cnblogs.com/feiquan/p/11223487.html
https://sharp.pixelplumbing.com/install#custom-prebuilt-binaries
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install -y nodejs
# 验证安装是否成功
node -v
npm -v
# 修改npm镜像源
npm config set registry https://registry.npm.taobao.org
# 查看
npm config get registry
# 如果不需要可以直接删除
# npm config rm registry
# 后续在npm install具体项目时需依赖sharp,从github下载非常慢,故修改其为国内镜像源并且预先安装
npm config set sharp_binary_host "https://npm.taobao.org/mirrors/sharp"
npm config set sharp_libvips_binary_host "https://npm.taobao.org/mirrors/sharp-libvips"
npm install sharp
三、在镜像内安装pm2
参考:https://www.jianshu.com/p/e15fd72727fe
npm install -g pm2
# 验证安装成功
pm2 -v
四、提交nodejs+pm2基础镜像
# 在镜像内创建源代码路径
mkdir nodejs
# 提交容器为nodejs基础镜像
docker commit xxx docker-hub.xxx/tsp2/nodejs-pm2:v1
五、制作服务启动Dockerfile
Dockerfile文件
# 依赖第四步中提交的基础镜像
FROM docker-hub.xxx/tsp2/nodejs-pm2:v1
# 拷贝源代码
ADD nodejs /nodejs
# 设置工作目录
WORKDIR /nodejs
# 安装npm依赖
RUN npm install
# 暴露端口
EXPOSE 3000
# 启动命令(使用pm2-runtime替代原pm2,使用pm2启动后docker自动exited状)
CMD ["pm2-runtime","start", "server.js"]
注:
使用pm2-runtime代替pm2(参考:stackoverflow - Docker exits with code 0 when using pm2 start)
构建镜像
# 构建镜像
docker build -t docker-hub.xxx/project/front-traffic:v1 .
# 提交镜像到远程仓库
docker push docker-hub.xxx/project/front-traffic:v1
六、启动Docker容器
docker run -dit --name front-traffic -p 3000:3000 docker-hub.xxx/project/front-traffic:v1