# Docker 入门教程
# 环境配置的难题
用户计算机的环境都不相同,你怎么知道自家的软件,能在那些机器跑起来?
# 虚拟机
虚拟机(virtual machine)是带环境安装的一种解决方案。
缺点:占资源、步骤多、启动慢
# Linux 容器
Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。
缺点:不占资源、体积小、启动快
# Docker
Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。
# 实例:hello world
通过最简单的 image
文件 hello world
,感受一下 Docker
:
$ docker container run hello-world
如果运行成功,你会在屏幕上读到下面的输出:
Hello from Docker!
This message shows that your installation appears to be working correctly.
# 实例:制作自己的 Docker 容器
准备一个练手的 koa-demos
项目:
$ git clone https://github.com/ruanyf/koa-demos.git
$ cd koa-demos
在项目的根目录下,新建 .dockerignore
文件, 排除无需打包到 image 的文件:
.git
node_modules
npm-debug.log
在项目的根目录下, 新建 Dockerfile
文件:
FROM node:8.4 # 该 image 文件继承官方的 node image,版本 8.4
COPY . /app # 拷贝当前目录下的所有文件到 image 文件的 /app 目录
WORKDIR /app # 指定接下来的工作路径为 /app
RUN npm install # 在 /app 目录下,运行 npm install 命令安装依赖
EXPOSE 3000 # 将容器的 3000 端口暴露给外部
创建 image
文件:
$ docker image build -t koa-demo . # `-t` 指定文件名, `.` 表示当前路径
如果运行成功,就可以看到新生成的 image 文件 koa-demo 了。
$ docker image ls
从 image 文件生成容器实例:
# -p:容器的 3000 端口映射到本机的 8000 端口
# -it:容器的 Shell 映射到本机窗口当前的 Shell
# koa-demo:0.0.1:image 文件的名字
# /bin/bash:容器启动以后,内部第一个执行的命令
$ docker container run -p 8000:3000 -it koa-demo /bin/bash
如果一切正常,会返回一个命令行提示符:
root@66d80f4aaf1e:/app#
这表示你已经在容器里面了,返回的提示符就是容器内部的 Shell 提示符。执行下面的命令:
root@66d80f4aaf1e:/app# node demos/01.js
这时,Koa 框架已经运行起来了。打开本机的浏览器,访问 http://127.0.0.1:8000
会显示 Not Found
。
测试完毕,销毁容器:
# 在容器的命令行按下 Ctrl + c 停止 Node 进程
# 按下 Ctrl + d 退出容器
# 在本机的另一个终端窗口,查出容器的 ID
$ docker container ls
# 停止指定的容器运行
$ docker container kill [containerID]
# 查出所有容器的 ID
$ docker container ls --all
# 删除指定的容器文件
$ docker container rm [containerID]