Docker
将node项目打包成docker镜像:
https://www.cnblogs.com/williamjie/p/10147452.html
Docker资料:
https://blog.csdn.net/K_520_W/article/details/83097155
定义
解决了运行环境和配置问题的软件容器,实现软件跨平台。虚拟化技术,像开发人员把项目发给运维人员,就会碰到配置、环境问题而导致项目跑不起来。
docker与JVM的对比
JVM:启动过程慢(分钟级别的)、依赖于硬件
Docker:启动快(秒级别的)类似一个精简版的linux系统,
docker的生命周期
Docker的生命周期包含三个部分,镜像,容器,仓库,我们可以把镜像,容器想像成java的类和对象,即容器是由镜像实例化而来的。也就是说我们想使用装有相关软件的镜像,首先要把镜像创建成容器。
Docker常用命令
docker search 镜像名 从docker hub网站搜索:
docker images 查看镜像
docker inspect 容器id 查看容器的信息
docker run -it 镜像名[:版本号] 版本号默认是latest,启动容器
docker exec -it 容器名 登入容器
docker ps 查看启动的容器
docker stop/start 容器名 停止/启动容器
docker rm -f redis 删除容器
docker rm $(docker ps -aq) 删除全部已退出的容器
数据卷Volume
容器中数据的持久存储;容器间资源共享;容器的迁移;
对数据卷的修改会立马生效;对数据卷的更新,不会影响镜像;
Dockerfile
类似java中类的字节码文件,由它构建一个类,这里Dockerfile用来构建一个镜像,还有一种方法构建镜像的是使用命令:docker commit
- Dockerfile是软件的原材料
- Docker镜像是软件的交付品
- Docker容器则可以认为是软件的运行态。
Dockerfile中常用命令
FROM: 指定base镜像
COPY: 将文件从build context复制到镜像
ADD: 与copy类似,不同的是,如果复制的是归档文件(tar,zip,tgz,xz),文件会被自动解压到dest.
ENV: 设置环境变量,环境变量可被后面的指令使用
EXPOSE: 指定容器中的进程监听某个端口,docker可以将该端口暴露出来
VOLUME: 将文件或目录声明为volume
WORKDIR: 为后面的run,entpypint,add,copy指令设置镜像中的当前工作目录(容器目录)
RUN: 在容器中运行指定的命令
CMD: 容器启动时运行指定的命令。Dockerfile中可以有多个CMD指令,但只有最后一个生效。CMD可以被docker run 之后的参数替换。
ENTRYPOINT: 设置容器启动时的命令。Dockerfile中可以有多个ENTRYPOINT,但只有最后一个生效,CMD或者docker run之后的参数会被当作参数传 递给ENTRYPOINT.
Dockerfile使用案例:
https://blog.csdn.net/geek_xiong/article/details/91995051
Docker上部署node项目
案例jwtDemo项目:https://github.com/lzy-cat/docker_node.git
1、在linux系统中上传你的jwtDemo项目
2、在项目的根目录中创建一个Dockerfile(文件名不能改)
touch Dockerfile
Dockerfile内容如下:
# 使用alpine版本的node
FROM node:8-alpine
# 复制项目到镜像的根目录中
COPY . /dockernode/jwtDemo
# 启动容器时,进入的目录
WORKDIR /dockernode/jwtDemo
# 安装node依赖
RUN npm i
# 该向外暴露端口是jwtDemo项目的端口
EXPOSE 3011
ENTRYPOINT [ "npm", "start" ]
3、构建镜像
# lzy/jwt:1.3(自定义的镜像名:版本号),版本号不写,默认是latest。 注意最后有一个小数点
docker build -t lzy/jwt:1.3 .
4、运行容器
# 3043指浏览器访问的端口号,3011是Dockerfile中的端口号
docker run -it -p 3043:3011 lzy/jwt:1.3
5、windows下访问项目
# 192.168.2.2指linux的ip地址
http://192.168.2.2:3043/users/