最近公司有一個外包項目需要在不能連外網的情況下部署node項目到甲方公司內部。直接使用node官網的安裝包可以獲得node運行環境,但像pm2這種工具要離線裝就會比較費勁,所以最終選擇了使用docker容器來簡化這部分工作。
軟件版本:
當前操作系統:macos 10.14.6
docker:19.03.8
系統鏡像:centos:7.6.1810
這里使用兩種打包方式:
一、直接啟動鏡像聯網安裝打包離線鏡像
1.命令行進入容器
docker run -it centos:7.6.1810 /bin/bash
2.搭建node運行環境
# 創建項目目錄
mkdir -p /data/node
cd /data/node
# 安裝node二進制包
curl https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.gz > node-v10.15.3-linux-x64.tar.gz
tar -zxvf node-v10.15.3-linux-x64.tar.gz
rm -rf node-v10.15.3-linux-x64.tar.gz
mv node-v10.15.3-linux-x64 /usr/local/nodejs
ln -s /usr/local/nodejs/bin/node /usr/local/bin/
ln -s /usr/local/nodejs/bin/npm /usr/local/bin/
# 切換npm源
npm config set registry https://registry.npm.taobao.org --global
npm install -g pm2
# 設置pm2運行路徑
echo "export PATH=$PATH:/usr/local/nodejs/bin" >> ~/.bashrc
#設置時區
echo "export TZ=Asia/Shanghai" >> ~/.bashrc
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
source ~/.bashrc
#退出容器
exit
3.根據容器生成鏡像
docker docker commit -m "node_env" -a "lablelan" 容器id node_env
# 可以看到node_env已經打包成鏡像
docker images
二、 通過dockerfile生成鏡像
1.當前目錄下創建Dockerfile文件寫入
FROM centos:7.6.1810
RUN mkdir -p /data/node
WORKDIR /data/node
RUN curl https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.gz > node-v10.15.3-linux-x64.tar.gz
RUN tar -zxvf node-v10.15.3-linux-x64.tar.gz && rm -rf node-v10.15.3-linux-x64.tar.gz
RUN mv node-v10.15.3-linux-x64 /usr/local/nodejs && ln -s /usr/local/nodejs/bin/node /usr/local/bin/ && ln -s /usr/local/nodejs/bin/npm /usr/local/bin/
RUN npm config set registry https://registry.npm.taobao.org --global && npm install -g pm2 && echo "export PATH=$PATH:/usr/local/nodejs/bin" >> ~/.bashrc
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
2.使用dockerfile文件生成鏡像
docker build -f ./Dockerfile -t node_env
# 等待docker構建完成后可看見node_env鏡像
docker images
導出鏡像包
docker save -o node_env.tar node_env