• Docker (一、dockerfile-node.js)


    1.基本说明

      Dockfile是一个用于编写docker镜像生成过程的文件,其有特定的语法。在一个文件夹中,如果有一个名字为Dockfile的文件,其内容满足语法要求,在这个文件夹路径下执行命令:docker build --tag name:tag .,就可以按照描述构建一个镜像了。name是镜像的名称,tag是镜像的版本或者是标签号,不写就是lastest。注意后面有一个空格和点。

    2.Dockfile语法

      Dockerfile的基本指令有十三个,分别是:FROM、MAINTAINER、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、USER、WORKDIR、ONBUILD。下面对这些指令的用法一一说明。

    2.1 FROM

      用法:FROM <image>

      说明:第一个指令必须是FROM了,其指定一个构建镜像的基础源镜像,如果本地没有就会从公共库中拉取,没有指定镜像的标签会使用默认的latest标签,可以出现多次,如果需要在一个Dockerfile中构建多个镜像。

    2.2 MAINTAINER

      用法:MAINTAINER <name> <email>

      说明:描述镜像的创建者,名称和邮箱

    2.3 RUN

      用法:RUN "command" "param1" "param2"

      说明:RUN命令是一个常用的命令,执行完成之后会成为一个新的镜像,这里也是指镜像的分层构建。一句RUN就是一层,也相当于一个版本。这就是之前说的缓存的原理。我们知道docker是镜像层是只读的,所以你如果第一句安装了软件,用完在后面一句删除是不可能的。所以这种情况要在一句RUN命令中完成,可以通过&符号连接多个RUN语句。RUN后面的必须是双引号不能是单引号(没引号貌似也不要紧),command是不会调用shell的,所以也不会继承相应变量,要查看输入RUN "sh" "-c" "echo" "$HOME",而不是RUN "echo" "$HOME"。

    2.4 CMD

      用法:CMD command param1 param2

      说明:CMD在Dockerfile中只能出现一次,有多个,只有最后一个会有效。其作用是在启动容器的时候提供一个默认的命令项。如果用户执行docker run的时候提供了命令项,就会覆盖掉这个命令。没提供就会使用构建时的命令。

    2.5 EXPOSE

      用法:EXPOSE <port> [<port>...]

      说明:告诉Docker服务器容器对外映射的容器端口号,在docker run -p的时候生效。

    2.6 ENV

      用法:EVN <key> <value> 只能设置一个

           EVN <key>=<value>允许一次设置多个

      说明:设置容器的环境变量,可以让其后面的RUN命令使用,容器运行的时候这个变量也会保留。

    2.7 ADD

      用法:ADD <src>   <dest>

      说明:复制本机文件或目录或远程文件,添加到指定的容器目录,支持GO的正则模糊匹配。路径是绝对路径,不存在会自动创建。如果源是一个目录,只会复制目录下的内容,目录本身不会复制。ADD命令会将复制的压缩文件夹自动解压,这也是与COPY命令最大的不同。

    2.8 COPY

      用法:COPY <src> <dest>

      说明:COPY除了不能自动解压,也不能复制网络文件。其它功能和ADD相同。

    2.9 ENTRYPOINT

      用法:ENTRYPOINT "command" "param1" "param2"

      说明:这个命令和CMD命令一样,唯一的区别是不能被docker run命令的执行命令覆盖,如果要覆盖需要带上选项--entrypoint,如果有多个选项,只有最后一个会生效。

    2.10 VOLUME

      用法:VOLUME ["path"]

      说明:在主机上创建一个挂载,挂载到容器的指定路径。docker run -v命令也能完成这个操作,而且更强大。这个命令不能指定主机的需要挂载到容器的文件夹路径。但docker run -v可以,而且其还可以挂载数据容器。

    2.11 USER

      用法:USER daemon

      说明:指定运行容器时的用户名或UID,后续的RUN、CMD、ENTRYPOINT也会使用指定的用户运行命令。

    2.12 WORKDIR

      用法:WORKDIR path

      说明:为RUN、CMD、ENTRYPOINT指令配置工作目录。可以使用多个WORKDIR指令,后续参数如果是相对路径,则会基于之前的命令指定的路径。如:WORKDIR  /home  WORKDIR test 。最终的路径就是/home/test。path路径也可以是环境变量,比如有环境变量HOME=/home,WORKDIR $HOME/test也就是/home/test。

    2.13 ONBUILD

      用法:ONBUILD [INSTRUCTION]

      说明:配置当前所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。意思就是,这个镜像创建后,如果其它镜像以这个镜像为基础,会先执行这个镜像的ONBUILD命令。

    3、实用例子

    安装nodejs

    首先编写nodejs 的dockerfile

    #基础镜像,这里选择的这个node 是因为build之后占用空间没有那么大
    FROM node:9.2.1-alpine
    # 指定制作我们的镜像的联系人信息(镜像创建者)
    MAINTAINER xiaojiu
    
    # 将根目录下的文件都copy到container(运行此镜像的容器)文件系统的app文件夹下
    # cd到app文件夹下
    WORKDIR /app
    #复制package文件到工作目录
    COPY package*.json ./
    # 安装项目依赖包
    RUN npm install
    #复制项目到工作目录中
    COPY . .  
             
    # 容器对外暴露的端口号
    EXPOSE 8889
    # 容器启动时执行的命令,类似npm run start
    CMD npm start 

    忽略文件 .dockerignore 跟你的dockerfile 在同一目录

    node_modules
    npm-debug.log

    构建镜像

    docker build -t node:1.0 .

    利用该镜像启动容器

    docker run -p 80:80 node:1.0 -d 

    官方文档  https://nodejs.org/en/docs/guides/nodejs-docker-webapp/

  • 相关阅读:
    关于lockkeyword
    关于多层for循环迭代的效率优化问题
    Android 面试精华题目总结
    Linux基础回想(1)——Linux系统概述
    linux源代码编译安装OpenCV
    校赛热身 Problem C. Sometimes Naive (状压dp)
    校赛热身 Problem C. Sometimes Naive (状压dp)
    校赛热身 Problem B. Matrix Fast Power
    校赛热身 Problem B. Matrix Fast Power
    集合的划分(递推)
  • 原文地址:https://www.cnblogs.com/mjiu/p/10278141.html
Copyright © 2020-2023  润新知