两种方式:
- Dockerfile
- 手动创建:运行已有镜像容器,运行命令,退出容器,把最终状态作为新镜像
以创建node.js应用为例讲解dockerfile创建
1 app.js
const http = require('http')
const os = require('os')
console.log("Kubia server starting...")
var handler = function(request, response) {
console.log("Received request from " + request.connection.remoteAddress);
response.writeHead(200);
response.end("You've hit " + os.hostname() + "\n");
};
var www = http.createServer(handler);
www.listen(8080);
功能:在8080启动http服务器,打印请求的IP,并以状态码200和you’ve hit 来响应每个请求
2 Dockerfile
需要和app.js在同一目录
FROM node:7 # 指定基础镜像,必须为第一个命令
ADD app.js /app.js # 把本地app.js添加到镜像的根目录,并保持app.js这个文件名
ENTRYPOINT ["node", "app.js"] # 定义了当镜像运行时,需要被执行的命令,为node app.js。仅能有一个
链接: dockerfile文件详解.
3 docker build -t kubia .
基于当前目录( . )构建一个叫kubia的镜像,Docker会在目录中寻找Dockerfile,然后基于其中的指令构建镜像
注:
(1)docker客户端和守护进程不要求在同一台机器上,如在非linux系统中使用docker,客户端运行在宿主机操作系统上,守护进程运行在一个虚拟机内
(2)构建目录中的文件要被上传到守护进程中,因此不要包含不需要的文件,会减慢构建速度