Docker入门
VM虚拟机 VS Docker
VM | Docker |
---|---|
在一种操作系统里面运行另一种操作系统 | 不是模拟一个完整的操作系统,而是对进程进行隔离。Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口 |
资源占用多 | 资源占用少 |
冗余步骤多 | 体积小 |
启动慢 | 启动快 |
Docker 将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样
Docker的用途
- **提供一次性的环境。**比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
- **提供弹性的云服务。**因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
- **组建微服务架构。**通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
Docker的安装
安装完成后,运行以下命令,验证是否安装成功
$ docker version
Docker-image文件(先启动Docker)
**Docker 把应用程序及其依赖,打包在 image 文件里面。**只有通过这个文件,才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。
// 列出本机的所有 image 文件
$ docker image ls
// 删除 image 文件
$ docker image rm [imageName]
为了节省时间,我们应该尽量使用别人制作好的 image 文件,而不是自己制作
Docker 的官方仓库 Docker Hub 最重要 最常用的 image 仓库
Hello World
-
拉取 hello-world image 文件
$ docker image pull library/hello-world 或 $ docker image pull hello-world
-
查看image文件
$ docker image ls
-
运行image文件
$ docker container run hello-world
-
运行结果
container 文件
image 文件生成的容器实例,本身也是一个文件,称为容器文件
// 列出本机正在运行的容器
$ docker container ls
// 列出本机所有的容器 包括终止运行的容器
$ docker container ls --all
// 终止某容器运行
$ docker container kill [containerID]
// 删除某容器
$ docker container rm [conatinerID]
制作自己的Docker容器
以koa-demos为例,实现用户在Docker容器中运行Koa框架
-
Clone 项目
$ git clone https://github.com/itxing666/koa-demos.git $ cd koa-demos
-
编写.dockerignore文件 不要打包进入 image 文件
// 项目根目录 创建 .dockerignore $ touch .dockerignore $ vim .dockerignore
写入以下内容
.git node_modules npm-debug.log
-
编写Dockerfile文件
// 项目根目录 创建 Dockerfile $ touch Dockerfile $ vim Dockerfile
写入以下内容
FROM node:8.4 COPY . /app WORKDIR /app RUN npm install --registry=https://registry.npm.taobao.org EXPOSE 3000
- FROM node:8.4 8.4版本的node
- COPY . /app 将目录下(除了
.dockerignore
)的所有文件,都拷贝到 image 文件的/app
目录 - WORKDIR /app 指定 接下来的工作路径为
/app
- RUN npm install 在
/app
目录下,运行npm install
命令安装依赖,都打包进入 image 文件中 - EXPOSE 3000 将容器 3000 端口暴露出来, 允许外部连接这个端口
-
创建 image 文件
$ docker image build -t koa-demo . 或 $ docker image build -t koa-demo:0.0.1 .
-t 参数用来指定 image 文件的名字,后面还可以用冒号指定标签。如果不指定,默认的标签就是latest
-
查看生成的image
$ docker image ls
-
生成容器
$ docker container run -p 8000:3000 -it koa-demo /bin/bash 或 $ docker container run -p 8000:3000 -it koa-demo:0.0.1 /bin/bash
-
-p 容器的 3000 端口映射到本机的 8000 端口
-
-it 容器的 Shell 映射到当前的 Shell,然后你在本机窗口输入的命令,就会传入容器
-
koa-demo:0.0.1 image 文件的名字(如果有标签,还需要提供标签,默认是 latest 标签)
-
/bin/bash 容器内部第一个执行的命令。这里是启动 Bash,保证用户可以使用 Shell
-
-
执行命令 查看结果
root@fae881500d9a:/app# node demos/02.js
执行命令后 koa框架已经运行起来,浏览器访问
http://127.0.0.1:8000/
,页面如下 -
终止运行
Ctrl + c 停止 Node 进程 Ctrl + d (或者输入 exit)退出容器
或
$ docker container ls $ docker container kill [containerID]
-
删除容器文件
$ docker container ls --all $ docker container rm [containerID]
也可以使用以下命令启动,在容器终止运行后自动删除容器文件
$ docker container run --rm -p 8000:3000 -it koa-demo:0.0.1 /bin/bash
-
发布 image 文件
发布前要有账号 hub.docker.com注册账号
$ docker login // docker image tag [imageName] [username]/[repository]:[tag] $ docker image tag koa-demo:0.0.1 itxing/koa-demo:0.0.1 // docker image push [username]/[respository]:[tag] $ docker image push itxing/koa-demo:0.0.1
发布成功后,登录 hub.docker.com,可以看到自己发布的image文件了