新建基于centOS的nodejs環(huán)境Dockerfile 和 eggjs項(xiàng)目的EggJSDockerfile。
centOS和nodejs環(huán)境
# 文件名:Dockerfile
# 基于centos鏡像
FROM centos
MAINTAINER xxx
# 安裝基礎(chǔ)軟件 wget git
RUN yum -y install wget
RUN yum -y install git
RUN yum -y install net-tools
RUN mkdir -p /home/app
WORKDIR /home/app
# 安裝node環(huán)境 最新LTS版本, 并配置node環(huán)境
RUN mkdir -p /usr/local/nodejs
RUN wget http://npm.taobao.org/mirrors/node/latest-v10.x/node-v10.16.0-linux-x64.tar.xz
RUN xz -d node-v10.16.0-linux-x64.tar.xz
RUN tar -xvf node-v10.16.0-linux-x64.tar
RUN rm -rf node-v10.16.0-linux-x64.tar.xz
RUN rm -rf node-v10.16.0-linux-x64.tar
RUN mv node-v10.16.0-linux-x64 /usr/local/nodejs
# 建立軟鏈 這樣的話就不用配置環(huán)境變量了
RUN ln -s /usr/local/nodejs/node-v10.16.0-linux-x64/bin/* /usr/bin/
CMD ["node", "--version"]
eggjs項(xiàng)目的Dockerfile內(nèi)容
#基于基礎(chǔ)鏡像
FROM xxx/nodejs
MAINTAINER xxx
#應(yīng)用部署目錄
WORKDIR /home/app
#部署后臺(tái)應(yīng)用代碼
COPY ./atlantic .
#工作目錄切換到應(yīng)用目錄
WORKDIR /home/app
RUN npm install nodeinstall -g --registry=https://registry.npm.taobao.org
#再次建立軟鏈 后面全局用到nodeinstall
RUN ln -s /usr/local/nodejs/node-v10.16.0-linux-x64/bin/nodeinstall /usr/bin/
RUN npm install --production --registry=https://registry.npm.taobao.org
RUN nodeinstall --install-alinode 4.8.0
#暴露端口給宿主機(jī)
EXPOSE 7001
#容器啟動(dòng)時(shí)執(zhí)行的命令,啟動(dòng)應(yīng)用
CMD npx egg-scripts start --title=egg-server
#構(gòu)建應(yīng)用鏡像
#docker build -f ./EggJSDockerfile -t xxx/eggjs .
#NODE_ENV通過(guò)啟動(dòng)容器時(shí)進(jìn)行參數(shù)傳遞
#docker run --name eggjs -p 9988:7001 -d xxx/eggjs
這里的./atlantic是指你的eggjs項(xiàng)目目錄。必須在你的build目錄下面。
COPY ./atlantic .這個(gè)命令是指把a(bǔ)tlantic下面的所有文件(不包括atlantic自身),復(fù)制到容器里面的WORKDIR指定的目錄。
鏡像構(gòu)建和容器啟動(dòng)
docker build -t xxx/nodejs .
docker build -f ./EggJSDockerfile -t xxx/eggjs .
docker run --name eggjs -p 9988:7001 -d xxx/eggjs
容器啟動(dòng)用于本地測(cè)試構(gòu)建的鏡像可用。瀏覽器訪問(wèn)localhost:9988即可。
導(dǎo)出鏡像
終端輸入如下命令即可
# 導(dǎo)出鏡像
docker save 鏡像id > 自定義鏡像名.tar
# 導(dǎo)入鏡像
docker load < 自定義鏡像名.tar
docker images
docker tag 鏡像id xxx/eggjs
docker run --name eggjs -p 9988:7001 -d xxx/eggjs