获取中...

-

Just a minute...

什么是Dockerfile

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

获取images

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

    编写需要运行的node程序

  2. 先确定需要的依赖包,编写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"
    }
    }
  3. 编写运行的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

  8. 首先需要切换到Dockerfile和文件所在的文件夹,再运行打包命令
    1
    docker build -t mynodeapp .
  9. -t name 表示镜像名
  10. 最后结尾的 . 表示当前目录的文件夹

运行镜像

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了,具体上外网可能还需要宿主机暴露端口

以一个nodejs项目为例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
From node:12.14.0
#创建文件夹
RUN mkdir -p /usr/bz-front-tools
#将dist目录拷贝到镜像里
COPY . /usr/bz-front-tools
#指定工作目录
WORKDIR /usr/bz-front-tools
#安装依赖及构建node应用
RUN npm install --production --registry=https://registry.npm.taobao.org
#配置环境变量
ENV HOST 0.0.0.0
ENV PORT 3000
#定义程序默认端口
EXPOSE 3000
#运行程序命令
CMD ["npm","start"]
相关文章
评论
分享
  • Docker-网络

    docker网络docker 容器玉操作系统通信机制

    Docker-网络
  • github action

    利用github action,在提交之后,自动将hexo打包后的内容推送到服务器上 12345678910111213141516171819202122232425262728293031323334353637383940414...

    github action
  • Docker-常用命令

    123456789101112131415161718192021222324#mac虚拟机常用位置/var/lib/docker/overlay2/6cf74ecc1227dc93a85d02f15fc85c588111ea0807...

    Docker-常用命令
  • 服务器挂机下载百度网盘

    非业务需求,只是觉得开着电脑挂机下载百度网盘的内容实在是太慢了突发奇想,能不能用服务器挂机下载,反正开着也是开着上网搜索一番,还真的有现成的实现 有人利用百度网盘开源的api,写了个下载上传同步的工具(https://github.c...

    服务器挂机下载百度网盘
  • Docker-安装篇

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

    Docker-安装篇
  • 自动部署

    !来源 #利用宝塔webhook自动部署 12345678910111213141516171819202122232425262728#!/bin/bashecho ""# 输出当前时间date --date=&...

    自动部署
  • 只要不失去你的崇高整个世界就会向你敞开

    7 月 29 日周五,临下班之前问了一下领导,下周不会出差吧,这周我要回家领导说:放心回马鞍山吧,不出差,注意疫情防控就行。结果刚到高铁站就打电话来,说是一个很紧急的项目要去桂林出差,赶紧订周日或者周一的飞机票过去年龄越大,就越难有反...

    只要不失去你的崇高整个世界就会向你敞开
  • 端午小记

    端午小记很遗憾 三个月没到就分手了 为什么是她因为刚好是她合适的时间合适的地点相遇再加上一些多巴胺和荷尔蒙的催化下我也想试试,以为这就是不等人的缘分 为什么是我因为刚好是我出现在合适的时间合适的地点在她被不喜欢的人追求时一面挡箭牌出现...

    端午小记
  • 利用微信小程序扫码授权

    微信小程序扫码授权背景想要使用微信扫码登录自己的网址,通过授权快速获取用户的昵称,头像功能由于没有企业认证账号,故只能通过微信小程序实现, 体验地址https://api.nnnnzs.cn/screen-demo.html?env=...

    利用微信小程序扫码授权
  • Math.ceil(25/10)*10 === 30

    终于是到了四舍五入等于 30 的年龄了其实这应该是一篇放在 2022 年 3 月 8 日更新的博客内容应该是来南京工作一年的总结拖到五一假期,整理一下思绪打算发的结果五一又忙着帮别人搬家生日也得过且过,所以拖到了现在 感情发上一篇帖...

    Math.ceil(25/10)*10 === 30