什么是Dockerfile

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明,相当于快速构建时候的脚本文件

获取images

  1. 首先明确需要获取的image版本,以目前LTS的nodejs版本 12.14.0为例,在宿主机pull对应的版本,这一步不做也没关系,Dockerfile会自动拉
    1
    docker pull node:12.14.0

编写需要运行的node程序

  1. 先确定需要的依赖包,编写package.json文件,需要注意锁版本,生产和发布可能会因为时间不同,安装了新版本会有不可控的问题

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    { 
    "name": "dockerTest",
    "version": "1.0.0",
    "description": "Node.js on Docker",
    "author": "NNNNzs",
    "main": "server.js",
    "scripts": {
    "start": "node server.js"
    },
    "dependencies": {
    "express": "4.13.3"
    }
    }
  2. 编写运行的javascript服务,主要功能就是首页输出HelloWord

    1
    2
    3
    4
    5
    6
    7
    8
    9
    'use strict';
    const express = require('express');
    const PORT = 8888;
    const app = express();
    app.get('/', function (req, res) {
    res.send('Helloworld\n');
    });
    app.listen(PORT);
    console.log('Running on http://localhost:' + PORT);

编写Dockerfile

  1. Dockerfile的指令都市大写,依赖的构建镜像的基础源镜像必须在第一行
  2. 在容器中创建一个目录,-p是递归创建,如果父目录不存在则创建父目录
  3. 切换工作目录区到Service
  4. 将当前目录的文件拷贝到Service
  5. 安装nodejs的依赖,用淘宝的源
  6. 暴露端口给宿主机
  7. 构建完成启动服务
    1
    2
    3
    4
    5
    6
    7
    8
    9
    FROM node:12.14.0
    RUN mkdir -p /home/Service
    WORKDIR /home/Service
    COPY . /home/Service
    RUN npm install --registry=https://registry.npm.taobao.org
    EXPOSE 8888
    CMD npm start
    ## 如果想运行多条指令可以这样:
    ## CMD git pull && npm install && npm start

构建Image

  1. 首先需要切换到Dockerfile和文件所在的文件夹,再运行打包命令

    1
    docker build -t mynodeapp .
  2. -t name 表示镜像名

  3. 最后结尾的 . 表示当前目录的文件夹

运行镜像

1
docker run -d -p 80:8888  --name node-test mynodeapp
  1. -d 表示后台运行
  2. -p 表示端口映射 宿主机80映射到container 8888端口
  3. –name node-test 表示运行container的实例名
  4. mynodeapp表示运行的镜像名

检查是否正常运行

1
docker ps -a

在宿主机查看80端口是否正常返回

1
curl localhost:80

正常返回helloword就OK了,具体上外网可能还需要宿主机暴露端口

相关文章
评论
分享
  • Docker-安装篇

    what is DockerDocker 是一个开源的应用容器引擎换句话说就是运行的系统里的虚拟机,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。优点是容...

    Docker-安装篇
  • 微任务宏任务

    微任务队列宏任务队列 javascript是单线程,多线程都是模拟出来的, script、setTimeOut、setInterval是宏任务 Promise,process.nextTick是微任务 setTimeOut是n毫...

    微任务宏任务
  • functionalTemplate

    在使用iview表格的时候,定制组件,需要用到renderHeader API,看了一下如何传入render函数,结果惊为天人 12345678910111213141516export default { name:...

    functionalTemplate
  • 罗盘时钟

    罗盘时钟不刷抖音但是最近也听说了有很火的罗盘时钟,废话不多说直接上代码 123456789101112131415161718192021222324252627282930313233343536373839404142434445...

    罗盘时钟
  • 如何判定我点了margin?

    这个世界上唯有两样东西能让我们的心灵感到深深的震撼:一是我们头顶上灿烂的星云,二是我们心中崇高的道德法则。 one - 康德 前言页面的绑定事件都是绑定在DOM元素上的,诸如此类 123document.getElementById(...

    如何判定我点了margin?
  • 自动微信读书

    前言最近在学习ReactNative,真机调试的时候安装的ADB调试工具,突发奇想,既然PC可以操控手机,是不是可以做一些懒得做的事情 流程 通过USB链接真机调试 执行wifi调试 123adb tcpip 5555adb co...

    自动微信读书
  • 初探electron

    什么是 electron使用html、css、javascipt、nodejs来编写跨平台的客户端程序,可以使windows、linux、macos 优点一次代码编写,多端打包 起步

    初探electron
  • 粘贴图片上传功能

    粘贴图片并上传最近在写博客的时候,纯MarkDown语法写,但是发现图片是个需求,需要经常截图并且写到MarkDown里面之前的做法是用QQ截图,然后另存为到本地桌面,然后再上传,返回URI地址,贴到博客编辑器里面最近发现有些页面支持...

    粘贴图片上传功能
  • 记一次sql性能优化

    有个小需求,在表里根据页码和页数查询,并排序,很简单,3秒就写出的sql 1select * from newslist order by id desc limit ${(currPage - 1) * pageSize&...

    记一次sql性能优化
  • 花式log

    各种控制台输出常见的控制台打印123456console.log() // 打印日志console.debug() // 打印调试console.error() // 打印错误console.info() // 打印信息...

    花式log