1. 前提条件

0.0 环境准备
0.1 安装docker

  1. 使用busybox镜像输出Hello World(命令行输出Hello World后结束)
    docker run busybox echo "Hello World"
  2. 创建一个简单的Node.js应用
  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);
  1. 为镜像创建Dockerfile(创建一个叫Dockerfile的文件,它包含了一系列构建镜像时会执行的指令,Dockerfile文件需要和app.js文件在同一目录)
FROM node:7
ADD app.js /app.js
ENTRYPOINT ["node", "app.js"]
  1. 构建容器镜像(每一行Dockerfile指令都会产生一个新层,也可以通过运行已有镜像容器手动构建镜像,优点是Dockerfile是自动化且可重复的)
    docker build -t kubia .
  2. 列出本地存储的镜像
    docker images
  3. 运行容器镜像(–name指定容器名,-d指定在后台运行,-p 8080:8080代表本机的8080被映射到容器的8080)
    docker run --name kubia-container -p 8080:8080 -d kubia
  4. 访问应用(显示的hostname是容器的container ID),浏览器直接访问http://8.130.177.188:8080
  5. 列出所有运行中的容器(此处可以看到containerID)
    docker ps
  6. 获取更多的容器信息(假设此containerID为:2d72684645cd)
    docker inspect 2d72684645cd
  7. 在主机操作系统上查看容器内的进程
    ps aux|grep app.js
  1. 探索运行容器的内部
  1. 在已有的容器内部运行shell(-i:确保标准输入流保持开放。-t:分配一个伪终端TTY)
    docker exec -it kubia-container bash
  2. 查询当前系统所有进程(-a:显示所有进程(包括其他用户的进程)-u:用户以及其他详细信息 -x:显示没有控制终端的进程,正常只会查出来3个进程,一个node,一个bash,一个当前的ps指令)
    ps aux
  3. 容器的文件系统也是独立的(只会展示容器内的文件,包括镜像内的所有文件,再加上容器运行时创建的任何文件,如可以看到app.js在根目录)
    ls /
  4. 退出容器
    exit
  1. 停止和删除容器
  1. 停止容器(停止后可以使用docker ps -a查询到运行中和已经停止的容器)
    docker stop kubia-container
  2. 删除容器(所有内容会被删除且无法再次启动)
    docker rm kubia-container
  1. 向镜像仓库推送镜像
  1. 在hub.docker.com创建账号

username:nuptaxin,pwd:******

  1. 使用附加标签标注镜像(使用docker images查看是否打tag成功了,kubia和nuptaxin/kubia是两个镜像,但是指向同一个id)
    docker tag kubia nuptaxin/kubia
  2. 登录你的docker账号
    docker login
  3. 向Docker Hub推送镜像
    docker push nuptaxin/kubia
  4. 在不同机器上运行镜像(推送完成后,镜像便可以给任何人使用)
    docker run --name kubia-container2 -p 8080:8080 -d nuptaxin/kubia
  5. 资源清理
    docker stop kubia-container2