参考自:https://blog.csdn.net/u013451157/article/details/79003717
docker安装
见前面文章
构建nodejs基础源镜像
由于是内网环境,所以提前打包好了nodejs镜像作为环境放到内网里,并推到harbor上保存.
关闭防火墙
systemctl status firewalld
systemctl stopfirewalld
systemctl status firewalld
加载打包好的docker镜像
docker load -i nodejs.8.9.jar
docker images
打tag并推到harbor上
docker tag node:8.9 192.168.1.30:5000/library/node
docker push 192.168.1.30:5000/library/node
准备nodejs应用项目
手头已经有一个成熟的nodejs应用项目,
nodejs项目具体不是很清楚,必须要有以下2个文件
- package.json
- server.js
准备Dockerfile文件
请用notepad++工具新建文件
FROM 192.168.1.30:5000/library/node:latest # 构建镜像的基础源镜像
# Create app directory
RUN mkdir -p /root/nodejs-docker_test # 用于在Image里创建一个文件夹并用来保存我们的代码
WORKDIR /root/nodejs-docker_test # 将我们创建的文件夹做为工作目录
# Bundle app source
COPY . /root/nodejs-docker_test # 把本机当前目录下的所有文件(也就是nodejs项目)拷贝到Imag的/root/nodejs-docker_test文件夹下
#RUN npm install # 使用npm 安装我们的app据需要的所有依赖
# 我这个项目 没有用到这条指令
EXPOSE 3000 # 未来镜像作为容器运行时对外暴露的端口
CMD [ "npm", "start" ]
运行nodejs服务
将Dockerfile文件放到nodejs项目下用于构建镜像
#切换到nodejs项目内
cd nodejs项目名
#构建镜像
docker build -t node-docker-app .
#查看构建的镜像
docker images -a
#运行镜像
docker run
--restart always
-d -p 3100:3000
-v /etc/localtime:/etc/localtime:ro
--name nodejs
镜像code
#参数解释:
# --restart 虚拟机重启后自动启动容器
# -d 容器以后台方式运行
# -p 容器的3000端口映射宿主机的3100端口
# -v 把宿主机的本地时间文件挂载到容器内的相同,保持容器内外时间一致
访问:
虚拟机所在ip:3000
后期维护
后期nodejs项目会随时更新,随时需要重新构建镜像
有想法把nodejs项目也作为gitlab上面一个独立的项目,实现自动化部署.
后续:考虑到nodejs项目的更新频率不是很高,一个月可能1-2次左右,所以不需要使用自动化部署.如果有nodejs更新,那么就手动重新构建镜像,运行容器就行了.
删除原有nodsjs容器和镜像
在nodejs容器所在虚拟机执行以下指令
docker ps查看运行中的容器
docker stop (nodejs容器id)
docker rm (nodejs容器id)
docker images
docker rmi (nodejs镜像id)
更新nodejs文件
打开xshell,连接到虚拟机
ctrl+alt+f,打开xftp(无法直接打开xftp,只能先打开xshell再打开xftp)
(xftp工具下操作)
把修改的文件(不要把整个项目传到里面去)放到虚拟机的nodejs文件夹下(/root/nodejs)的相应目录下
回到xshell
切换到 /root/nodejs目录下
cd /root/nodejs
#构建镜像
docker build -t node-docker-app .
#查看构建的镜像
docker images -a
#运行镜像
docker run
--restart always
-d -p 3100:3000
-v /etc/localtime:/etc/localtime:ro
--name nodejs
镜像id
#参数解释:
# --restart 虚拟机重启后自动启动容器
# -d 容器以后台方式运行
# -p 容器的3000端口映射宿主机的3100端口
# -v 把宿主机的本地时间文件挂载到容器内的相同,保持容器内外时间一致