开始之前,我假设你的电脑上已经安装了Docker,如果没有安装过,请自行搜索相应的安装方式。
首先打开Docker Store,在首页的搜索框抛入node
寻找我们需要的合适镜像。
点击进去之后,看到右上角的拉取镜像命令,复制它到你的命令行终端中执行一下,即可将当前镜像安装到你的设备上。
docker pull node
接下来利用此镜像创建一个新容器
docker run -idt -p 8080:8888 node /bin/bash
docker run
,创建一个新容器-i
,让Docker的标准输入保持打开,允许用户与容器进行交互-d
,在后台运行Docker-t
,让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上8080
,我们一会儿要在nodejs服务中使用的端口8888
,Docker用来暴露给外部访问的端口bin/bash
,启动Docker的bash终端
不出意外的话,现在你已经成功的启动了一个Docker,运行此命令可以看到当前正在运行的所有Docker
docker ps
假设我们打算使用express
来启动一个静态服务器,用来输出一行文本Hello World
。
首先执行npm init
初始化一个package.json
文件,然后执行npm install express --save
,安装express
依赖包
{
"name": "test",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.15.2"
}
}
执行vi service.js
,编写nodejs代码:
var express = require('express');
var PORT = 8080;
var app = express();
app.get('/', function (req, res) {
res.send('Hello world');
});
app.listen(PORT);
console.log('Running on http://localhost:' + PORT);
注意:此处的PORT
要与上面我们创建Docker时用的8080
端口保持一致。
编写完毕,可以先在本机执行node service.js
测试一下,看服务是否正常。
执行docker ps
命令,查看Docker的CONTAINER ID
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cc53e1cefcf5 node "/bin/bash" 44 minutes ago Up 44 minutes 0.0.0.0:8080->8888/tcp grave_jang
执行以下命令就可以将当前目录的文件复制到此cc53e1cefcf5
Docker的/var/node
目录中
docker cp ./ cc53e1cefcf5:/var/node
为了验证一下,我们可以登录Docker,然后执行ls
命令查看是否真的复制成功了
docker attach cc53e1cefcf5
ls /var/node
但是,此docker cp
命令在[email protected]
以下版本貌似不支持,一直报错误提示:
Error: Path not specified
解决办法有两个,一是升级你的Docker版本,再一个就是在创建Docker的时候加上-v
参数,它可以直接把你当前设备上指定的目录复制到指定的Docker目录中。例如下面这条命令就是在创建一个Docker的同时,把我当前设备上的/var/data
目录文件直接复制到了Docker中的/home/data
目录
docker run -v /var/data:/home/data -i -t node /bin/bash
最后在Docker里执行node server.js
启动服务,然后在浏览器中访问http://localhost:8080
,就可以看到Hello World
了