docker部署nodejs项目

zhuanbike 2021-12-21 1207

使用docker部署项目主要分为三步

1.创建nodejs项目

编写package.json为项目安装依赖所用

{
  "name": "expressPro",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.16.3"
  }
}


服务启动文件server.js

var express = require('express');
var app = express();
app.use(express.static('dist'));//表示dist目录下的为静态资源
var server = app.listen(3333, function () {
  var host = server.address().address;
  var port = server.address().port;
  console.log('Example app listening at http://%s:%s', host, port);
});


至此我们完成了nodejs项目开启一个简单web服务的功能

2.编写Dockerfile以及dockerignore

Dockerfile

#引用镜像
FROM node:8.9.4-alpine
#作者
MAINTAINER mkq
#执行命令,创建文件夹
RUN mkdir -p /usr/src/workPlace_express/expressPro
#将dist目录拷贝到镜像里
COPY ./dist /usr/src/workPlace_express/expressPro/dist/
COPY package.json /usr/src/workPlace_express/expressPro
COPY server.js /usr/src/workPlace_express/expressPro
#指定工作目录
WORKDIR /usr/src/workPlace_express/expressPro
#安装依赖及构建node应用
RUN npm install

#配置环境变量

 ENV HOST 0.0.0.0
 ENV PORT 3333

#定义程序默认端口

EXPOSE 3333

#运行程序命令

CMD ["node","server.js"]
dockerignore
# Logs
logs
*.log
npm-debug.log*
# Runtime data
pids
*.pid
*.seed
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules
jspm_packages
# Optional npm cache directory
.npm
# Optional REPL history
.node_repl_history
.idea
.node_modules
node_modules
.vscode


至此打包镜像准备工作完毕

3.打包镜像

在Dockerfile同级路径下执行如下命令构建镜像

# docker build -t docker_demo1 .


注意后面的.不能省略

不出意外的话我们就构建docker镜像成功了。然后可以使用如下命令查看已构建的镜像

   docker images


镜像构建完成之后我们就可以通过镜像启动一个容器了,使用如下命令

docker run -d -p 9000:3333 docker_demo1


-d表示后台运行。-p表示指定端口映射,此例中是将宿主机器的9000端口映射到3333,3333端口也就是我们的Dockerfile对外暴露的接口。

然后我们可以使用如下命令查看已启动的容器

docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5512f616077d docker_demo “node server.js” 22 hours ago Up 22 hours 0.0.0.0:9000->3333/tcp reverent_driscoll
a76391d51230 docker_demo “node server.js” 22 hours ago Up 22 hours 0.0.0.0:3333->3333/tcp lucid_edison
至此已经用docker部署了一个node应用。我们便可以通过宿主主机的ip:9000访问到容器上3333端口上的服务了。

4.docker 常用命令

docker images [options "o">] [name]

-a 列出所有镜像(含过程镜像);

-f 过滤镜像,如: -f ['dangling=true'] 只列出满足

dangling=true 条件的镜像;

--no-trunc 可显示完整的镜像ID;

-q 仅列出镜像ID。

--tree 以树状结构列出镜像的所有提交历史。

2. docker ps

列出所有运行中容器。

 

-a 列出所有容器(含沉睡镜像);
--before="nginx" 列出在某一容器之前创建的容器,接受容器名称和ID作为参数;
--since="nginx" 列出在某一容器之后创建的容器,接受容器名称和ID作为参数;
-f [exited=<int>] 列出满足
exited=<int> 条件的容器;
-l 仅列出最新创建的一个容器;
--no-trunc 显示完整的容器ID;
-n=4 列出最近创建的4个容器;
-q 仅列出容器ID;
-s 显示容器大小。

3. docker rmi

docker rmi [options "o">] <image>  "o">[image...]
docker rmi nginx:latest postgres:latest python:latest
从本地移除一个或多个指定的镜像。
-f 强行移除该镜像,即使其正被使用;
--no-prune 不移除该镜像的过程镜像,默认移除。
要删除全部image的话
docker rmi $(docker images -q)

4. docker rm

docker rm [options "o">] <container>  "o">[container...]
docker rm nginx-01 nginx-02 db-01 db-02
sudo docker rm -l /webapp/redis
-f 强行移除该容器,即使其正在运行;
-l 移除容器间的网络连接,而非容器本身;
-v 移除与容器关联的空间。
docker rm $(docker ps -aq) :删除所有容器
       docker stop [NAME]/[CONTAINER ID]:将容器退出。
docker kill [NAME]/[CONTAINER ID]:强制停止一个容器。


最新回复 (0)
发新帖