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